Dat151 progress

This commit is contained in:
dexy 2018-12-28 19:02:21 +11:00
parent a4ca5f812d
commit 1d1295c29d
11 changed files with 2806 additions and 288 deletions

View File

@ -2986,7 +2986,7 @@ namespace CodeWalker.GameFiles
int brem = (16 - ((ExtParamCount * 12) % 16)) % 16;
if (brem > 0)
{
//byte[] brema = br.ReadBytes(brem);
byte[] brema = br.ReadBytes(brem);
//for (int i = 0; i < brem; i++)
//{
// if (brema[i] != 0)
@ -3315,6 +3315,256 @@ namespace CodeWalker.GameFiles
}
}
[TC(typeof(EXP))] public class Dat151Interior : Dat151RelData
{
public FlagsUint Unk0 { get; set; }
public FlagsUint Unk1 { get; set; }
public FlagsUint Unk2 { get; set; }
public uint RoomsCount { get; set; }
public MetaHash[] Rooms { get; set; }
public Dat151Interior(RelFile rel) : base(rel)
{
Type = Dat151RelType.Interior;
TypeID = (byte)Type;
}
public Dat151Interior(RelData d, BinaryReader br) : base(d, br)
{
Unk0 = br.ReadUInt32();
Unk1 = br.ReadUInt32();
Unk2 = br.ReadUInt32();
RoomsCount = br.ReadUInt32();
var rooms = new MetaHash[RoomsCount];
for (int i = 0; i < RoomsCount; i++)
{
rooms[i] = br.ReadUInt32();
}
Rooms = rooms;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Unk0.Value);
bw.Write(Unk1.Value);
bw.Write(Unk2.Value);
bw.Write(RoomsCount);
for (int i = 0; i < RoomsCount; i++)
{
bw.Write(Rooms[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < RoomsCount; i++)
{
offsets.Add(16 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData
{
public FlagsUint Flags0 { get; set; }
public MetaHash Unk00 { get; set; }
public MetaHash Hash1 { get; set; }
public uint Unk02 { get; set; }
public float Unk03 { get; set; }
public float Unk04 { get; set; }
public float Unk05 { get; set; }
public MetaHash Unk06 { get; set; }
public float Unk07 { get; set; }
public float Unk08 { get; set; }
public float Unk09 { get; set; }
public float Unk10 { get; set; }
public float Unk11 { get; set; }
public float Unk12 { get; set; }
public MetaHash Unk13 { get; set; }
public MetaHash Unk14 { get; set; }
public Dat151InteriorRoom(RelFile rel) : base(rel)
{
Type = Dat151RelType.InteriorRoom;
TypeID = (byte)Type;
}
public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br)
{
Flags0 = br.ReadUInt32();
Unk00 = br.ReadUInt32();
Hash1 = br.ReadUInt32();
Unk02 = br.ReadUInt32();
Unk03 = br.ReadSingle();
Unk04 = br.ReadSingle();
Unk05 = br.ReadSingle();
Unk06 = br.ReadUInt32();
Unk07 = br.ReadSingle();
Unk08 = br.ReadSingle();
Unk09 = br.ReadSingle();
Unk10 = br.ReadSingle();
Unk11 = br.ReadSingle();
Unk12 = br.ReadSingle();
Unk13 = br.ReadUInt32();
Unk14 = br.ReadUInt32();
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Flags0.Value);
bw.Write(Unk00);
bw.Write(Hash1);
bw.Write(Unk02);
bw.Write(Unk03);
bw.Write(Unk04);
bw.Write(Unk05);
bw.Write(Unk06);
bw.Write(Unk07);
bw.Write(Unk08);
bw.Write(Unk09);
bw.Write(Unk10);
bw.Write(Unk11);
bw.Write(Unk12);
bw.Write(Unk13);
bw.Write(Unk14);
}
public override uint[] GetHashTableOffsets()
{
return new uint[] { 8 };
}
}
[TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData
{
public uint AudioTracksCount { get; set; }
public MetaHash[] AudioTracks { get; set; }
public Dat151RadioStationsDLC(RelFile rel) : base(rel)
{
Type = Dat151RelType.RadioStationsDLC;
TypeID = (byte)Type;
}
public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br)
{
AudioTracksCount = br.ReadUInt32();
var tracks = new MetaHash[AudioTracksCount];
for (int i = 0; i < AudioTracksCount; i++)
{
tracks[i] = br.ReadUInt32();
}
AudioTracks = tracks;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(AudioTracksCount);
for (int i = 0; i < AudioTracksCount; i++)
{
bw.Write(AudioTracks[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < AudioTracksCount; i++)
{
offsets.Add(4 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData
{
public uint Unk00 { get; set; }
public uint Unk01 { get; set; }
public uint Unk02 { get; set; }
public uint Unk03 { get; set; }
public uint Unk04 { get; set; }
public uint Unk05 { get; set; }
public uint Unk06 { get; set; }
public uint Unk07 { get; set; }
public uint Unk08 { get; set; }
public uint Unk09 { get; set; }
public uint Unk10 { get; set; }
public uint Unk11 { get; set; }
public uint AudioTracksCount { get; set; }
public MetaHash[] AudioTracks { get; set; }
public Dat151RadioDLC(RelFile rel) : base(rel)
{
Type = Dat151RelType.RadioDLC;
TypeID = (byte)Type;
}
public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br)
{
Unk00 = br.ReadUInt32();
Unk01 = br.ReadUInt32();
Unk02 = br.ReadUInt32();
Unk03 = br.ReadUInt32();
Unk04 = br.ReadUInt32();
Unk05 = br.ReadUInt32();
Unk06 = br.ReadUInt32();
Unk07 = br.ReadUInt32();
Unk08 = br.ReadUInt32();
Unk09 = br.ReadUInt32();
Unk10 = br.ReadUInt32();
Unk11 = br.ReadUInt32();
AudioTracksCount = br.ReadUInt32();
var tracks = new MetaHash[AudioTracksCount];
for (int i = 0; i < AudioTracksCount; i++)
{
tracks[i] = br.ReadUInt32();
}
AudioTracks = tracks;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Unk00);
bw.Write(Unk01);
bw.Write(Unk02);
bw.Write(Unk03);
bw.Write(Unk04);
bw.Write(Unk05);
bw.Write(Unk06);
bw.Write(Unk07);
bw.Write(Unk08);
bw.Write(Unk09);
bw.Write(Unk10);
bw.Write(Unk11);
bw.Write(AudioTracksCount);
for (int i = 0; i < AudioTracksCount; i++)
{
bw.Write(AudioTracks[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < AudioTracksCount; i++)
{
offsets.Add(52 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData
{
@ -4062,132 +4312,6 @@ namespace CodeWalker.GameFiles
}
}
[TC(typeof(EXP))] public class Dat151Interior : Dat151RelData
{
public uint Unk0 { get; set; }
public uint Unk1 { get; set; }
public uint Unk2 { get; set; }
public uint RoomsCount { get; set; }
public MetaHash[] Rooms { get; set; }
public Dat151Interior(RelFile rel) : base(rel)
{
Type = Dat151RelType.Interior;
TypeID = (byte)Type;
}
public Dat151Interior(RelData d, BinaryReader br) : base(d, br)
{
Unk0 = br.ReadUInt32();
Unk1 = br.ReadUInt32();
Unk2 = br.ReadUInt32();
RoomsCount = br.ReadUInt32();
var rooms = new MetaHash[RoomsCount];
for (int i = 0; i < RoomsCount; i++)
{
rooms[i] = br.ReadUInt32();
}
Rooms = rooms;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Unk0);
bw.Write(Unk1);
bw.Write(Unk2);
bw.Write(RoomsCount);
for (int i = 0; i < RoomsCount; i++)
{
bw.Write(Rooms[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < RoomsCount; i++)
{
offsets.Add(16 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData
{
public uint Unk00 { get; set; }
public MetaHash Unk01 { get; set; }
public MetaHash AudioTrack0 { get; set; }
public uint Unk02 { get; set; }
public float Unk03 { get; set; }
public float Unk04 { get; set; }
public float Unk05 { get; set; }
public MetaHash Unk06 { get; set; }
public float Unk07 { get; set; }
public float Unk08 { get; set; }
public float Unk09 { get; set; }
public float Unk10 { get; set; }
public float Unk11 { get; set; }
public float Unk12 { get; set; }
public MetaHash Unk13 { get; set; }
public MetaHash Unk14 { get; set; }
public Dat151InteriorRoom(RelFile rel) : base(rel)
{
Type = Dat151RelType.InteriorRoom;
TypeID = (byte)Type;
}
public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br)
{
Unk00 = br.ReadUInt32();
Unk01 = br.ReadUInt32();
AudioTrack0 = br.ReadUInt32();
Unk02 = br.ReadUInt32();
Unk03 = br.ReadSingle();
Unk04 = br.ReadSingle();
Unk05 = br.ReadSingle();
Unk06 = br.ReadUInt32();
Unk07 = br.ReadSingle();
Unk08 = br.ReadSingle();
Unk09 = br.ReadSingle();
Unk10 = br.ReadSingle();
Unk11 = br.ReadSingle();
Unk12 = br.ReadSingle();
Unk13 = br.ReadUInt32();
Unk14 = br.ReadUInt32();
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Unk00);
bw.Write(Unk01);
bw.Write(AudioTrack0);
bw.Write(Unk02);
bw.Write(Unk03);
bw.Write(Unk04);
bw.Write(Unk05);
bw.Write(Unk06);
bw.Write(Unk07);
bw.Write(Unk08);
bw.Write(Unk09);
bw.Write(Unk10);
bw.Write(Unk11);
bw.Write(Unk12);
bw.Write(Unk13);
bw.Write(Unk14);
}
public override uint[] GetHashTableOffsets()
{
return new uint[] { 8 };
}
}
[TC(typeof(EXP))] public class Dat151Unk117 : Dat151RelData
{
public MetaHash AudioTrack0 { get; set; }
@ -4955,130 +5079,6 @@ namespace CodeWalker.GameFiles
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData
{
public uint AudioTracksCount { get; set; }
public MetaHash[] AudioTracks { get; set; }
public Dat151RadioStationsDLC(RelFile rel) : base(rel)
{
Type = Dat151RelType.RadioStationsDLC;
TypeID = (byte)Type;
}
public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br)
{
AudioTracksCount = br.ReadUInt32();
var tracks = new MetaHash[AudioTracksCount];
for (int i = 0; i < AudioTracksCount; i++)
{
tracks[i] = br.ReadUInt32();
}
AudioTracks = tracks;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(AudioTracksCount);
for (int i = 0; i < AudioTracksCount; i++)
{
bw.Write(AudioTracks[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < AudioTracksCount; i++)
{
offsets.Add(4 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData
{
public uint Unk00 { get; set; }
public uint Unk01 { get; set; }
public uint Unk02 { get; set; }
public uint Unk03 { get; set; }
public uint Unk04 { get; set; }
public uint Unk05 { get; set; }
public uint Unk06 { get; set; }
public uint Unk07 { get; set; }
public uint Unk08 { get; set; }
public uint Unk09 { get; set; }
public uint Unk10 { get; set; }
public uint Unk11 { get; set; }
public uint AudioTracksCount { get; set; }
public MetaHash[] AudioTracks { get; set; }
public Dat151RadioDLC(RelFile rel) : base(rel)
{
Type = Dat151RelType.RadioDLC;
TypeID = (byte)Type;
}
public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br)
{
Unk00 = br.ReadUInt32();
Unk01 = br.ReadUInt32();
Unk02 = br.ReadUInt32();
Unk03 = br.ReadUInt32();
Unk04 = br.ReadUInt32();
Unk05 = br.ReadUInt32();
Unk06 = br.ReadUInt32();
Unk07 = br.ReadUInt32();
Unk08 = br.ReadUInt32();
Unk09 = br.ReadUInt32();
Unk10 = br.ReadUInt32();
Unk11 = br.ReadUInt32();
AudioTracksCount = br.ReadUInt32();
var tracks = new MetaHash[AudioTracksCount];
for (int i = 0; i < AudioTracksCount; i++)
{
tracks[i] = br.ReadUInt32();
}
AudioTracks = tracks;
var bytesleft = br.BaseStream.Length - br.BaseStream.Position;
if (bytesleft != 0)
{ }
}
public override void Write(BinaryWriter bw)
{
WriteTypeAndOffset(bw);
bw.Write(Unk00);
bw.Write(Unk01);
bw.Write(Unk02);
bw.Write(Unk03);
bw.Write(Unk04);
bw.Write(Unk05);
bw.Write(Unk06);
bw.Write(Unk07);
bw.Write(Unk08);
bw.Write(Unk09);
bw.Write(Unk10);
bw.Write(Unk11);
bw.Write(AudioTracksCount);
for (int i = 0; i < AudioTracksCount; i++)
{
bw.Write(AudioTracks[i]);
}
}
public override uint[] GetHashTableOffsets()
{
var offsets = new List<uint>();
for (uint i = 0; i < AudioTracksCount; i++)
{
offsets.Add(52 + i * 4);
}
return offsets.ToArray();
}
}
[TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates?
{
public uint AudioItemCount { get; set; }

View File

@ -309,6 +309,18 @@
<Compile Include="Project\Panels\EditAudioFilePanel.Designer.cs">
<DependentUpon>EditAudioFilePanel.cs</DependentUpon>
</Compile>
<Compile Include="Project\Panels\EditAudioInteriorPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Project\Panels\EditAudioInteriorPanel.Designer.cs">
<DependentUpon>EditAudioInteriorPanel.cs</DependentUpon>
</Compile>
<Compile Include="Project\Panels\EditAudioInteriorRoomPanel.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Project\Panels\EditAudioInteriorRoomPanel.Designer.cs">
<DependentUpon>EditAudioInteriorRoomPanel.cs</DependentUpon>
</Compile>
<Compile Include="Project\Panels\EditAudioZoneListPanel.cs">
<SubType>Form</SubType>
</Compile>
@ -634,6 +646,12 @@
<EmbeddedResource Include="Project\Panels\EditAudioFilePanel.resx">
<DependentUpon>EditAudioFilePanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Project\Panels\EditAudioInteriorPanel.resx">
<DependentUpon>EditAudioInteriorPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Project\Panels\EditAudioInteriorRoomPanel.resx">
<DependentUpon>EditAudioInteriorRoomPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Project\Panels\EditAudioZoneListPanel.resx">
<DependentUpon>EditAudioZoneListPanel.cs</DependentUpon>
</EmbeddedResource>

View File

@ -0,0 +1,187 @@
namespace CodeWalker.Project.Panels
{
partial class EditAudioInteriorPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioInteriorPanel));
this.label12 = new System.Windows.Forms.Label();
this.NameTextBox = new System.Windows.Forms.TextBox();
this.label19 = new System.Windows.Forms.Label();
this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix();
this.DeleteButton = new System.Windows.Forms.Button();
this.label21 = new System.Windows.Forms.Label();
this.Flags2TextBox = new System.Windows.Forms.TextBox();
this.label14 = new System.Windows.Forms.Label();
this.Flags1TextBox = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.Flags0TextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// label12
//
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(31, 15);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(64, 13);
this.label12.TabIndex = 7;
this.label12.Text = "Name hash:";
//
// NameTextBox
//
this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.NameTextBox.Location = new System.Drawing.Point(108, 12);
this.NameTextBox.Name = "NameTextBox";
this.NameTextBox.Size = new System.Drawing.Size(428, 20);
this.NameTextBox.TabIndex = 8;
this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged);
//
// label19
//
this.label19.AutoSize = true;
this.label19.Location = new System.Drawing.Point(23, 111);
this.label19.Name = "label19";
this.label19.Size = new System.Drawing.Size(75, 13);
this.label19.TabIndex = 15;
this.label19.Text = "Room hashes:";
//
// HashesTextBox
//
this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.HashesTextBox.Location = new System.Drawing.Point(108, 108);
this.HashesTextBox.Multiline = true;
this.HashesTextBox.Name = "HashesTextBox";
this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.HashesTextBox.Size = new System.Drawing.Size(428, 330);
this.HashesTextBox.TabIndex = 16;
this.HashesTextBox.WordWrap = false;
this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged);
//
// DeleteButton
//
this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteButton.Location = new System.Drawing.Point(443, 55);
this.DeleteButton.Name = "DeleteButton";
this.DeleteButton.Size = new System.Drawing.Size(93, 23);
this.DeleteButton.TabIndex = 17;
this.DeleteButton.Text = "Delete interior";
this.DeleteButton.UseVisualStyleBackColor = true;
this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
//
// label21
//
this.label21.AutoSize = true;
this.label21.Location = new System.Drawing.Point(58, 87);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(44, 13);
this.label21.TabIndex = 13;
this.label21.Text = "Flags 2:";
//
// Flags2TextBox
//
this.Flags2TextBox.Location = new System.Drawing.Point(108, 84);
this.Flags2TextBox.Name = "Flags2TextBox";
this.Flags2TextBox.Size = new System.Drawing.Size(155, 20);
this.Flags2TextBox.TabIndex = 14;
this.Flags2TextBox.TextChanged += new System.EventHandler(this.Flags2TextBox_TextChanged);
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(58, 63);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(44, 13);
this.label14.TabIndex = 11;
this.label14.Text = "Flags 1:";
//
// Flags1TextBox
//
this.Flags1TextBox.Location = new System.Drawing.Point(108, 60);
this.Flags1TextBox.Name = "Flags1TextBox";
this.Flags1TextBox.Size = new System.Drawing.Size(155, 20);
this.Flags1TextBox.TabIndex = 12;
this.Flags1TextBox.TextChanged += new System.EventHandler(this.Flags1TextBox_TextChanged);
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(58, 39);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(44, 13);
this.label13.TabIndex = 9;
this.label13.Text = "Flags 0:";
//
// Flags0TextBox
//
this.Flags0TextBox.Location = new System.Drawing.Point(108, 36);
this.Flags0TextBox.Name = "Flags0TextBox";
this.Flags0TextBox.Size = new System.Drawing.Size(155, 20);
this.Flags0TextBox.TabIndex = 10;
this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged);
//
// EditAudioInteriorPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(562, 450);
this.Controls.Add(this.DeleteButton);
this.Controls.Add(this.label21);
this.Controls.Add(this.Flags2TextBox);
this.Controls.Add(this.label14);
this.Controls.Add(this.Flags1TextBox);
this.Controls.Add(this.label13);
this.Controls.Add(this.Flags0TextBox);
this.Controls.Add(this.label12);
this.Controls.Add(this.NameTextBox);
this.Controls.Add(this.label19);
this.Controls.Add(this.HashesTextBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "EditAudioInteriorPanel";
this.Text = "EditAudioInteriorPanel";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label12;
private System.Windows.Forms.TextBox NameTextBox;
private System.Windows.Forms.Label label19;
private WinForms.TextBoxFix HashesTextBox;
private System.Windows.Forms.Button DeleteButton;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.TextBox Flags2TextBox;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.TextBox Flags1TextBox;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.TextBox Flags0TextBox;
}
}

View File

@ -0,0 +1,207 @@
using CodeWalker.GameFiles;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CodeWalker.Project.Panels
{
public partial class EditAudioInteriorPanel : ProjectPanel
{
public ProjectForm ProjectForm;
public Dat151Interior CurrentInterior { get; set; }
private bool populatingui = false;
public EditAudioInteriorPanel(ProjectForm owner)
{
ProjectForm = owner;
InitializeComponent();
}
public void SetInterior(Dat151Interior interior)
{
CurrentInterior = interior;
Tag = interior;
UpdateFormTitle();
UpdateUI();
}
private void UpdateFormTitle()
{
Text = CurrentInterior?.NameHash.ToString() ?? "";
}
private void UpdateUI()
{
if (CurrentInterior == null)
{
//AddToProjectButton.Enabled = false;
DeleteButton.Enabled = false;
populatingui = true;
NameTextBox.Text = string.Empty;
Flags0TextBox.Text = string.Empty;
Flags1TextBox.Text = string.Empty;
Flags2TextBox.Text = string.Empty;
HashesTextBox.Text = string.Empty;
populatingui = false;
}
else
{
//AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false;
//DeleteButton.Enabled = !AddToProjectButton.Enabled;
populatingui = true;
var ci = CurrentInterior;
NameTextBox.Text = ci.NameHash.ToString();
Flags0TextBox.Text = ci.Unk0.Hex;
Flags1TextBox.Text = ci.Unk1.Hex;
Flags2TextBox.Text = ci.Unk2.Hex;
StringBuilder sb = new StringBuilder();
if (ci.Rooms != null)
{
foreach (var hash in ci.Rooms)
{
sb.AppendLine(hash.ToString());
}
}
HashesTextBox.Text = sb.ToString();
populatingui = false;
}
}
private void ProjectItemChanged()
{
if (CurrentInterior?.Rel != null)
{
ProjectForm.SetAudioFileHasChanged(true);
}
}
private void NameTextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentInterior == null) return;
uint hash = 0;
string name = NameTextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentInterior.NameHash != hash)
{
CurrentInterior.Name = NameTextBox.Text;
CurrentInterior.NameHash = hash;
ProjectItemChanged();
UpdateFormTitle();
}
}
private void Flags0TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentInterior == null) return;
uint flags = 0;
if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags))
{
if (CurrentInterior.Unk0.Value != flags)
{
CurrentInterior.Unk0 = flags;
ProjectItemChanged();
}
}
}
private void Flags1TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentInterior == null) return;
uint flags = 0;
if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags))
{
if (CurrentInterior.Unk1.Value != flags)
{
CurrentInterior.Unk1 = flags;
ProjectItemChanged();
}
}
}
private void Flags2TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentInterior == null) return;
uint flags = 0;
if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags))
{
if (CurrentInterior.Unk2.Value != flags)
{
CurrentInterior.Unk2 = flags;
ProjectItemChanged();
}
}
}
private void HashesTextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentInterior == null) return;
var hashstrs = HashesTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
if (hashstrs?.Length > 0)
{
var hashlist = new List<MetaHash>();
foreach (var hashstr in hashstrs)
{
uint hash = 0;
if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(hashstr);
JenkIndex.Ensure(hashstr);
}
hashlist.Add(hash);
}
CurrentInterior.Rooms = hashlist.ToArray();
CurrentInterior.RoomsCount = (byte)hashlist.Count;
ProjectItemChanged();
}
}
private void DeleteButton_Click(object sender, EventArgs e)
{
ProjectForm.SetProjectItem(CurrentInterior);
ProjectForm.DeleteAudioInterior();
}
}
}

