mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-07-12 17:22:26 -04:00
Added FSO.Files for use with the API server
Don't ask me. FreeSO is the prime example of dependency hell.
This commit is contained in:
parent
4b5e584eeb
commit
8fec258215
104 changed files with 14653 additions and 163 deletions
153
server/tso.files/HIT/FSC.cs
Executable file
153
server/tso.files/HIT/FSC.cs
Executable file
|
@ -0,0 +1,153 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace FSO.Files.HIT
|
||||
{
|
||||
public class FSC
|
||||
{
|
||||
/// <summary>
|
||||
/// FSC is a tabulated plaintext format that describes a sequence of notes to be played. In this game it is used to sequence the ambient sounds.
|
||||
/// The conditions in which the sequence is randomized are not entirely apparent, and have been mostly guessed.
|
||||
/// </summary>
|
||||
///
|
||||
|
||||
public List<FSCNote> Notes;
|
||||
|
||||
public string VersionCode;
|
||||
|
||||
public ushort MasterVolume;
|
||||
public ushort Priority;
|
||||
public ushort Min;
|
||||
public ushort Max;
|
||||
public ushort Rows; //these seem to be outright lies, but let's leave them in
|
||||
public ushort Columns;
|
||||
public ushort Tempo;
|
||||
public ushort BPB; //beats per bar
|
||||
public ushort SelX;
|
||||
public ushort SelY;
|
||||
public ushort QuanX;
|
||||
public ushort QuanY;
|
||||
public ushort DiffX;
|
||||
public ushort DiffY;
|
||||
|
||||
public List<int> RandomJumpPoints;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new hsm file.
|
||||
/// </summary>
|
||||
/// <param name="Filedata">The data to create the hsm from.</param>
|
||||
public FSC(byte[] Filedata)
|
||||
{
|
||||
ReadFile(new MemoryStream(Filedata));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new hsm file.
|
||||
/// </summary>
|
||||
/// <param name="Filedata">The path to the data to create the hsm from.</param>
|
||||
public FSC(string Filepath)
|
||||
{
|
||||
ReadFile(File.Open(Filepath, FileMode.Open, FileAccess.Read, FileShare.Read));
|
||||
}
|
||||
|
||||
private void ReadFile(Stream stream)
|
||||
{
|
||||
var io = new StreamReader(stream);
|
||||
|
||||
Notes = new List<FSCNote>();
|
||||
RandomJumpPoints = new List<int>();
|
||||
VersionCode = io.ReadLine();
|
||||
var line = io.ReadLine();
|
||||
|
||||
while (line.StartsWith("#"))
|
||||
line = io.ReadLine();
|
||||
|
||||
//Header
|
||||
string[] Head = line.Split('\t');
|
||||
MasterVolume = Convert.ToUInt16(Head[1]);
|
||||
Priority = Convert.ToUInt16(Head[2]);
|
||||
Min = Convert.ToUInt16(Head[3]);
|
||||
Max = Convert.ToUInt16(Head[4]);
|
||||
Rows = Convert.ToUInt16(Head[5]);
|
||||
Columns = Convert.ToUInt16(Head[6]);
|
||||
Tempo = Convert.ToUInt16(Head[7]);
|
||||
BPB = Convert.ToUInt16(Head[8]);
|
||||
SelX = Convert.ToUInt16(Head[9]);
|
||||
SelY = Convert.ToUInt16(Head[10]);
|
||||
if(Head[11][0] != '-') QuanX = Convert.ToUInt16(Head[11]);
|
||||
if (Head[12][0] != '-') QuanY = Convert.ToUInt16(Head[12]);
|
||||
DiffX = Convert.ToUInt16(Head[13]);
|
||||
DiffY = Convert.ToUInt16(Head[14]);
|
||||
|
||||
line = io.ReadLine();
|
||||
|
||||
while (line.StartsWith("#") || line.StartsWith("cells"))
|
||||
line = io.ReadLine();
|
||||
|
||||
while (!io.EndOfStream) //read notes
|
||||
{
|
||||
string line2 = io.ReadLine();
|
||||
string[] Values = line2.Split('\t');
|
||||
if (!line.StartsWith("#") && Values.Length == 20)
|
||||
{
|
||||
var note = new FSCNote()
|
||||
{
|
||||
Volume = Convert.ToUInt16(Values[1]),
|
||||
Rand = Values[2] != "0",
|
||||
LRPan = Convert.ToUInt16(Values[3]),
|
||||
FBPan = Convert.ToUInt16(Values[4]),
|
||||
Rand2 = Values[5] != "0",
|
||||
|
||||
Fin = Convert.ToUInt16(Values[6]),
|
||||
FOut = Convert.ToUInt16(Values[7]),
|
||||
dly = Convert.ToUInt16(Values[8]),
|
||||
Rand3 = Values[9] != "0",
|
||||
Loop = Convert.ToUInt16(Values[10]),
|
||||
|
||||
Loop2 = Values[11] != "0",
|
||||
Quant = Convert.ToUInt16(Values[12]),
|
||||
Prob = Convert.ToUInt16(Values[13]),
|
||||
pitchL = Convert.ToInt16(Values[14]),
|
||||
pitchR = Convert.ToInt16(Values[15]),
|
||||
|
||||
Fast = Values[16] != "0",
|
||||
GroupID = Convert.ToUInt16(Values[17]),
|
||||
Stereo = Values[18] != "0",
|
||||
Filename = Values[19]
|
||||
};
|
||||
if (note.Rand) RandomJumpPoints.Add(Notes.Count);
|
||||
Notes.Add(note);
|
||||
}
|
||||
}
|
||||
|
||||
io.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public struct FSCNote
|
||||
{
|
||||
public ushort Volume; //0-1024
|
||||
public bool Rand;
|
||||
public ushort LRPan; //0-1024
|
||||
public ushort FBPan; //0-1024, front back
|
||||
public bool Rand2;
|
||||
|
||||
public ushort Fin;
|
||||
public ushort FOut;
|
||||
public ushort dly;
|
||||
public bool Rand3; //what
|
||||
public ushort Loop;
|
||||
|
||||
public bool Loop2; //might be count then decider here
|
||||
public ushort Quant; //but then what is this?
|
||||
public ushort Prob; //probably random probability, not sure of range (0-16?)
|
||||
public short pitchL; //pitch offsets
|
||||
public short pitchR;
|
||||
|
||||
public bool Fast;
|
||||
public ushort GroupID;
|
||||
public bool Stereo;
|
||||
public string Filename;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue