unit UIni;
interface
uses IniFiles, ULog, SysUtils;
type
TIni = class
Name: array[0..11] of string;
// Templates for Names Mod
NameTeam: array[0..2] of string;
NameTemplate: array[0..11] of string;
//Filename of the opened iniFile
Filename: string;
// Game
Players: integer;
Difficulty: integer;
Language: integer;
Tabs: integer;
tabs_temp: integer;
Sorting: integer;
sorting_temp: integer;
ShuffleTime: integer;
Debug: integer;
LoadFaultySongs:integer;
LoadFaultySongs_temp: integer;
NewPartyPoints: integer;
ShowCredits: integer;
NewPartySelectionMode: integer;
// Graphics
Screens: integer;
Resolution: integer;
Depth: integer;
FullScreen: integer;
TextureSize: integer;
Oscilloscope: integer;
Spectrum: integer;
Spectrograph: integer;
MovieSize: integer;
MoviePreview: integer;
AspectCorrect: integer;
PerformanceMode:integer;
EnablePBO: integer;
// Sound
MicBoost: integer;
ClickAssist: integer;
BeatClick: integer;
SavePlayback: integer;
Threshold: integer;
Delay: integer;
LipSync: integer;
//Song Preview
PreviewVolume: integer;
PreviewFading: integer;
// Lyrics
LyricsFont: integer;
LyricsEffect: integer;
Solmization: integer;
LyricsGolden: integer;
// Themes
Theme: integer;
SkinNo: integer;
Color: integer;
// Record
Card: integer; // not saved in config.ini
CardList: array of record
Name: string;
Input: integer;
ChannelL: integer;
ChannelR: integer;
end;
EnableWebCam: integer;
WebCamID: integer;
WebCamMediaID: integer;
// Advanced
LoadAnimation: integer;
EffectSing: integer;
ScreenFade: integer;
AskbeforeDel: integer;
OnSongClick: integer;
LineBonus: integer;
PartyPopup: integer;
SumPlayers: integer;
DuelRatio: integer;
PossibleScore: integer;
LogSession: integer;
// Quality-Check
EnableQualityCheck: integer;
QualityFactors: array[0..4] of integer;
// Soundcards
SoundCard: array[0..7, 1..2] of integer;
procedure Load;
procedure Save;
procedure SaveNames;
procedure SaveLevel;
end;
var
Ini: TIni;
IResolution: array of string;
ILanguage: array of string;
ITheme: array of string;
ISkin: array of string;
ICard: array of string;
IInput: array of string;
const
IPlayers: array[0..4] of string = ('1', '2', '3', '4', '6');
IDifficulty: array[0..2] of string = ('Easy', 'Medium', 'Hard');
ITabs: array[0..1] of string = ('Off', 'On');
ISorting: array[0..9] of string = ('Edition', 'Genre', 'Language', 'Folder', 'Title', 'Artist', 'Title2', 'Artist2', 'Random', 'Year');
sEdition = 0;
sGenre = 1;
sLanguage = 2;
sFolder = 3;
sTitle = 4;
sArtist = 5;
sTitle2 = 6;
sArtist2 = 7;
sRandom = 8;
sYear = 9;
IShuffleTime: array[0..10] of string = ('Off',
'15 Sec',
'30 Sec',
'45 Sec',
'60 Sec',
'75 Sec',
'90 Sec',
'105 Sec',
'120 Sec',
'MAX',
'FULL');
IDebug: array[0..1] of string = ('Off', 'On');
ILoadFaultySongs: array[0..1] of string = ('Off', 'On');
INewPartyPoints: array[0..1] of string = ('Off', 'On');
IShowCredits: array[0..1] of string = ('Off', 'On');
INewPartySelectionMode: array[0..1] of string = ('Off', 'On');
IScreens: array[0..1] of string = ('1', '2');
IFullScreen: array[0..1] of string = ('Off', 'On');
IDepth: array[0..1] of string = ('16 bit', '32 bit');
ITextureSize: array[0..2] of string = ('128', '256', '512');
//SingBar Mod
IOscilloscope: array[0..2] of string = ('Off', 'Osci', 'Bar');
//IOscilloscope: array[0..1] of string = ('Off', 'On');
ISpectrum: array[0..1] of string = ('Off', 'On');
ISpectrograph: array[0..1] of string = ('Off', 'On');
IMovieSize: array[0..3] of string = ('Half', 'Full', 'Preview only', 'Off');
IMoviePreview: array[0..1] of string = ('Off', 'On');
IAspectCorrect: array[0..2] of String = ('Stretch', 'Crop', 'LetterBox');
IPerformanceMode:array[0..1] of string = ('Off', 'On');
IEnablePBO: array[0..1] of string = ('Off', 'On');
IEnableWebCam: array[0..1] of string = ('Off', 'On');
IMicBoost: array[0..3] of string = ('Off', '+6dB', '+12dB', '+18dB');
IClickAssist: array[0..1] of string = ('Off', 'On');
IBeatClick: array[0..1] of string = ('Off', 'On');
ISavePlayback: array[0..1] of string = ('Off', 'On');
IThreshold: array[0..3] of string = ('5%', '10%', '15%', '20%');
IDelay: array[0..9] of string = ('0ms', '10ms', '20ms', '30ms', '40ms', '50ms', '60ms', '70ms', '80ms', '90ms');
ILipSync: array[0..20] of string = ('0ms', '10ms', '20ms', '30ms', '40ms', '50ms', '60ms', '70ms', '80ms', '90ms', '100ms', '110ms', '120ms', '130ms', '140ms', '150ms', '160ms', '170ms', '180ms', '190ms', '200ms');
//Song Preview
IPreviewVolume: array[0..10] of string = ('Off', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%');
IPreviewFading: array[0..5] of string = ('Off', '1 Sec', '2 Secs', '3 Secs', '4 Secs', '5 Secs');
ILyricsFont: array[0..2] of string = ('Plain', 'OLine1', 'OLine2');
ILyricsEffect: array[0..3] of string = ('Simple', 'Zoom', 'Slide', 'Ball');
ISolmization: array[0..3] of string = ('Off', 'Euro', 'Jap', 'American');
ILyricsGolden: array[0..1] of string = ('Off', 'On');
IColor: array[0..8] of string = ('Blue', 'Green', 'Pink', 'Red', 'Violet', 'Orange', 'Yellow', 'Brown', 'Black');
// Advanced
ILoadAnimation: array[0..1] of string = ('Off', 'On');
IEffectSing: array[0..1] of string = ('Off', 'On');
IScreenFade: array[0..1] of String = ('Off', 'On');
IAskbeforeDel: array[0..1] of string = ('Off', 'On');
IOnSongClick: array[0..2] of string = ('Sing', 'Select Players', 'Open Menu');
ILineBonus: array[0..2] of string = ('Off', 'At Score', 'At Notes');
IPartyPopup: array[0..1] of string = ('Off', 'On');
ISumPlayers: array[0..2] of string = ('Never', 'Dynamic', 'Always');
IDuelRatio: array[0..9] of string = ('normal', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%');
IPossibleScore: array[0..3] of string = ('Off', 'Bar', 'Numbers', 'Name');
ILogSession: array[0..1] of string = ('Off', 'On');
IEnableQualityCheck: array[0..1] of string = ('Off', 'On');
IQualityFactors: array[0..9] of string = ('x0', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9');
IChannel: array[0..6] of string = ('Off', '1', '2', '3', '4', '5', '6');
implementation
uses UFiles, SDL, ULanguage, USkins, URecord, UCommandLine;
procedure TIni.Load;
var
IniFile: TMemIniFile;
ThemeIni: TMemIniFile;
Tekst: string;
Pet: integer;
B: boolean;
I, I2, I3: integer;
S: string;
Modes: PPSDL_Rect;
SR: TSearchRec; //Skin List Patch
found: boolean;
txt: string;
num: integer;
function GetFileName (S: String):String;
begin
//Result := copy (S,0,StrRScan (PChar(S),char('.'))+1);
Result := copy (S,0,Pos ('.ini',S)-1);
end;
begin
GamePath := ExtractFilePath(ParamStr(0));
if (Params.ConfigFile <> '') then
try
IniFile := TMemIniFile.Create(Params.ConfigFile);
except
IniFile := TMemIniFile.Create(GamePath + 'config.ini');
end
else
IniFile := TMemIniFile.Create(GamePath + 'config.ini');
// Name
for I := 0 to 11 do
Ini.Name[I] := IniFile.ReadString('Name', 'P'+IntToStr(I+1), 'Player'+IntToStr(I+1));
// Templates for Names Mod
for I := 0 to 2 do
Ini.NameTeam[I] := IniFile.ReadString('NameTeam', 'T'+IntToStr(I+1), 'Team'+IntToStr(I+1));
for I := 0 to 11 do
Ini.NameTemplate[I] := IniFile.ReadString('NameTemplate', 'Name'+IntToStr(I+1), 'Template'+IntToStr(I+1));
// Players
Tekst := IniFile.ReadString('Game', 'Players', IPlayers[0]);
for Pet := 0 to High(IPlayers) do
if Tekst = IPlayers[Pet] then Ini.Players := Pet;
// Difficulty
Tekst := IniFile.ReadString('Game', 'Difficulty', 'Easy');
for Pet := 0 to High(IDifficulty) do
if Tekst = IDifficulty[Pet] then Ini.Difficulty := Pet;
// Language
Tekst := IniFile.ReadString('Game', 'Language', 'English');
for Pet := 0 to High(ILanguage) do
if Tekst = ILanguage[Pet] then Ini.Language := Pet;
// Language.ChangeLanguage(ILanguage[Ini.Language]);
// Tabs
Tekst := IniFile.ReadString('Game', 'Tabs', ITabs[0]);
for Pet := 0 to High(ITabs) do
if Tekst = ITabs[Pet] then Ini.Tabs := Pet;
tabs_temp := Tabs;
// Sorting
Tekst := IniFile.ReadString('Game', 'Sorting', ISorting[0]);
for Pet := 0 to High(ISorting) do
if Tekst = ISorting[Pet] then Ini.Sorting := Pet;
sorting_temp := Sorting;
// ShuffleTime
Tekst := IniFile.ReadString('Game', 'ShuffleTime', 'Off');
for Pet := 0 to High(IShuffleTime) do
if Tekst = IShuffleTime[Pet] then Ini.ShuffleTime := Pet;
// Debug
Tekst := IniFile.ReadString('Game', 'Debug', IDebug[0]);
for Pet := 0 to High(IDebug) do
if Tekst = IDebug[Pet] then Ini.Debug := Pet;
// Load faulty songs
Tekst := IniFile.ReadString('Game', 'LoadFaultySongs', ILoadFaultySongs[0]);
for Pet := 0 to High(ILoadFaultySongs) do
if Tekst = ILoadFaultySongs[Pet] then Ini.LoadFaultySongs := Pet;
LoadFaultySongs_temp := LoadFaultySongs;
// NewPartyPoints
Tekst := IniFile.ReadString('Game', 'NewPartyPoints', INewPartyPoints[1]);
for Pet := 0 to High(INewPartyPoints) do
if Tekst = INewPartyPoints[Pet] then Ini.NewPartyPoints := Pet;
// ShowCredits
Tekst := IniFile.ReadString('Game', 'ShowCredits', IShowCredits[0]);
for Pet := 0 to High(IShowCredits) do
if Tekst = IShowCredits[Pet] then Ini.ShowCredits := Pet;
// NewPartySelectionMode
Tekst := IniFile.ReadString('Game', 'NewPartySelectionMode', INewPartySelectionMode[1]);
for Pet := 0 to High(INewPartySelectionMode) do
if Tekst = INewPartySelectionMode[Pet] then Ini.NewPartySelectionMode := Pet;
// Screens
Tekst := IniFile.ReadString('Graphics', 'Screens', IScreens[0]);
for Pet := 0 to High(IScreens) do
if Tekst = IScreens[Pet] then Ini.Screens := Pet;
// Resolution
SetLength(IResolution, 0);
Modes := SDL_ListModes(nil, SDL_OPENGL or SDL_FULLSCREEN); // Check if there are any modes available
//this should solve the biggest wine problem | THANKS Linnex (11.11.07)
// if no modes were set, then fallback to 800x600
// as per http://sourceforge.net/forum/message.php?msg_id=4544965
// THANKS : linnex at users.sourceforge.net
if (modes = PPSDL_Rect( 0 ) ) then
begin //NO modes available => Fallback to 800x600
SetLength(IResolution, 1);
IResolution[High(IResolution)] := '800x600';
end
{Else If (modes = PPSDL_Rect(-1)) then
begin
//All Resolutions are Available
//This may be handled, too
// to-do : for future Version
end}
Else //Add all valid Modes
begin
I := 0;
Repeat
SetLength(IResolution, I + 1);
IResolution[I] := IntToStr((modes^)^.w) + 'x' + IntToStr((modes^)^.h);
Inc(I);
Inc(modes);
Until (modes^)=nil;
end;
// reverse order
for I := 0 to (Length(IResolution) div 2) - 1 do begin
S := IResolution[I];
IResolution[I] := IResolution[High(IResolution)-I];
IResolution[High(IResolution)-I] := S;
end;
Tekst := IniFile.ReadString('Graphics', 'Resolution', '800x600');
for Pet := 0 to High(IResolution) do
if Tekst = IResolution[Pet] then Ini.Resolution := Pet;
// FullScreen
Tekst := IniFile.ReadString('Graphics', 'FullScreen', 'Off');
for Pet := 0 to High(IFullScreen) do
if Tekst = IFullScreen[Pet] then Ini.FullScreen := Pet;
// Resolution
Tekst := IniFile.ReadString('Graphics', 'Depth', '32 bit');
for Pet := 0 to High(IDepth) do
if Tekst = IDepth[Pet] then Ini.Depth := Pet;
// Texture Size
Tekst := IniFile.ReadString('Graphics', 'TextureSize', ITextureSize[1]);
for Pet := 0 to High(ITextureSize) do
if Tekst = ITextureSize[Pet] then Ini.TextureSize := Pet;
// Oscilloscope
Tekst := IniFile.ReadString('Graphics', 'Oscilloscope', 'Bar');
for Pet := 0 to High(IOscilloscope) do
if Tekst = IOscilloscope[Pet] then Ini.Oscilloscope := Pet;
// Spectrum
Tekst := IniFile.ReadString('Graphics', 'Spectrum', 'Off');
for Pet := 0 to High(ISpectrum) do
if Tekst = ISpectrum[Pet] then Ini.Spectrum := Pet;
// Spectrograph
Tekst := IniFile.ReadString('Graphics', 'Spectrograph', 'Off');
for Pet := 0 to High(ISpectrograph) do
if Tekst = ISpectrograph[Pet] then Ini.Spectrograph := Pet;
// MovieSize
Tekst := IniFile.ReadString('Graphics', 'MovieSize', IMovieSize[1]);
found := false;
for Pet := 0 to High(IMovieSize) do
begin
if Tekst = IMovieSize[Pet] then
begin
Ini.MovieSize := Pet;
found := true;
end;
end;
// MoviePreview
Tekst := IniFile.ReadString('Graphics', 'MoviePreview', IMoviePreview[1]);
for Pet := 0 to High(IMoviePreview) do
if Tekst = IMoviePreview[Pet] then Ini.MoviePreview := Pet;
// AspectCorrection
Tekst := IniFile.ReadString('Graphics', 'AspectCorrect', IAspectCorrect[1]);
for Pet := 0 to High(IAspectCorrect) do
if Tekst = IAspectCorrect[Pet] then Ini.AspectCorrect := Pet;
// PerformanceMode
Tekst := IniFile.ReadString('Graphics', 'PerformanceMode', IPerformanceMode[0]);
for Pet := 0 to High(IPerformanceMode) do
if Tekst = IPerformanceMode[Pet] then Ini.PerformanceMode := Pet;
// enable Pixel Buffer Object
Tekst := IniFile.ReadString('Graphics', 'EnablePBO', IEnablePBO[0]);
for Pet := 0 to High(IEnablePBO) do
if Tekst = IEnablePBO[Pet] then Ini.EnablePBO := Pet;
// MicBoost
Tekst := IniFile.ReadString('Sound', 'MicBoost', 'Off');
for Pet := 0 to High(IMicBoost) do
if Tekst = IMicBoost[Pet] then Ini.MicBoost := Pet;
// ClickAssist
Tekst := IniFile.ReadString('Sound', 'ClickAssist', 'Off');
for Pet := 0 to High(IClickAssist) do
if Tekst = IClickAssist[Pet] then Ini.ClickAssist := Pet;
// BeatClick
Tekst := IniFile.ReadString('Sound', 'BeatClick', IBeatClick[0]);
for Pet := 0 to High(IBeatClick) do
if Tekst = IBeatClick[Pet] then Ini.BeatClick := Pet;
// SavePlayback
Tekst := IniFile.ReadString('Sound', 'SavePlayback', ISavePlayback[0]);
for Pet := 0 to High(ISavePlayback) do
if Tekst = ISavePlayback[Pet] then Ini.SavePlayback := Pet;
// Threshold
Tekst := IniFile.ReadString('Sound', 'Threshold', IThreshold[2]);
for Pet := 0 to High(IThreshold) do
if Tekst = IThreshold[Pet] then Ini.Threshold := Pet;
// Delay
Tekst := IniFile.ReadString('Sound', 'Delay', IDelay[5]);
for Pet := 0 to High(IDelay) do
if Tekst = IDelay[Pet] then Ini.Delay := Pet;
// LipSync
Tekst := IniFile.ReadString('Sound', 'LipSync', ILipSync[0]);
for Pet := 0 to High(ILipSync) do
if Tekst = ILipSync[Pet] then Ini.LipSync := Pet;
//Song Preview
Tekst := IniFile.ReadString('Sound', 'PreviewVolume', IPreviewVolume[7]);
for Pet := 0 to High(IPreviewVolume) do
if Tekst = IPreviewVolume[Pet] then Ini.PreviewVolume := Pet;
Tekst := IniFile.ReadString('Sound', 'PreviewFading', IPreviewFading[1]);
for Pet := 0 to High(IPreviewFading) do
if Tekst = IPreviewFading[Pet] then Ini.PreviewFading := Pet;
// Lyrics Font
Tekst := IniFile.ReadString('Lyrics', 'LyricsFont', ILyricsFont[2]);
for Pet := 0 to High(ILyricsFont) do
if Tekst = ILyricsFont[Pet] then Ini.LyricsFont := Pet;
// Lyrics Effect
Tekst := IniFile.ReadString('Lyrics', 'LyricsEffect', ILyricsEffect[1]);
for Pet := 0 to High(ILyricsEffect) do
if Tekst = ILyricsEffect[Pet] then Ini.LyricsEffect := Pet;
// Solmization
Tekst := IniFile.ReadString('Lyrics', 'Solmization', ISolmization[0]);
for Pet := 0 to High(ISolmization) do
if Tekst = ISolmization[Pet] then Ini.Solmization := Pet;
// LyricsGolden
Tekst := IniFile.ReadString('Lyrics', 'LyricsGolden', ILyricsGolden[0]);
for Pet := 0 to High(ILyricsGolden) do
if Tekst = ILyricsGolden[Pet] then Ini.LyricsGolden := Pet;
// Theme
//Theme List Patch
//I2 Saves the no of the (Standard-) Theme
I2 := 0;
//I counts is the cur. Theme no
I := 0;
SetLength(ITheme, 0);
FindFirst('Themes\*.ini',faAnyFile,SR);
Repeat
//Read Themename from Theme
ThemeIni := TMemIniFile.Create(SR.Name);
Tekst := UpperCase(ThemeIni.ReadString('Theme','Name',GetFileName(SR.Name)));
ThemeIni.Free;
//if Default Theme then save Themeno to I2
if (Tekst = 'BLUE SENSATION') then
I2 := I;
//Search for Skins for this Theme
for Pet := low(Skin.Skin) to high(Skin.Skin) do
begin
if UpperCase(Skin.Skin[Pet].Theme) = Tekst then
begin
SetLength(ITheme, Length(ITheme)+1);
ITheme[High(ITheme)] := GetFileName(SR.Name);
break;
end;
end;
Inc(I);
Until FindNext(SR) <> 0;
FindClose(SR);
//Theme List Patch End }
//No Theme Found
if (Length(ITheme)=0) then
begin
Log.CriticalError('Could not find any valid Themes.');
end;
Tekst := IniFile.ReadString('Themes', 'Theme', ITheme[I2]);
Ini.Theme := 0;
for Pet := 0 to High(ITheme) do
if Uppercase(Tekst) = Uppercase(ITheme[Pet]) then Ini.Theme := Pet;
// Skin
Skin.onThemeChange;
Ini.SkinNo := 0;
Tekst := IniFile.ReadString('Themes', 'Skin', ISkin[0]);
for Pet := 0 to High(ISkin) do
if Tekst = ISkin[Pet] then Ini.SkinNo := Pet;
// Color
Tekst := IniFile.ReadString('Themes', 'Color', IColor[0]);
for Pet := 0 to High(IColor) do
if Tekst = IColor[Pet] then Ini.Color := Pet;
// Record - load ini list
SetLength(CardList, 0);
I := 1;
while (IniFile.ValueExists('Record', 'DeviceName' + IntToStr(I)) = true) do begin
//Automatically Delete not Existing Sound Cards
S := IniFile.ReadString('Record', 'DeviceName' + IntToStr(I), '');
//{
B := False;
//Look for Soundcard
for I2 := 0 to High(Recording.SoundCard) do
begin
if (S = Trim(Recording.SoundCard[I2].Description)) then
begin
B := True;
Break;
end;
end;
if B then
begin //}
I3 := Length(CardList);
SetLength(CardList, I3+1);
Ini.CardList[I3].Name := S;
Ini.CardList[I3].Input := IniFile.ReadInteger('Record', 'Input' + IntToStr(I), 0);
Ini.CardList[I3].ChannelL := IniFile.ReadInteger('Record', 'ChannelL' + IntToStr(I), 0);
Ini.CardList[I3].ChannelR := IniFile.ReadInteger('Record', 'ChannelR' + IntToStr(I), 0);
end;
Inc(I);
end;
// Record - append detected soundcards
for I := 0 to High(Recording.SoundCard) do
begin
B := False;
For I2 := 0 to High(CardList) do
begin //Search for Card in List
if (CardList[I2].Name = Trim(Recording.SoundCard[I].Description)) then
begin
B := True;
Break;
end;
end;
//If not in List -> Add
If not B then
begin
I3 := Length(CardList);
SetLength(CardList, I3+1);
CardList[I3].Name := Trim(Recording.SoundCard[I].Description);
CardList[I3].Input := 0;
CardList[I3].ChannelL := 0;
CardList[I3].ChannelR := 0;
// default for new users
if (Length(CardList) = 1) then
CardList[I].ChannelL := 1;
end;
end;
// enable WebCam
Tekst := IniFile.ReadString('Record', 'EnableWebCam', IEnableWebCam[0]);
for Pet := 0 to High(IEnableWebCam) do
if Tekst = IEnableWebCam[Pet] then Ini.EnableWebCam := Pet;
// WebCamID
Tekst := IniFile.ReadString('Record', 'WebCamID', '0');
if not TryStrToInt(Tekst, Ini.WebCamID) then
Ini.WebCamID := 0;
// WebCamMediaID
Tekst := IniFile.ReadString('Record', 'WebCamMediaID', '0');
if not TryStrToInt(Tekst, Ini.WebCamMediaID) then
Ini.WebCamMediaID := 0;
//Advanced Settings
// LoadAnimation
Tekst := IniFile.ReadString('Advanced', 'LoadAnimation', 'On');
for Pet := 0 to High(ILoadAnimation) do
if Tekst = ILoadAnimation[Pet] then Ini.LoadAnimation := Pet;
// ScreenFade
Tekst := IniFile.ReadString('Advanced', 'ScreenFade', 'On');
for Pet := 0 to High(IScreenFade) do
if Tekst = IScreenFade[Pet] then Ini.ScreenFade := Pet;
// EffectSing
Tekst := IniFile.ReadString('Advanced', 'EffectSing', 'On');
for Pet := 0 to High(IEffectSing) do
if Tekst = IEffectSing[Pet] then Ini.EffectSing := Pet;
// AskbeforeDel
Tekst := IniFile.ReadString('Advanced', 'AskbeforeDel', 'On');
for Pet := 0 to High(IAskbeforeDel) do
if Tekst = IAskbeforeDel[Pet] then Ini.AskbeforeDel := Pet;
// OnSongClick
Tekst := IniFile.ReadString('Advanced', 'OnSongClick', 'Sing');
for Pet := 0 to High(IOnSongClick) do
if Tekst = IOnSongClick[Pet] then Ini.OnSongClick := Pet;
// Linebonus
Tekst := IniFile.ReadString('Advanced', 'LineBonus', 'At Score');
for Pet := 0 to High(ILineBonus) do
if Tekst = ILineBonus[Pet] then Ini.LineBonus := Pet;
// PartyPopup
Tekst := IniFile.ReadString('Advanced', 'PartyPopup', 'On');
for Pet := 0 to High(IPartyPopup) do
if Tekst = IPartyPopup[Pet] then Ini.PartyPopup := Pet;
// SumPlayers
Tekst := IniFile.ReadString('Advanced', 'SumPlayers', 'Dynamic');
for Pet := 0 to High(ISumPlayers) do
if Tekst = ISumPlayers[Pet] then Ini.SumPlayers := Pet;
// DuelRatio
Tekst := IniFile.ReadString('Advanced', 'DuelRatio', IDuelRatio[0]);
for Pet := 0 to High(IDuelRatio) do
if Tekst = IDuelRatio[Pet] then Ini.DuelRatio := Pet;
// PossibleScore
Tekst := IniFile.ReadString('Advanced', 'PossibleScore', IPossibleScore[1]);
for Pet := 0 to High(IPossibleScore) do
if Tekst = IPossibleScore[Pet] then Ini.PossibleScore := Pet;
// LogSession
Tekst := IniFile.ReadString('Advanced', 'LogSession', ILogSession[0]);
for Pet := 0 to High(ILogSession) do
if Tekst = ILogSession[Pet] then Ini.LogSession := Pet;
// EnableQualityCheck
Tekst := IniFile.ReadString('Quality', 'EnableQualityCheck', IEnableQualityCheck[0]);
for Pet := 0 to High(IEnableQualityCheck) do
if Tekst = IEnableQualityCheck[Pet] then Ini.EnableQualityCheck := Pet;
// Quality Factor Syntax
Tekst := IniFile.ReadString('Quality', 'QualityFactorSyntax', IQualityFactors[1]);
for Pet := 0 to High(IQualityFactors) do
if Tekst = IQualityFactors[Pet] then Ini.QualityFactors[0] := Pet;
// Quality Factor BPM
Tekst := IniFile.ReadString('Quality', 'QualityFactorBPM', IQualityFactors[3]);
for Pet := 0 to High(IQualityFactors) do
if Tekst = IQualityFactors[Pet] then Ini.QualityFactors[1] := Pet;
// Quality Factor Note Gaps
Tekst := IniFile.ReadString('Quality', 'QualityFactorNoteGaps', IQualityFactors[2]);
for Pet := 0 to High(IQualityFactors) do
if Tekst = IQualityFactors[Pet] then Ini.QualityFactors[2] := Pet;
// Quality Factor Note Jumps
Tekst := IniFile.ReadString('Quality', 'QualityFactorNoteJumps', IQualityFactors[2]);
for Pet := 0 to High(IQualityFactors) do
if Tekst = IQualityFactors[Pet] then Ini.QualityFactors[3] := Pet;
// Quality Factor Scores
Tekst := IniFile.ReadString('Quality', 'QualityFactorScores', IQualityFactors[1]);
for Pet := 0 to High(IQualityFactors) do
if Tekst = IQualityFactors[Pet] then Ini.QualityFactors[4] := Pet;
// SongPath
if (Params.SongPath <> '') then
SongPaths[0] := IncludeTrailingPathDelimiter(Params.SongPath)
else
begin
txt := IniFile.ReadString('Path', 'Songs', ' ');
if (DirectoryExists(txt)) then
begin
num := Length(SongPaths);
SetLength(SongPaths, num+1);
SongPaths[num] := IncludeTrailingPathDelimiter(txt);
end;
I := 1;
repeat
txt := IniFile.ReadString('Directories', 'SongDir'+IntToStr(I), ' ');
if (DirectoryExists(txt)) then
begin
num := Length(SongPaths);
SetLength(SongPaths, num+1);
SongPaths[num] := IncludeTrailingPathDelimiter(txt);
Inc(I);
end;
until (not DirectoryExists(txt));
end;
Filename := IniFile.FileName;
IniFile.Free;
if not found then
begin
Ini.MovieSize := 1;
Save;
end;
end;
procedure TIni.Save;
var
IniFile: TIniFile;
Tekst: string;
I: Integer;
S: String;
begin
//if not (FileExists(GamePath + 'config.ini') and FileIsReadOnly(GamePath + 'config.ini')) then begin
if not (FileExists(Filename) and FileIsReadOnly(Filename)) then begin
IniFile := TIniFile.Create(Filename);
// Players
Tekst := IPlayers[Ini.Players];
IniFile.WriteString('Game', 'Players', Tekst);
// Difficulty
Tekst := IDifficulty[Ini.Difficulty];
IniFile.WriteString('Game', 'Difficulty', Tekst);
// Language
Tekst := ILanguage[Ini.Language];
IniFile.WriteString('Game', 'Language', Tekst);
// Tabs
Tekst := ITabs[Ini.Tabs];
IniFile.WriteString('Game', 'Tabs', Tekst);
tabs_temp := Tabs;
// Sorting
Tekst := ISorting[Ini.Sorting];
IniFile.WriteString('Game', 'Sorting', Tekst);
sorting_temp := Sorting;
//ShuffleTime
Tekst := IShuffleTime[Ini.ShuffleTime];
IniFile.WriteString('Game', 'ShuffleTime', Tekst);
// Debug
Tekst := IDebug[Ini.Debug];
IniFile.WriteString('Game', 'Debug', Tekst);
// Load faulty songs
Tekst := ILoadFaultySongs[Ini.LoadFaultySongs];
IniFile.WriteString('Game', 'LoadFaultySongs', Tekst);
// NewPartyPoints
Tekst := INewPartyPoints[Ini.NewPartyPoints];
IniFile.WriteString('Game', 'NewPartyPoints', Tekst);
// ShowCredits
Tekst := IShowCredits[Ini.ShowCredits];
IniFile.WriteString('Game', 'ShowCredits', Tekst);
// NewPartySelectionMode
Tekst := IShowCredits[Ini.NewPartySelectionMode];
IniFile.WriteString('Game', 'NewPartySelectionMode', Tekst);
// Screens
Tekst := IScreens[Ini.Screens];
IniFile.WriteString('Graphics', 'Screens', Tekst);
// FullScreen
Tekst := IFullScreen[Ini.FullScreen];
IniFile.WriteString('Graphics', 'FullScreen', Tekst);
// Resolution
Tekst := IResolution[Ini.Resolution];
IniFile.WriteString('Graphics', 'Resolution', Tekst);
// Depth
Tekst := IDepth[Ini.Depth];
IniFile.WriteString('Graphics', 'Depth', Tekst);
// Resolution
Tekst := ITextureSize[Ini.TextureSize];
IniFile.WriteString('Graphics', 'TextureSize', Tekst);
// Oscilloscope
Tekst := IOscilloscope[Ini.Oscilloscope];
IniFile.WriteString('Graphics', 'Oscilloscope', Tekst);
// Spectrum
Tekst := ISpectrum[Ini.Spectrum];
IniFile.WriteString('Graphics', 'Spectrum', Tekst);
// Spectrograph
Tekst := ISpectrograph[Ini.Spectrograph];
IniFile.WriteString('Graphics', 'Spectrograph', Tekst);
// Movie Size
Tekst := IMovieSize[Ini.MovieSize];
IniFile.WriteString('Graphics', 'MovieSize', Tekst);
// Movie Size
Tekst := IMoviePreview[Ini.MoviePreview];
IniFile.WriteString('Graphics', 'MoviePreview', Tekst);
// AspectCorrect
Tekst := IAspectCorrect[Ini.AspectCorrect];
IniFile.WriteString('Graphics', 'AspectCorrect', Tekst);
// PerformanceMode
Tekst := IPerformanceMode[Ini.PerformanceMode];
IniFile.WriteString('Graphics', 'PerformanceMode', Tekst);
// enable Pixel Buffer Object
Tekst := IEnablePBO[Ini.EnablePBO];
IniFile.WriteString('Graphics', 'EnablePBO', Tekst);
// MicBoost
Tekst := IMicBoost[Ini.MicBoost];
IniFile.WriteString('Sound', 'MicBoost', Tekst);
// ClickAssist
Tekst := IClickAssist[Ini.ClickAssist];
IniFile.WriteString('Sound', 'ClickAssist', Tekst);
// BeatClick
Tekst := IBeatClick[Ini.BeatClick];
IniFile.WriteString('Sound', 'BeatClick', Tekst);
// Threshold
Tekst := IThreshold[Ini.Threshold];
IniFile.WriteString('Sound', 'Threshold', Tekst);
// Delay
Tekst := IDelay[Ini.Delay];
IniFile.WriteString('Sound', 'Delay', Tekst);
// LipSync
Tekst := ILipSync[Ini.LipSync];
IniFile.WriteString('Sound', 'LipSync', Tekst);
// Song Preview
Tekst := IPreviewVolume[Ini.PreviewVolume];
IniFile.WriteString('Sound', 'PreviewVolume', Tekst);
Tekst := IPreviewFading[Ini.PreviewFading];
IniFile.WriteString('Sound', 'PreviewFading', Tekst);
// SavePlayback
Tekst := ISavePlayback[Ini.SavePlayback];
IniFile.WriteString('Sound', 'SavePlayback', Tekst);
// Lyrics Font
Tekst := ILyricsFont[Ini.LyricsFont];
IniFile.WriteString('Lyrics', 'LyricsFont', Tekst);
// Lyrics Effect
Tekst := ILyricsEffect[Ini.LyricsEffect];
IniFile.WriteString('Lyrics', 'LyricsEffect', Tekst);
// Solmization
Tekst := ISolmization[Ini.Solmization];
IniFile.WriteString('Lyrics', 'Solmization', Tekst);
// LyricsGolden
Tekst := ILyricsGolden[Ini.LyricsGolden];
IniFile.WriteString('Lyrics', 'LyricsGolden', Tekst);
// Theme
Tekst := ITheme[Ini.Theme];
IniFile.WriteString('Themes', 'Theme', Tekst);
// Skin
Tekst := ISkin[Ini.SkinNo];
IniFile.WriteString('Themes', 'Skin', Tekst);
// Color
Tekst := IColor[Ini.Color];
IniFile.WriteString('Themes', 'Color', Tekst);
// Record
for I := 0 to High(CardList) do begin
S := IntToStr(I+1);
Tekst := CardList[I].Name;
IniFile.WriteString('Record', 'DeviceName' + S, Tekst);
Tekst := IntToStr(CardList[I].Input);
IniFile.WriteString('Record', 'Input' + S, Tekst);
Tekst := IntToStr(CardList[I].ChannelL);
IniFile.WriteString('Record', 'ChannelL' + S, Tekst);
Tekst := IntToStr(CardList[I].ChannelR);
IniFile.WriteString('Record', 'ChannelR' + S, Tekst);
end;
//Log.LogError(InttoStr(Length(CardList)) + ' Cards Saved');
// enable WebCam
Tekst := IEnableWebCam[Ini.EnableWebCam];
IniFile.WriteString('Record', 'EnableWebCam', Tekst);
// WebCamID
Tekst := IntToStr(Ini.WebCamID);
IniFile.WriteString('Record', 'WebCamID', Tekst);
// WebCamMediaID
Tekst := IntToStr(Ini.WebCamMediaID);
IniFile.WriteString('Record', 'WebCamMediaID', Tekst);
//Advanced Settings
//LoadAnimation
Tekst := ILoadAnimation[Ini.LoadAnimation];
IniFile.WriteString('Advanced', 'LoadAnimation', Tekst);
//EffectSing
Tekst := IEffectSing[Ini.EffectSing];
IniFile.WriteString('Advanced', 'EffectSing', Tekst);
//ScreenFade
Tekst := IScreenFade[Ini.ScreenFade];
IniFile.WriteString('Advanced', 'ScreenFade', Tekst);
//AskbeforeDel
Tekst := IAskbeforeDel[Ini.AskbeforeDel];
IniFile.WriteString('Advanced', 'AskbeforeDel', Tekst);
//OnSongClick
Tekst := IOnSongClick[Ini.OnSongClick];
IniFile.WriteString('Advanced', 'OnSongClick', Tekst);
//Line Bonus
Tekst := ILineBonus[Ini.LineBonus];
IniFile.WriteString('Advanced', 'LineBonus', Tekst);
//Party Popup
Tekst := IPartyPopup[Ini.PartyPopup];
IniFile.WriteString('Advanced', 'PartyPopup', Tekst);
//SumPlayers
Tekst := ISumPlayers[Ini.SumPlayers];
IniFile.WriteString('Advanced', 'SumPlayers', Tekst);
//DuelRatio
Tekst := IDuelRatio[Ini.DuelRatio];
IniFile.WriteString('Advanced', 'DuelRatio', Tekst);
//PossibleScore
Tekst := IPossibleScore[Ini.PossibleScore];
IniFile.WriteString('Advanced', 'PossibleScore', Tekst);
//LogSession
Tekst := ILogSession[Ini.LogSession];
IniFile.WriteString('Advanced', 'LogSession', Tekst);
// EnableQualityCheck
Tekst := IEnableQualityCheck[Ini.EnableQualityCheck];
IniFile.WriteString('Quality', 'EnableQualityCheck', Tekst);
//Quality Factor Syntax
Tekst := IQualityFactors[Ini.QualityFactors[0]];
IniFile.WriteString('Quality', 'QualityFactorSyntax', Tekst);
//Quality Factor BPM
Tekst := IQualityFactors[Ini.QualityFactors[1]];
IniFile.WriteString('Quality', 'QualityFactorBPM', Tekst);
//Quality Factor NoteJumps
Tekst := IQualityFactors[Ini.QualityFactors[2]];
IniFile.WriteString('Quality', 'QualityFactorNoteJumps', Tekst);
//Quality Factor NoteGaps
Tekst := IQualityFactors[Ini.QualityFactors[3]];
IniFile.WriteString('Quality', 'QualityFactorNoteGaps', Tekst);
//Quality Factor Scores
Tekst := IQualityFactors[Ini.QualityFactors[4]];
IniFile.WriteString('Quality', 'QualityFactorScores', Tekst);
// Directories (add a template if section is missing, from 1.1)
if (not IniFile.SectionExists('Path')) then
IniFile.WriteString('Path', 'Songs', ' ');
if (not IniFile.SectionExists('Directories')) then
IniFile.WriteString('Directories', 'SongDir1', ' ');
IniFile.Free;
end;
end;
procedure TIni.SaveNames;
var
IniFile: TIniFile;
I: integer;
begin
//if not FileIsReadOnly(GamePath + 'config.ini') then begin
//IniFile := TIniFile.Create(GamePath + 'config.ini');
if not FileIsReadOnly(Filename) then begin
IniFile := TIniFile.Create(Filename);
//Name
// Templates for Names Mod
for I := 1 to 12 do
IniFile.WriteString('Name', 'P' + IntToStr(I), Ini.Name[I-1]);
for I := 1 to 3 do
IniFile.WriteString('NameTeam', 'T' + IntToStr(I), Ini.NameTeam[I-1]);
for I := 1 to 12 do
IniFile.WriteString('NameTemplate', 'Name' + IntToStr(I), Ini.NameTemplate[I-1]);
IniFile.Free;
end;
end;
procedure TIni.SaveLevel;
var
IniFile: TIniFile;
begin
//if not FileIsReadOnly(GamePath + 'config.ini') then begin
//IniFile := TIniFile.Create(GamePath + 'config.ini');
if not FileIsReadOnly(Filename) then begin
IniFile := TIniFile.Create(Filename);
// Difficulty
IniFile.WriteString('Game', 'Difficulty', IDifficulty[Ini.Difficulty]);
IniFile.Free;
end;
end;
end.