View File

@ -0,0 +1,409 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f//
/wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA
AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc
skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU
0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq
+ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz
/eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR
p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm
+P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB
AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/
/f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/
+fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd
4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/
1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA
/v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/
9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA
AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA
/v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/
/P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/
/f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB///////
//AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA
H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A
A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA
/f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A
AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf
AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4
AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A//
///////gD/////////Af//////////////8=
</value>
</data>
</root>

View File

@ -0,0 +1,489 @@
namespace CodeWalker.Project.Panels
{
partial class EditAudioInteriorRoomPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioInteriorRoomPanel));
this.label12 = new System.Windows.Forms.Label();
this.NameTextBox = new System.Windows.Forms.TextBox();
this.DeleteButton = new System.Windows.Forms.Button();
this.label13 = new System.Windows.Forms.Label();
this.Flags0TextBox = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.Unk00TextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.Hash1TextBox = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.Unk02TextBox = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.Unk03TextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.Unk04TextBox = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.Unk05TextBox = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.Unk06TextBox = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.Unk07TextBox = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.Unk08TextBox = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.Unk09TextBox = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.Unk10TextBox = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.Unk11TextBox = new System.Windows.Forms.TextBox();
this.label14 = new System.Windows.Forms.Label();
this.Unk12TextBox = new System.Windows.Forms.TextBox();
this.label15 = new System.Windows.Forms.Label();
this.Unk13TextBox = new System.Windows.Forms.TextBox();
this.label17 = new System.Windows.Forms.Label();
this.Unk14TextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// label12
//
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(9, 15);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(64, 13);
this.label12.TabIndex = 9;
this.label12.Text = "Name hash:";
//
// NameTextBox
//
this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.NameTextBox.Location = new System.Drawing.Point(86, 12);
this.NameTextBox.Name = "NameTextBox";
this.NameTextBox.Size = new System.Drawing.Size(237, 20);
this.NameTextBox.TabIndex = 10;
this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged);
//
// DeleteButton
//
this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteButton.Location = new System.Drawing.Point(457, 10);
this.DeleteButton.Name = "DeleteButton";
this.DeleteButton.Size = new System.Drawing.Size(93, 23);
this.DeleteButton.TabIndex = 18;
this.DeleteButton.Text = "Delete room";
this.DeleteButton.UseVisualStyleBackColor = true;
this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
//
// label13
//
this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(345, 63);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(44, 13);
this.label13.TabIndex = 62;
this.label13.Text = "Flags 0:";
//
// Flags0TextBox
//
this.Flags0TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.Flags0TextBox.Location = new System.Drawing.Point(395, 60);
this.Flags0TextBox.Name = "Flags0TextBox";
this.Flags0TextBox.Size = new System.Drawing.Size(155, 20);
this.Flags0TextBox.TabIndex = 63;
this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged);
//
// label16
//
this.label16.AutoSize = true;
this.label16.Location = new System.Drawing.Point(9, 39);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(68, 13);
this.label16.TabIndex = 64;
this.label16.Text = "Unk00 hash:";
//
// Unk00TextBox
//
this.Unk00TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk00TextBox.Location = new System.Drawing.Point(86, 36);
this.Unk00TextBox.Name = "Unk00TextBox";
this.Unk00TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk00TextBox.TabIndex = 65;
this.Unk00TextBox.TextChanged += new System.EventHandler(this.Unk00TextBox_TextChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 63);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(64, 13);
this.label1.TabIndex = 66;
this.label1.Text = "Ref Hash 1:";
//
// Hash1TextBox
//
this.Hash1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Hash1TextBox.Location = new System.Drawing.Point(86, 60);
this.Hash1TextBox.Name = "Hash1TextBox";
this.Hash1TextBox.Size = new System.Drawing.Size(237, 20);
this.Hash1TextBox.TabIndex = 67;
this.Hash1TextBox.TextChanged += new System.EventHandler(this.Hash1TextBox_TextChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(9, 87);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(42, 13);
this.label2.TabIndex = 68;
this.label2.Text = "Unk02:";
//
// Unk02TextBox
//
this.Unk02TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk02TextBox.Location = new System.Drawing.Point(86, 84);
this.Unk02TextBox.Name = "Unk02TextBox";
this.Unk02TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk02TextBox.TabIndex = 69;
this.Unk02TextBox.TextChanged += new System.EventHandler(this.Unk02TextBox_TextChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(9, 111);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(42, 13);
this.label3.TabIndex = 70;
this.label3.Text = "Unk03:";
//
// Unk03TextBox
//
this.Unk03TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk03TextBox.Location = new System.Drawing.Point(86, 108);
this.Unk03TextBox.Name = "Unk03TextBox";
this.Unk03TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk03TextBox.TabIndex = 71;
this.Unk03TextBox.TextChanged += new System.EventHandler(this.Unk03TextBox_TextChanged);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(9, 135);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(42, 13);
this.label4.TabIndex = 72;
this.label4.Text = "Unk04:";
//
// Unk04TextBox
//
this.Unk04TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk04TextBox.Location = new System.Drawing.Point(86, 132);
this.Unk04TextBox.Name = "Unk04TextBox";
this.Unk04TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk04TextBox.TabIndex = 73;
this.Unk04TextBox.TextChanged += new System.EventHandler(this.Unk04TextBox_TextChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(9, 159);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(42, 13);
this.label5.TabIndex = 74;
this.label5.Text = "Unk05:";
//
// Unk05TextBox
//
this.Unk05TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk05TextBox.Location = new System.Drawing.Point(86, 156);
this.Unk05TextBox.Name = "Unk05TextBox";
this.Unk05TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk05TextBox.TabIndex = 75;
this.Unk05TextBox.TextChanged += new System.EventHandler(this.Unk05TextBox_TextChanged);
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(9, 183);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(68, 13);
this.label6.TabIndex = 76;
this.label6.Text = "Unk06 hash:";
//
// Unk06TextBox
//
this.Unk06TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk06TextBox.Location = new System.Drawing.Point(86, 180);
this.Unk06TextBox.Name = "Unk06TextBox";
this.Unk06TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk06TextBox.TabIndex = 77;
this.Unk06TextBox.TextChanged += new System.EventHandler(this.Unk06TextBox_TextChanged);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(9, 207);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(42, 13);
this.label7.TabIndex = 78;
this.label7.Text = "Unk07:";
//
// Unk07TextBox
//
this.Unk07TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk07TextBox.Location = new System.Drawing.Point(86, 204);
this.Unk07TextBox.Name = "Unk07TextBox";
this.Unk07TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk07TextBox.TabIndex = 79;
this.Unk07TextBox.TextChanged += new System.EventHandler(this.Unk07TextBox_TextChanged);
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(9, 231);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(42, 13);
this.label8.TabIndex = 80;
this.label8.Text = "Unk08:";
//
// Unk08TextBox
//
this.Unk08TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk08TextBox.Location = new System.Drawing.Point(86, 228);
this.Unk08TextBox.Name = "Unk08TextBox";
this.Unk08TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk08TextBox.TabIndex = 81;
this.Unk08TextBox.TextChanged += new System.EventHandler(this.Unk08TextBox_TextChanged);
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(9, 255);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(42, 13);
this.label9.TabIndex = 82;
this.label9.Text = "Unk09:";
//
// Unk09TextBox
//
this.Unk09TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk09TextBox.Location = new System.Drawing.Point(86, 252);
this.Unk09TextBox.Name = "Unk09TextBox";
this.Unk09TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk09TextBox.TabIndex = 83;
this.Unk09TextBox.TextChanged += new System.EventHandler(this.Unk09TextBox_TextChanged);
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(9, 279);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(42, 13);
this.label10.TabIndex = 84;
this.label10.Text = "Unk10:";
//
// Unk10TextBox
//
this.Unk10TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk10TextBox.Location = new System.Drawing.Point(86, 276);
this.Unk10TextBox.Name = "Unk10TextBox";
this.Unk10TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk10TextBox.TabIndex = 85;
this.Unk10TextBox.TextChanged += new System.EventHandler(this.Unk10TextBox_TextChanged);
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(9, 303);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(42, 13);
this.label11.TabIndex = 86;
this.label11.Text = "Unk11:";
//
// Unk11TextBox
//
this.Unk11TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk11TextBox.Location = new System.Drawing.Point(86, 300);
this.Unk11TextBox.Name = "Unk11TextBox";
this.Unk11TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk11TextBox.TabIndex = 87;
this.Unk11TextBox.TextChanged += new System.EventHandler(this.Unk11TextBox_TextChanged);
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(9, 327);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(42, 13);
this.label14.TabIndex = 88;
this.label14.Text = "Unk12:";
//
// Unk12TextBox
//
this.Unk12TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk12TextBox.Location = new System.Drawing.Point(86, 324);
this.Unk12TextBox.Name = "Unk12TextBox";
this.Unk12TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk12TextBox.TabIndex = 89;
this.Unk12TextBox.TextChanged += new System.EventHandler(this.Unk12TextBox_TextChanged);
//
// label15
//
this.label15.AutoSize = true;
this.label15.Location = new System.Drawing.Point(9, 351);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(68, 13);
this.label15.TabIndex = 90;
this.label15.Text = "Unk13 hash:";
//
// Unk13TextBox
//
this.Unk13TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk13TextBox.Location = new System.Drawing.Point(86, 348);
this.Unk13TextBox.Name = "Unk13TextBox";
this.Unk13TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk13TextBox.TabIndex = 91;
this.Unk13TextBox.TextChanged += new System.EventHandler(this.Unk13TextBox_TextChanged);
//
// label17
//
this.label17.AutoSize = true;
this.label17.Location = new System.Drawing.Point(9, 375);
this.label17.Name = "label17";
this.label17.Size = new System.Drawing.Size(68, 13);
this.label17.TabIndex = 92;
this.label17.Text = "Unk14 hash:";
//
// Unk14TextBox
//
this.Unk14TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Unk14TextBox.Location = new System.Drawing.Point(86, 372);
this.Unk14TextBox.Name = "Unk14TextBox";
this.Unk14TextBox.Size = new System.Drawing.Size(237, 20);
this.Unk14TextBox.TabIndex = 93;
this.Unk14TextBox.TextChanged += new System.EventHandler(this.Unk14TextBox_TextChanged);
//
// EditAudioInteriorRoomPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(562, 450);
this.Controls.Add(this.label17);
this.Controls.Add(this.Unk14TextBox);
this.Controls.Add(this.label15);
this.Controls.Add(this.Unk13TextBox);
this.Controls.Add(this.label14);
this.Controls.Add(this.Unk12TextBox);
this.Controls.Add(this.label11);
this.Controls.Add(this.Unk11TextBox);
this.Controls.Add(this.label10);
this.Controls.Add(this.Unk10TextBox);
this.Controls.Add(this.label9);
this.Controls.Add(this.Unk09TextBox);
this.Controls.Add(this.label8);
this.Controls.Add(this.Unk08TextBox);
this.Controls.Add(this.label7);
this.Controls.Add(this.Unk07TextBox);
this.Controls.Add(this.label6);
this.Controls.Add(this.Unk06TextBox);
this.Controls.Add(this.label5);
this.Controls.Add(this.Unk05TextBox);
this.Controls.Add(this.label4);
this.Controls.Add(this.Unk04TextBox);
this.Controls.Add(this.label3);
this.Controls.Add(this.Unk03TextBox);
this.Controls.Add(this.label2);
this.Controls.Add(this.Unk02TextBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.Hash1TextBox);
this.Controls.Add(this.label16);
this.Controls.Add(this.Unk00TextBox);
this.Controls.Add(this.label13);
this.Controls.Add(this.Flags0TextBox);
this.Controls.Add(this.DeleteButton);
this.Controls.Add(this.label12);
this.Controls.Add(this.NameTextBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "EditAudioInteriorRoomPanel";
this.Text = "EditAudioInteriorRoomPanel";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label12;
private System.Windows.Forms.TextBox NameTextBox;
private System.Windows.Forms.Button DeleteButton;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.TextBox Flags0TextBox;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.TextBox Unk00TextBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Hash1TextBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox Unk02TextBox;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox Unk03TextBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox Unk04TextBox;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox Unk05TextBox;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox Unk06TextBox;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox Unk07TextBox;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox Unk08TextBox;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox Unk09TextBox;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox Unk10TextBox;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.TextBox Unk11TextBox;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.TextBox Unk12TextBox;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.TextBox Unk13TextBox;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.TextBox Unk14TextBox;
}
}

View File

@ -0,0 +1,436 @@
using CodeWalker.GameFiles;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CodeWalker.Project.Panels
{
public partial class EditAudioInteriorRoomPanel : ProjectPanel
{
public ProjectForm ProjectForm;
public Dat151InteriorRoom CurrentRoom { get; set; }
private bool populatingui = false;
public EditAudioInteriorRoomPanel(ProjectForm owner)
{
ProjectForm = owner;
InitializeComponent();
}
public void SetRoom(Dat151InteriorRoom room)
{
CurrentRoom = room;
Tag = room;
UpdateFormTitle();
UpdateUI();
}
private void UpdateFormTitle()
{
Text = CurrentRoom?.NameHash.ToString() ?? "";
}
private void UpdateUI()
{
if (CurrentRoom == null)
{
//AddToProjectButton.Enabled = false;
DeleteButton.Enabled = false;
populatingui = true;
NameTextBox.Text = string.Empty;
Unk00TextBox.Text = string.Empty;
Hash1TextBox.Text = string.Empty;
Unk02TextBox.Text = string.Empty;
Unk03TextBox.Text = string.Empty;
Unk04TextBox.Text = string.Empty;
Unk05TextBox.Text = string.Empty;
Unk06TextBox.Text = string.Empty;
Unk07TextBox.Text = string.Empty;
Unk08TextBox.Text = string.Empty;
Unk09TextBox.Text = string.Empty;
Unk10TextBox.Text = string.Empty;
Unk11TextBox.Text = string.Empty;
Unk12TextBox.Text = string.Empty;
Unk13TextBox.Text = string.Empty;
Unk14TextBox.Text = string.Empty;
Flags0TextBox.Text = string.Empty;
populatingui = false;
}
else
{
//AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false;
DeleteButton.Enabled = !(CurrentRoom?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentRoom.Rel) : false);// AddToProjectButton.Enabled;
populatingui = true;
var cr = CurrentRoom;
NameTextBox.Text = cr.NameHash.ToString();
Unk00TextBox.Text = cr.Unk00.ToString();
Hash1TextBox.Text = cr.Hash1.ToString();
Unk02TextBox.Text = cr.Unk02.ToString();
Unk03TextBox.Text = FloatUtil.ToString(cr.Unk03);
Unk04TextBox.Text = FloatUtil.ToString(cr.Unk04);
Unk05TextBox.Text = FloatUtil.ToString(cr.Unk05);
Unk06TextBox.Text = cr.Unk06.ToString();
Unk07TextBox.Text = FloatUtil.ToString(cr.Unk07);
Unk08TextBox.Text = FloatUtil.ToString(cr.Unk08);
Unk09TextBox.Text = FloatUtil.ToString(cr.Unk09);
Unk10TextBox.Text = FloatUtil.ToString(cr.Unk10);
Unk11TextBox.Text = FloatUtil.ToString(cr.Unk11);
Unk12TextBox.Text = FloatUtil.ToString(cr.Unk12);
Unk13TextBox.Text = cr.Unk13.ToString();
Unk14TextBox.Text = cr.Unk14.ToString();
Flags0TextBox.Text = cr.Flags0.Hex;
populatingui = false;
}
}
private void ProjectItemChanged()
{
if (CurrentRoom?.Rel != null)
{
ProjectForm.SetAudioFileHasChanged(true);
}
}
private void NameTextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = NameTextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.NameHash != hash)
{
CurrentRoom.Name = NameTextBox.Text;
CurrentRoom.NameHash = hash;
ProjectItemChanged();
UpdateFormTitle();
}
}
private void Unk00TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = Unk00TextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.Unk00 != hash)
{
CurrentRoom.Unk00 = hash;
ProjectItemChanged();
}
}
private void Hash1TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = Hash1TextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.Hash1 != hash)
{
CurrentRoom.Hash1 = hash;
ProjectItemChanged();
}
}
private void Unk02TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint val = 0;
if (uint.TryParse(Unk02TextBox.Text, out val))
{
if (CurrentRoom.Unk02 != val)
{
CurrentRoom.Unk02 = val;
ProjectItemChanged();
}
}
}
private void Unk03TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk03TextBox.Text, out val))
{
if (CurrentRoom.Unk03 != val)
{
CurrentRoom.Unk03 = val;
ProjectItemChanged();
}
}
}
private void Unk04TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk04TextBox.Text, out val))
{
if (CurrentRoom.Unk04 != val)
{
CurrentRoom.Unk04 = val;
ProjectItemChanged();
}
}
}
private void Unk05TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk05TextBox.Text, out val))
{
if (CurrentRoom.Unk05 != val)
{
CurrentRoom.Unk05 = val;
ProjectItemChanged();
}
}
}
private void Unk06TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = Unk06TextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.Unk06 != hash)
{
CurrentRoom.Unk06 = hash;
ProjectItemChanged();
}
}
private void Unk07TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk07TextBox.Text, out val))
{
if (CurrentRoom.Unk07 != val)
{
CurrentRoom.Unk07 = val;
ProjectItemChanged();
}
}
}
private void Unk08TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk08TextBox.Text, out val))
{
if (CurrentRoom.Unk08 != val)
{
CurrentRoom.Unk08 = val;
ProjectItemChanged();
}
}
}
private void Unk09TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk09TextBox.Text, out val))
{
if (CurrentRoom.Unk09 != val)
{
CurrentRoom.Unk09 = val;
ProjectItemChanged();
}
}
}
private void Unk10TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk10TextBox.Text, out val))
{
if (CurrentRoom.Unk10 != val)
{
CurrentRoom.Unk10 = val;
ProjectItemChanged();
}
}
}
private void Unk11TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk11TextBox.Text, out val))
{
if (CurrentRoom.Unk11 != val)
{
CurrentRoom.Unk11 = val;
ProjectItemChanged();
}
}
}
private void Unk12TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
float val = 0;
if (FloatUtil.TryParse(Unk12TextBox.Text, out val))
{
if (CurrentRoom.Unk12 != val)
{
CurrentRoom.Unk12 = val;
ProjectItemChanged();
}
}
}
private void Unk13TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = Unk13TextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.Unk13 != hash)
{
CurrentRoom.Unk13 = hash;
ProjectItemChanged();
}
}
private void Unk14TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint hash = 0;
string name = Unk14TextBox.Text;
if (!uint.TryParse(name, out hash))//don't re-hash hashes
{
hash = JenkHash.GenHash(name);
JenkIndex.Ensure(name);
}
//NameHashLabel.Text = "Hash: " + hash.ToString();
if (CurrentRoom.Unk14 != hash)
{
CurrentRoom.Unk14 = hash;
ProjectItemChanged();
}
}
private void Flags0TextBox_TextChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (CurrentRoom == null) return;
uint flags = 0;
if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags))
{
if (CurrentRoom.Flags0.Value != flags)
{
CurrentRoom.Flags0 = flags;
ProjectItemChanged();
}
}
}
private void DeleteButton_Click(object sender, EventArgs e)
{
ProjectForm.SetProjectItem(CurrentRoom);
ProjectForm.DeleteAudioInteriorRoom();
}
}
}

View File

@ -0,0 +1,409 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f//
/wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA
AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc
skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU
0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq
+ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz
/eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR
p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm
+P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB
AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/
/f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/
+fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd
4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/
1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA
/v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/
9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA
AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA
/v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/
/P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/
/f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB///////
//AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA
H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A
A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA
/f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A
AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf
AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4
AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A//
///////gD/////////Af//////////////8=
</value>
</data>
</root>

View File

@ -457,6 +457,8 @@ namespace CodeWalker.Project.Panels
var emitters = new List<Dat151AmbientEmitter>();
var zonelists = new List<Dat151AmbientZoneList>();
var emitterlists = new List<Dat151AmbientEmitterList>();
var interiors = new List<Dat151Interior>();
var interiorrooms = new List<Dat151InteriorRoom>();
foreach (var reldata in rel.RelDatasSorted)
{
@ -476,6 +478,14 @@ namespace CodeWalker.Project.Panels
{
emitterlists.Add(reldata as Dat151AmbientEmitterList);
}
if (reldata is Dat151Interior)
{
interiors.Add(reldata as Dat151Interior);
}
if (reldata is Dat151InteriorRoom)
{
interiorrooms.Add(reldata as Dat151InteriorRoom);
}
}
@ -537,6 +547,32 @@ namespace CodeWalker.Project.Panels
}
}
if (interiors.Count > 0)
{
var n = node.Nodes.Add("Interiors (" + interiors.Count.ToString() + ")");
n.Name = "Interiors";
n.Tag = rel;
for (int i = 0; i < interiors.Count; i++)
{
var interior = interiors[i];
var tnode = n.Nodes.Add(interior.NameHash.ToString());
tnode.Tag = interior;
}
}
if (interiorrooms.Count > 0)
{
var n = node.Nodes.Add("Interior Rooms (" + interiorrooms.Count.ToString() + ")");
n.Name = "InteriorRooms";
n.Tag = rel;
for (int i = 0; i < interiorrooms.Count; i++)
{
var room = interiorrooms[i];
var tnode = n.Nodes.Add(room.NameHash.ToString());
tnode.Tag = room;
}
}
}
@ -1102,6 +1138,32 @@ namespace CodeWalker.Project.Panels
}
return null;
}
public TreeNode FindAudioInteriorTreeNode(Dat151Interior interior)
{
if (interior == null) return null;
TreeNode relnode = FindAudioRelTreeNode(interior.Rel);
var interiorsnode = GetChildTreeNode(relnode, "Interiors");
if (interiorsnode == null) return null;
for (int i = 0; i < interiorsnode.Nodes.Count; i++)
{
TreeNode enode = interiorsnode.Nodes[i];
if (enode.Tag == interior) return enode;
}
return null;
}
public TreeNode FindAudioInteriorRoomTreeNode(Dat151InteriorRoom room)
{
if (room == null) return null;
TreeNode relnode = FindAudioRelTreeNode(room.Rel);
var roomsnode = GetChildTreeNode(relnode, "InteriorRooms");
if (roomsnode == null) return null;
for (int i = 0; i < roomsnode.Nodes.Count; i++)
{
TreeNode enode = roomsnode.Nodes[i];
if (enode.Tag == room) return enode;
}
return null;
}
@ -1421,6 +1483,45 @@ namespace CodeWalker.Project.Panels
}
}
}
public void TrySelectAudioInteriorTreeNode(Dat151Interior interior)
{
TreeNode tnode = FindAudioInteriorTreeNode(interior);
if (tnode == null)
{
tnode = FindAudioRelTreeNode(interior?.Rel);
}
if (tnode != null)
{
if (ProjectTreeView.SelectedNode == tnode)
{
OnItemSelected?.Invoke(interior);
}
else
{
ProjectTreeView.SelectedNode = tnode;
}
}
}
public void TrySelectAudioInteriorRoomTreeNode(Dat151InteriorRoom room)
{
TreeNode tnode = FindAudioInteriorRoomTreeNode(room);
if (tnode == null)
{
tnode = FindAudioRelTreeNode(room?.Rel);
}
if (tnode != null)
{
if (ProjectTreeView.SelectedNode == tnode)
{
OnItemSelected?.Invoke(room);
}
else
{
ProjectTreeView.SelectedNode = tnode;
}
}
}
@ -1501,6 +1602,22 @@ namespace CodeWalker.Project.Panels
tn.Text = list.NameHash.ToString();
}
}
public void UpdateAudioInteriorTreeNode(Dat151Interior interior)
{
var tn = FindAudioInteriorTreeNode(interior);
if (tn != null)
{
tn.Text = interior.NameHash.ToString();
}
}
public void UpdateAudioInteriorRoomTreeNode(Dat151InteriorRoom room)
{
var tn = FindAudioInteriorRoomTreeNode(room);
if (tn != null)
{
tn.Text = room.NameHash.ToString();
}
}
@ -1654,6 +1771,42 @@ namespace CodeWalker.Project.Panels
tn.Parent.Nodes.Remove(tn);
}
}
public void RemoveAudioInteriorTreeNode(Dat151Interior interior)
{
var tn = FindAudioInteriorTreeNode(interior);
if ((tn != null) && (tn.Parent != null))
{
var interiors = new List<Dat151Interior>();
foreach (var reldata in interior.Rel.RelDatas)
{
if (reldata is Dat151Interior)
{
interiors.Add(reldata as Dat151Interior);
}
}
tn.Parent.Text = "Interiors (" + interiors.Count.ToString() + ")";
tn.Parent.Nodes.Remove(tn);
}
}
public void RemoveAudioInteriorRoomTreeNode(Dat151InteriorRoom room)
{
var tn = FindAudioInteriorRoomTreeNode(room);
if ((tn != null) && (tn.Parent != null))
{
var interiors = new List<Dat151InteriorRoom>();
foreach (var reldata in room.Rel.RelDatas)
{
if (reldata is Dat151InteriorRoom)
{
interiors.Add(reldata as Dat151InteriorRoom);
}
}
tn.Parent.Text = "Interior Rooms (" + interiors.Count.ToString() + ")";
tn.Parent.Nodes.Remove(tn);
}
}

View File

@ -41,6 +41,7 @@
this.FileNewYnvMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileNewTrainsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileNewScenarioMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileNewAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenProjectMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
@ -50,6 +51,7 @@
this.FileOpenYnvMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenTrainsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenScenarioMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.FileCloseProjectMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
@ -168,8 +170,8 @@
this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton();
this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.FileNewAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem();
this.FileOpenAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem();
this.AudioNewInteriorMenu = new System.Windows.Forms.ToolStripMenuItem();
this.AudioNewInteriorRoomMenu = new System.Windows.Forms.ToolStripMenuItem();
this.MainMenu.SuspendLayout();
this.MainToolbar.SuspendLayout();
this.SuspendLayout();
@ -224,63 +226,70 @@
this.FileNewScenarioMenu,
this.FileNewAudioDatMenu});
this.FileNewMenu.Name = "FileNewMenu";
this.FileNewMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewMenu.Size = new System.Drawing.Size(163, 22);
this.FileNewMenu.Text = "New";
//
// FileNewProjectMenu
//
this.FileNewProjectMenu.Name = "FileNewProjectMenu";
this.FileNewProjectMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewProjectMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewProjectMenu.Text = "Project";
this.FileNewProjectMenu.Click += new System.EventHandler(this.FileNewProjectMenu_Click);
//
// toolStripSeparator8
//
this.toolStripSeparator8.Name = "toolStripSeparator8";
this.toolStripSeparator8.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator8.Size = new System.Drawing.Size(145, 6);
//
// FileNewYmapMenu
//
this.FileNewYmapMenu.Name = "FileNewYmapMenu";
this.FileNewYmapMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewYmapMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewYmapMenu.Text = "Ymap File";
this.FileNewYmapMenu.Click += new System.EventHandler(this.FileNewYmapMenu_Click);
//
// FileNewYtypMenu
//
this.FileNewYtypMenu.Name = "FileNewYtypMenu";
this.FileNewYtypMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewYtypMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewYtypMenu.Text = "Ytyp File";
this.FileNewYtypMenu.Click += new System.EventHandler(this.FileNewYtypMenu_Click);
//
// FileNewYndMenu
//
this.FileNewYndMenu.Name = "FileNewYndMenu";
this.FileNewYndMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewYndMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewYndMenu.Text = "Ynd File";
this.FileNewYndMenu.Click += new System.EventHandler(this.FileNewYndMenu_Click);
//
// FileNewYnvMenu
//
this.FileNewYnvMenu.Name = "FileNewYnvMenu";
this.FileNewYnvMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewYnvMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewYnvMenu.Text = "Ynv File";
this.FileNewYnvMenu.Click += new System.EventHandler(this.FileNewYnvMenu_Click);
//
// FileNewTrainsMenu
//
this.FileNewTrainsMenu.Name = "FileNewTrainsMenu";
this.FileNewTrainsMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewTrainsMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewTrainsMenu.Text = "Trains File";
this.FileNewTrainsMenu.Click += new System.EventHandler(this.FileNewTrainsMenu_Click);
//
// FileNewScenarioMenu
//
this.FileNewScenarioMenu.Name = "FileNewScenarioMenu";
this.FileNewScenarioMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewScenarioMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewScenarioMenu.Text = "Scenario File";
this.FileNewScenarioMenu.Click += new System.EventHandler(this.FileNewScenarioMenu_Click);
//
// FileNewAudioDatMenu
//
this.FileNewAudioDatMenu.Name = "FileNewAudioDatMenu";
this.FileNewAudioDatMenu.Size = new System.Drawing.Size(148, 22);
this.FileNewAudioDatMenu.Text = "Audio Dat File";
this.FileNewAudioDatMenu.Click += new System.EventHandler(this.FileNewAudioDatMenu_Click);
//
// FileOpenMenu
//
this.FileOpenMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -294,86 +303,93 @@
this.FileOpenScenarioMenu,
this.FileOpenAudioDatMenu});
this.FileOpenMenu.Name = "FileOpenMenu";
this.FileOpenMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenMenu.Size = new System.Drawing.Size(163, 22);
this.FileOpenMenu.Text = "Open";
//
// FileOpenProjectMenu
//
this.FileOpenProjectMenu.Name = "FileOpenProjectMenu";
this.FileOpenProjectMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenProjectMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenProjectMenu.Text = "Project...";
this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click);
//
// toolStripSeparator9
//
this.toolStripSeparator9.Name = "toolStripSeparator9";
this.toolStripSeparator9.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator9.Size = new System.Drawing.Size(154, 6);
//
// FileOpenYmapMenu
//
this.FileOpenYmapMenu.Name = "FileOpenYmapMenu";
this.FileOpenYmapMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenYmapMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenYmapMenu.Text = "Ymap File...";
this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click);
//
// FileOpenYtypMenu
//
this.FileOpenYtypMenu.Name = "FileOpenYtypMenu";
this.FileOpenYtypMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenYtypMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenYtypMenu.Text = "Ytyp File...";
this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click);
//
// FileOpenYndMenu
//
this.FileOpenYndMenu.Name = "FileOpenYndMenu";
this.FileOpenYndMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenYndMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenYndMenu.Text = "Ynd File...";
this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click);
//
// FileOpenYnvMenu
//
this.FileOpenYnvMenu.Name = "FileOpenYnvMenu";
this.FileOpenYnvMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenYnvMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenYnvMenu.Text = "Ynv File...";
this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click);
//
// FileOpenTrainsMenu
//
this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu";
this.FileOpenTrainsMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenTrainsMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenTrainsMenu.Text = "Trains File...";
this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click);
//
// FileOpenScenarioMenu
//
this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu";
this.FileOpenScenarioMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenScenarioMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenScenarioMenu.Text = "Scenario File...";
this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click);
//
// FileOpenAudioDatMenu
//
this.FileOpenAudioDatMenu.Name = "FileOpenAudioDatMenu";
this.FileOpenAudioDatMenu.Size = new System.Drawing.Size(157, 22);
this.FileOpenAudioDatMenu.Text = "Audio Dat File...";
this.FileOpenAudioDatMenu.Click += new System.EventHandler(this.FileOpenAudioDatMenu_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator3.Size = new System.Drawing.Size(160, 6);
//
// FileCloseProjectMenu
//
this.FileCloseProjectMenu.Enabled = false;
this.FileCloseProjectMenu.Name = "FileCloseProjectMenu";
this.FileCloseProjectMenu.Size = new System.Drawing.Size(180, 22);
this.FileCloseProjectMenu.Size = new System.Drawing.Size(163, 22);
this.FileCloseProjectMenu.Text = "Close Project";
this.FileCloseProjectMenu.Click += new System.EventHandler(this.FileCloseProjectMenu_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator4.Size = new System.Drawing.Size(160, 6);
//
// FileSaveProjectMenu
//
this.FileSaveProjectMenu.Enabled = false;
this.FileSaveProjectMenu.Name = "FileSaveProjectMenu";
this.FileSaveProjectMenu.Size = new System.Drawing.Size(180, 22);
this.FileSaveProjectMenu.Size = new System.Drawing.Size(163, 22);
this.FileSaveProjectMenu.Text = "Save Project";
this.FileSaveProjectMenu.Click += new System.EventHandler(this.FileSaveProjectMenu_Click);
//
@ -381,7 +397,7 @@
//
this.FileSaveProjectAsMenu.Enabled = false;
this.FileSaveProjectAsMenu.Name = "FileSaveProjectAsMenu";
this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(180, 22);
this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(163, 22);
this.FileSaveProjectAsMenu.Text = "Save Project As...";
this.FileSaveProjectAsMenu.Click += new System.EventHandler(this.FileSaveProjectAsMenu_Click);
//
@ -389,7 +405,7 @@
//
this.FileSaveItemMenu.Enabled = false;
this.FileSaveItemMenu.Name = "FileSaveItemMenu";
this.FileSaveItemMenu.Size = new System.Drawing.Size(180, 22);
this.FileSaveItemMenu.Size = new System.Drawing.Size(163, 22);
this.FileSaveItemMenu.Text = "Save Item";
this.FileSaveItemMenu.Visible = false;
this.FileSaveItemMenu.Click += new System.EventHandler(this.FileSaveItemMenu_Click);
@ -398,7 +414,7 @@
//
this.FileSaveItemAsMenu.Enabled = false;
this.FileSaveItemAsMenu.Name = "FileSaveItemAsMenu";
this.FileSaveItemAsMenu.Size = new System.Drawing.Size(180, 22);
this.FileSaveItemAsMenu.Size = new System.Drawing.Size(163, 22);
this.FileSaveItemAsMenu.Text = "Save Item As...";
this.FileSaveItemAsMenu.Visible = false;
this.FileSaveItemAsMenu.Click += new System.EventHandler(this.FileSaveItemAsMenu_Click);
@ -952,6 +968,8 @@
this.AudioNewAmbientEmitterListMenu,
this.AudioNewAmbientZoneMenu,
this.AudioNewAmbientZoneListMenu,
this.AudioNewInteriorMenu,
this.AudioNewInteriorRoomMenu,
this.toolStripSeparator24,
this.AudioAddToProjectMenu,
this.AudioRemoveFromProjectMenu});
@ -1300,19 +1318,21 @@
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25);
//
// FileNewAudioDatMenu
// AudioNewInteriorMenu
//
this.FileNewAudioDatMenu.Name = "FileNewAudioDatMenu";
this.FileNewAudioDatMenu.Size = new System.Drawing.Size(180, 22);
this.FileNewAudioDatMenu.Text = "Audio Dat File";
this.FileNewAudioDatMenu.Click += new System.EventHandler(this.FileNewAudioDatMenu_Click);
this.AudioNewInteriorMenu.Enabled = false;
this.AudioNewInteriorMenu.Name = "AudioNewInteriorMenu";
this.AudioNewInteriorMenu.Size = new System.Drawing.Size(216, 22);
this.AudioNewInteriorMenu.Text = "New Interior";
this.AudioNewInteriorMenu.Click += new System.EventHandler(this.AudioNewInteriorMenu_Click);
//
// FileOpenAudioDatMenu
// AudioNewInteriorRoomMenu
//
this.FileOpenAudioDatMenu.Name = "FileOpenAudioDatMenu";
this.FileOpenAudioDatMenu.Size = new System.Drawing.Size(180, 22);
this.FileOpenAudioDatMenu.Text = "Audio Dat File...";
this.FileOpenAudioDatMenu.Click += new System.EventHandler(this.FileOpenAudioDatMenu_Click);
this.AudioNewInteriorRoomMenu.Enabled = false;
this.AudioNewInteriorRoomMenu.Name = "AudioNewInteriorRoomMenu";
this.AudioNewInteriorRoomMenu.Size = new System.Drawing.Size(216, 22);
this.AudioNewInteriorRoomMenu.Text = "New Interior Room";
this.AudioNewInteriorRoomMenu.Click += new System.EventHandler(this.AudioNewInteriorRoomMenu_Click);
//
// ProjectForm
//
@ -1480,5 +1500,7 @@
private System.Windows.Forms.ToolStripMenuItem AudioRemoveFromProjectMenu;
private System.Windows.Forms.ToolStripMenuItem FileNewAudioDatMenu;
private System.Windows.Forms.ToolStripMenuItem FileOpenAudioDatMenu;
private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorMenu;
private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorRoomMenu;
}
}

View File

@ -67,6 +67,8 @@ namespace CodeWalker.Project
private AudioPlacement CurrentAudioEmitter;
private Dat151AmbientZoneList CurrentAudioZoneList;
private Dat151AmbientEmitterList CurrentAudioEmitterList;
private Dat151Interior CurrentAudioInterior;
private Dat151InteriorRoom CurrentAudioInteriorRoom;
private bool renderitems = true;
private bool hidegtavmap = false;
@ -486,6 +488,20 @@ namespace CodeWalker.Project
(panel) => { panel.SetEmitterList(CurrentAudioEmitterList); }, //updateFunc
(panel) => { return panel.CurrentEmitterList == CurrentAudioEmitterList; }); //findFunc
}
public void ShowEditAudioInteriorPanel(bool promote)
{
ShowPanel(promote,
() => { return new EditAudioInteriorPanel(this); }, //createFunc
(panel) => { panel.SetInterior(CurrentAudioInterior); }, //updateFunc
(panel) => { return panel.CurrentInterior == CurrentAudioInterior; }); //findFunc
}
public void ShowEditAudioInteriorRoomPanel(bool promote)
{
ShowPanel(promote,
() => { return new EditAudioInteriorRoomPanel(this); }, //createFunc
(panel) => { panel.SetRoom(CurrentAudioInteriorRoom); }, //updateFunc
(panel) => { return panel.CurrentRoom == CurrentAudioInteriorRoom; }); //findFunc
}
private void ShowCurrentProjectItem(bool promote)
{
@ -577,6 +593,14 @@ namespace CodeWalker.Project
{
ShowEditAudioEmitterListPanel(promote);
}
else if (CurrentAudioInterior != null)
{
ShowEditAudioInteriorPanel(promote);
}
else if (CurrentAudioInteriorRoom != null)
{
ShowEditAudioInteriorRoomPanel(promote);
}
else if (CurrentAudioFile != null)
{
ShowEditAudioFilePanel(promote);
@ -625,6 +649,8 @@ namespace CodeWalker.Project
CurrentAudioEmitter = item as AudioPlacement;
CurrentAudioZoneList = item as Dat151AmbientZoneList;
CurrentAudioEmitterList = item as Dat151AmbientEmitterList;
CurrentAudioInterior = item as Dat151Interior;
CurrentAudioInteriorRoom = item as Dat151InteriorRoom;
CurrentMloRoom = item as MCMloRoomDef;
if (CurrentAudioZone?.AudioZone == null) CurrentAudioZone = null;
@ -724,6 +750,14 @@ namespace CodeWalker.Project
{
CurrentAudioFile = CurrentAudioEmitterList.Rel;
}
if (CurrentAudioInterior != null)
{
CurrentAudioFile = CurrentAudioInterior.Rel;
}
if (CurrentAudioInteriorRoom != null)
{
CurrentAudioFile = CurrentAudioInteriorRoom.Rel;
}
RefreshUI();
@ -4774,6 +4808,8 @@ namespace CodeWalker.Project
var zonelist = new Dat151AmbientZoneList(CurrentAudioFile);
zonelist.Name = "zonelist1";
zonelist.NameHash = JenkHash.GenHash(zonelist.Name);
CurrentAudioFile.AddRelData(zonelist);
@ -4838,6 +4874,9 @@ namespace CodeWalker.Project
var emlist = new Dat151AmbientEmitterList(CurrentAudioFile);
emlist.Name = "emitterlist1";
emlist.NameHash = JenkHash.GenHash(emlist.Name);
CurrentAudioFile.AddRelData(emlist);
@ -4895,6 +4934,145 @@ namespace CodeWalker.Project
return list == CurrentAudioEmitterList;
}
public void NewAudioInterior()
{
if (CurrentAudioFile == null) return;
var interior = new Dat151Interior(CurrentAudioFile);
interior.Name = "interior1";
interior.NameHash = JenkHash.GenHash(interior.Name);
interior.Unk0 = 0xAAAAA844;
interior.Unk1 = 0xD4855127;
CurrentAudioFile.AddRelData(interior);
LoadProjectTree();
ProjectExplorer?.TrySelectAudioInteriorTreeNode(interior);
CurrentAudioInterior = interior;
ShowEditAudioInteriorPanel(false);
}
public bool DeleteAudioInterior()
{
if (CurrentAudioInterior?.Rel != CurrentAudioFile) return false;
if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete..
if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete..
if (MessageBox.Show("Are you sure you want to delete this audio interior?\n" + CurrentAudioInterior.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return true;
}
bool res = false;
if (WorldForm != null)
{
lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering...
{
res = CurrentAudioFile.RemoveRelData(CurrentAudioInterior);
//WorldForm.SelectItem(null, null, null);
}
}
else
{
res = CurrentAudioFile.RemoveRelData(CurrentAudioInterior);
}
if (!res)
{
MessageBox.Show("Unspecified error occurred when removing the audio interior from the file!");
}
var delel = CurrentAudioInterior;
var delrel = CurrentAudioFile;
ProjectExplorer?.RemoveAudioInteriorTreeNode(delel);
ProjectExplorer?.SetAudioRelHasChanged(delrel, true);
ClosePanel((EditAudioInteriorPanel p) => { return p.Tag == delel; });
CurrentAudioInterior = null;
return true;
}
public bool IsCurrentAudioInterior(Dat151Interior interior)
{
return interior == CurrentAudioInterior;
}
public void NewAudioInteriorRoom()
{
if (CurrentAudioFile == null) return;
var room = new Dat151InteriorRoom(CurrentAudioFile);
room.Name = "room1";
room.NameHash = JenkHash.GenHash(room.Name);
room.Flags0 = 0xAAAAAAAA;
room.Unk06 = 3817852694;//??
room.Unk14 = 3565506855;//?
CurrentAudioFile.AddRelData(room);
LoadProjectTree();
ProjectExplorer?.TrySelectAudioInteriorRoomTreeNode(room);
CurrentAudioInteriorRoom = room;
ShowEditAudioInteriorRoomPanel(false);
}
public bool DeleteAudioInteriorRoom()
{
if (CurrentAudioInteriorRoom?.Rel != CurrentAudioFile) return false;
if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete..
if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete..
if (MessageBox.Show("Are you sure you want to delete this audio interior room?\n" + CurrentAudioInteriorRoom.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return true;
}
bool res = false;
if (WorldForm != null)
{
lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering...
{
res = CurrentAudioFile.RemoveRelData(CurrentAudioInteriorRoom);
//WorldForm.SelectItem(null, null, null);
}
}
else
{
res = CurrentAudioFile.RemoveRelData(CurrentAudioInteriorRoom);
}
if (!res)
{
MessageBox.Show("Unspecified error occurred when removing the audio interior from the file!");
}
var delel = CurrentAudioInteriorRoom;
var delrel = CurrentAudioFile;
ProjectExplorer?.RemoveAudioInteriorRoomTreeNode(delel);
ProjectExplorer?.SetAudioRelHasChanged(delrel, true);
ClosePanel((EditAudioInteriorRoomPanel p) => { return p.Tag == delel; });
CurrentAudioInteriorRoom = null;
return true;
}
public bool IsCurrentAudioInteriorRoom(Dat151InteriorRoom room)
{
return room == CurrentAudioInteriorRoom;
}
@ -6234,6 +6412,8 @@ namespace CodeWalker.Project
AudioNewAmbientEmitterListMenu.Enabled = enable && inproj;
AudioNewAmbientZoneMenu.Enabled = enable && inproj;
AudioNewAmbientZoneListMenu.Enabled = enable && inproj;
AudioNewInteriorMenu.Enabled = enable && inproj;
AudioNewInteriorRoomMenu.Enabled = enable && inproj;
if (CurrentAudioFile != null)
{
@ -6637,6 +6817,14 @@ namespace CodeWalker.Project
{
NewAudioZoneList();
}
private void AudioNewInteriorMenu_Click(object sender, EventArgs e)
{
NewAudioInterior();
}
private void AudioNewInteriorRoomMenu_Click(object sender, EventArgs e)
{
NewAudioInteriorRoom();
}
private void AudioAddToProjectMenu_Click(object sender, EventArgs e)
{
AddAudioFileToProject(CurrentAudioFile);