diff --git a/src/Installer/EN.isl b/src/Installer/EN.isl index 87a4d6f5..f24795a4 100644 --- a/src/Installer/EN.isl +++ b/src/Installer/EN.isl @@ -1,5 +1,14 @@ [CustomMessages] -InstallIntiface=LoveMachine requires Intiface Central to be installed. Install it now? -SelectPathTitle=Select Destinations - Page %d -SelectPath=Select the game folder for each of your games. Leave blank for games you don't have. -NotAGameDir=Path %s does not appear to be a Unity game directory. Please select the directory containing the game data. +GameListTitle=Select Destinations +GameListDesc=To add a game, select the game folder and the title, then click Add. +AddBtn=Add +RemoveBtn=Remove +InstallIntiface=LoveMachine requires Intiface Central to work. Install it now? +NotAGameDir=Path %1 does not appear to be a Unity game directory. Please select the directory containing the game data. +TitlePlaceholder=Select game title... +MissingTitle=Game not recognized, please select it manually from the dropdown. +ConflictingPaths=Another path is already set for %1. Overwrite it? +ConflictingTitles=This path is already set for %1. Overwrite it? +PathListLabel=LoveMachine will be installed to the following locations: +EmptyGameList=You must add at least one game to the list. +GamePending=A game will not be modded unless you add it to the list. Proceed anyway? diff --git a/src/Installer/InstallScript.iss b/src/Installer/InstallScript.iss index ae9ef221..7f3e72b2 100644 --- a/src/Installer/InstallScript.iss +++ b/src/Installer/InstallScript.iss @@ -16,6 +16,7 @@ #define GetGameRegSubKey(Index) ReadIni(GetPluginInfoIni(Index), GetPluginId(Index), "RegSubKey") #define GetGameRegName(Index) ReadIni(GetPluginInfoIni(Index), GetPluginId(Index), "RegName") #define GetGameArchitecture(Index) ReadIni(GetPluginInfoIni(Index), GetPluginId(Index), "Architecture") +#define GetExecutableName(Index) ReadIni(GetPluginInfoIni(Index), GetPluginId(Index), "ExecutableName") #define I 0 #sub AddGameEntry @@ -88,14 +89,13 @@ Name: "{group}\Inno_Setup_Project"; Filename: "{app}\Inno_Setup_Project.exe" [Code] const - PageSize = 4; PluginCount = {#PluginCount}; + Spacing = 8; var - // The directory prompts don't fit all in one page, so we need more pages - // This is way too many pages but whatever - DirPages: array[0..{#PluginCount}] of TInputDirWizardPage; - Old_WizardForm_NextButton_OnClick: TNotifyEvent; - PlaceholderDir: String; + GameDirs: array[0..{#PluginCount - 1}] of String; + PathEdit: TEdit; + TitleComboBox: TComboBox; + PathList: TListBox; // The ID of the plugin at the given index (e. g. 'LoveMachine.KK') function GetPluginId(Index: Integer): String; @@ -132,9 +132,11 @@ end; function GetGameName(Index: Integer): String; begin Result := GetGameNameEN(Index); - if ActiveLanguage = 'jp' then Result := GetGameNameJP(Index); + if ActiveLanguage = 'jp' then + Result := GetGameNameJP(Index); // this shouldn't happen, but whatever - if Result = '' then Result := GetPluginId(Index); + if Result = '' then + Result := GetPluginId(Index); end; function GetGameArchitecture(Index: Integer): String; @@ -147,6 +149,16 @@ begin end; end; +function GetExecutableName(Index: Integer): String; +begin + case Index of + #sub ExeNameMapping + {#I}: Result := '{#GetExecutableName(I)}'; + #endsub + #for {I = 0; I < PluginCount; I++} ExeNameMapping + end; +end; + // Tries to guess the root directory of the game at the given index function GuessGamePath(Index: Integer): String; begin @@ -160,20 +172,24 @@ begin Result := '' end; -// Tells us where on which page the install dir box for the given index is located -procedure GetPageAndIndex(Index: Integer; out Page: Integer; out IndexInPage: Integer); +function GuessPluginIndex(GameDir: String): Integer; +var + Index: Integer; begin - Page := Index / PageSize; - IndexInPage := Index mod PageSize; + Result := -1; + for Index := 0 to PluginCount - 1 do + begin + if FileExists(AddBackslash(GameDir) + GetExecutableName(Index) + '.exe') then + begin + Result := Index; + break; + end; + end; end; function GetDir(Index: String): String; -var - Page: Integer; - IndexInPage: Integer; begin - GetPageAndIndex(StrToInt(Index), Page, IndexInPage); - Result := DirPages[Page].Values[IndexInPage]; + Result := GameDirs[StrToInt(Index)]; end; function IsDirSelected(Index: Integer): Boolean; @@ -181,10 +197,10 @@ begin Result := GetDir(IntToStr(Index)) <> ''; end; -function ShouldInstallIntiface(): Boolean; +function IsIntifaceInstalled(): Boolean; begin - Result := (not DirExists(AddBackslash(ExpandConstant('{commonpf32}')) + 'IntifaceCentral')) - and (not DirExists(AddBackslash(ExpandConstant('{userappdata}')) + 'IntifaceCentral')); + Result := DirExists(AddBackslash(ExpandConstant('{commonpf32}')) + 'IntifaceCentral') + or DirExists(AddBackslash(ExpandConstant('{userappdata}')) + 'IntifaceCentral'); end; function IsBuildType(Index: Integer; Architecture: String): Boolean; @@ -197,132 +213,222 @@ begin Result := 'GameDir.' + GetPluginId(Index); end; -function ValidateGameDir(Path: String): Boolean; +procedure Warn(Message: String; Interactive: Boolean); +begin + if Interactive then + MsgBox(Message, mbError, MB_OK); +end; + +function Ask(Message: String; Interactive: Boolean): Boolean; +begin + Result := Interactive and (MsgBox(Message, mbConfirmation, MB_YESNO) = IDYES); +end; + +function ValidateGameDir(Path: String; Interactive: Boolean): Boolean; var FindRec: TFindRec; - WarningMsg: String; begin - Result := True; - if (not FindFirst(AddBackslash(Path) + '*_Data', FindRec)) and (Path <> PlaceholderDir) then + Result := FindFirst(AddBackslash(Path) + '*_Data', FindRec); + if not Result then + Warn(FmtMessage(CustomMessage('NotAGameDir'), [Path]), Interactive); + FindClose(FindRec); +end; + +procedure RemoveGameDir(GameDir: String); +var + Index: Integer; +begin + for Index := 0 to PluginCount - 1 do begin - WarningMsg := Format(CustomMessage('NotAGameDir'), [Path]); - MsgBox(WarningMsg, mbError, MB_OK); - Result := False; + if GameDirs[Index] = GameDir then + GameDirs[Index] := ''; end; + PathList.Items.Delete(PathList.Items.IndexOf(GameDir)); end; -function ValidateDirPage(Page: TWizardPage; DirCount: Integer): Boolean; +function AddGameDir(GameDir: String; PluginIndex: Integer; Interactive: Boolean): Boolean; var - DirPage: TInputDirWizardPage; - IndexInPage: Integer; + Index: Integer; begin + Result := False; + if not ValidateGameDir(GameDir, Interactive) then + exit; + if PluginIndex < 0 then + begin + Warn(CustomMessage('MissingTitle'), Interactive); + exit; + end; + if GameDirs[PluginIndex] <> '' then + begin + if Ask(FmtMessage(CustomMessage('ConflictingPaths'), [GetGameName(PluginIndex)]), Interactive) then + RemoveGameDir(GameDirs[PluginIndex]) + else + exit; + end; + for Index := 0 to PluginCount - 1 do + begin + if GameDirs[Index] <> GameDir then + continue; + if Ask(FmtMessage(CustomMessage('ConflictingTitles'), [GetGameName(Index)]), Interactive) then + RemoveGameDir(GameDirs[Index]) + else + exit; + end; + GameDirs[PluginIndex] := GameDir; + PathList.Items.Add(GameDir); Result := True; - DirPage := Page as TInputDirWizardPage; - for IndexInPage := 0 to DirCount - 1 do +end; + +procedure PopulateGameListPage; +var + Index: Integer; + GameDir: String; +begin + for Index := 0 to PluginCount - 1 do begin - if not ValidateGameDir(DirPage.Values[IndexInPage]) then - begin - Result := False; - break; - end; + TitleComboBox.Items.Add(GetGameName(Index)); + GameDir := GetPreviousData(GetPreviousDataKey(Index), GuessGamePath(Index)); + AddGameDir(GameDir, Index, False); end; end; -function OnDirPageNextClick(Page: TWizardPage): Boolean; +procedure OnPathChanged(Sender: TObject); begin - Result := ValidateDirPage(Page, PageSize); + TitleComboBox.ItemIndex := GuessPluginIndex(PathEdit.Text); end; -function OnLastDirPageNextClick(Page: TWizardPage): Boolean; +procedure OnBrowseClick(Sender: TObject); var - LastPage: Integer; - LastIndex: Integer; + Path: String; begin - GetPageAndIndex(PluginCount - 1, LastPage, LastIndex); - Result := ValidateDirPage(Page, LastIndex + 1); + Path := PathEdit.Text; + if Path = '' then + Path := ExpandConstant('{sd}'); + if BrowseForFolder(SetupMessage(msgBrowseDialogLabel), Path, False) then + begin + ValidateGameDir(Path, True); // allow bad path for easier correction + PathEdit.Text := Path; + OnPathChanged(Sender); + end; end; -procedure AddDirPrompts; -var - Index: Integer; - Page: Integer; - IndexInPage: Integer; - PrevPageID: Integer; +procedure OnAddClick(Sender: TObject); begin - for Index := 0 to PluginCount - 1 do + if AddGameDir(PathEdit.Text, TitleComboBox.ItemIndex, True) then begin - GetPageAndIndex(Index, Page, IndexInPage); - if Page = 0 then - PrevPageID := wpSelectDir - else - PrevPageID := DirPages[Page - 1].ID; - if IndexInPage = 0 then - DirPages[Page] := CreateInputDirPage(PrevPageID, - Format(CustomMessage('SelectPathTitle'), [Page + 1]), - CustomMessage('SelectPath'), - '', False, ''); - DirPages[Page].Add(GetGameName(Index)); - DirPages[Page].Values[IndexInPage] := - GetPreviousData(GetPreviousDataKey(Index), GuessGamePath(Index)); - DirPages[Page].OnNextButtonClick := @OnDirPageNextClick; + PathEdit.Text := ''; + TitleComboBox.ItemIndex := -1; end; - DirPages[Page].OnNextButtonClick := @OnLastDirPageNextClick; end; -// based on https://stackoverflow.com/a/31706698 -procedure New_WizardForm_NextButton_OnClick(Sender: TObject); -var - Index: Integer; - Page: Integer; - IndexInPage: Integer; +procedure OnRemoveClick(Sender: TObject); begin - for Index := 0 to PluginCount - 1 do + if PathList.ItemIndex >= 0 then + RemoveGameDir(PathList.Items[PathList.ItemIndex]); +end; + +function OnGameListPageNextButtonClick(Sender: TWizardPage): Boolean; +begin + if PathList.Items.Count = 0 then begin - GetPageAndIndex(Index, Page, IndexInPage); - if DirPages[Page].Values[IndexInPage] = '' then - // Force value to pass validation - DirPages[Page].Values[IndexInPage] := PlaceholderDir; + Warn(CustomMessage('EmptyGameList'), True); + Result := False; + exit; end; - Old_WizardForm_NextButton_OnClick(Sender); - for Index := 0 to PluginCount - 1 do + if (PathEdit.Text <> '') and not Ask(CustomMessage('GamePending'), True) then begin - GetPageAndIndex(Index, Page, IndexInPage); - if DirPages[Page].Values[IndexInPage] = PlaceholderDir then - DirPages[Page].Values[IndexInPage] := ''; + Result := False; + exit; end; + Result := True; +end; + +procedure AddGameListPage; +var + GameListPage: TWizardPage; + BrowseBtn: TButton; + AddBtn: TButton; + RemoveBtn: TButton; + AddLabel: TLabel; + ListLabel: TLabel; +begin + GameListPage := CreateCustomPage(wpSelectDir, + CustomMessage('GameListTitle'), + CustomMessage('GameListDesc')); + GameListPage.OnNextButtonClick := @OnGameListPageNextButtonClick; + PathEdit := TEdit.Create(WizardForm); + PathEdit.Parent := GameListPage.Surface; + PathEdit.Left := 0; + PathEdit.Top := 0; + PathEdit.OnChange := @OnPathChanged; + BrowseBtn := TButton.Create(WizardForm); + BrowseBtn.Parent := GameListPage.Surface; + BrowseBtn.Left := GameListPage.Surface.Width - BrowseBtn.Width; + BrowseBtn.Top := 0; + BrowseBtn.Height := PathEdit.Height; + BrowseBtn.Caption := SetupMessage(msgButtonBrowse); + BrowseBtn.OnClick := @OnBrowseClick; + PathEdit.Width := BrowseBtn.Left - PathEdit.Left - Spacing; + TitleComboBox := TComboBox.Create(WizardForm); + TitleComboBox.Parent := GameListPage.Surface; + TitleComboBox.Left := 0; + TitleComboBox.Top := PathEdit.Height + Spacing; + TitleComboBox.Width := GameListPage.Surface.Width; + TitleComboBox.Text := CustomMessage('TitlePlaceholder'); + AddBtn := TButton.Create(WizardForm); + AddBtn.Parent := GameListPage.Surface; + AddBtn.Left := 0; + AddBtn.Top := TitleComboBox.Top + TitleComboBox.Height + Spacing; + AddBtn.Height := BrowseBtn.Height; + AddBtn.Caption := CustomMessage('AddBtn'); + AddBtn.OnClick := @OnAddClick; + ListLabel := TLabel.Create(WizardForm); + ListLabel.Parent := GameListPage.Surface; + ListLabel.Left := 0; + ListLabel.Top := AddBtn.Top + AddBtn.Height + Spacing; + ListLabel.Caption := CustomMessage('PathListLabel'); + PathList := TListBox.Create(WizardForm); + PathList.Parent := GameListPage.Surface; + PathList.Left := 0; + PathList.Top := ListLabel.Top + ListLabel.Height; + PathList.Width := GameListPage.Surface.Width; + PathList.Height := GameListPage.Surface.Height - BrowseBtn.Height - PathList.Top - Spacing; + PathList.MultiSelect := False; + RemoveBtn := TButton.Create(WizardForm); + RemoveBtn.Parent := GameListPage.Surface; + RemoveBtn.Left := 0; + RemoveBtn.Top := PathList.Top + PathList.Height + spacing; + RemoveBtn.Height := BrowseBtn.Height; + RemoveBtn.Caption := CustomMessage('RemoveBtn'); + RemoveBtn.OnClick := @OnRemoveClick; end; procedure CheckIntiface; var ErrorCode: Integer; begin - if ShouldInstallIntiface() then - if MsgBox(CustomMessage('InstallIntiface'), mbConfirmation, MB_YESNO) = IDYES then - if not ShellExec('open', 'https://intiface.com/central/', '', '', SW_SHOW, ewNoWait, ErrorCode) then - MsgBox(SysErrorMessage(ErrorCode), mbError, MB_OK); + if IsIntifaceInstalled() then + exit; + if not Ask(CustomMessage('InstallIntiface'), True) then + exit; + if not ShellExec('open', 'https://intiface.com/central/', '', '', SW_SHOW, ewNoWait, ErrorCode) then + Warn(SysErrorMessage(ErrorCode), True); end; procedure InitializeWizard; begin - PlaceholderDir := ExpandConstant('{%TEMP}'); CheckIntiface; - AddDirPrompts; - Old_WizardForm_NextButton_OnClick := WizardForm.NextButton.OnClick; - WizardForm.NextButton.OnClick := @New_WizardForm_NextButton_OnClick; + AddGameListPage; + PopulateGameListPage; end; procedure RegisterPreviousData(PreviousDataKey: Integer); var Index: Integer; - Page: Integer; - IndexInPage: Integer; - DirPath: String; begin for Index := 0 to PluginCount - 1 do begin - GetPageAndIndex(Index, Page, IndexInPage); - DirPath := DirPages[Page].Values[IndexInPage]; - if DirExists(DirPath) then - SetPreviousData(PreviousDataKey, GetPreviousDataKey(Index), DirPath); + if DirExists(GameDirs[Index]) then + SetPreviousData(PreviousDataKey, GetPreviousDataKey(Index), GameDirs[Index]); end; end; diff --git a/src/Installer/JP.isl b/src/Installer/JP.isl index 981e01e6..dd1f0951 100644 --- a/src/Installer/JP.isl +++ b/src/Installer/JP.isl @@ -1,5 +1,14 @@ [CustomMessages] +GameListTitle=インストール先 +GameListDesc=ゲームを追加するには、ゲームフォルダとタイトルを選択してから「追加」ボタンをクリックしてください。 +AddBtn=追加 +RemoveBtn=削除 InstallIntiface=LoveMachineを使用するにはIntiface Centralをインストールする必要があります。今インストールしますか? -SelectPathTitle=インストール先・%dページ -SelectPath=インストール先のゲームフォルダを選択してください。持っていないゲームの入力欄は空白のままにしておいてください。 -NotAGameDir=「%s」はUnityゲームフォルダじゃないみたいです。ゲームデータを含むフォルダを選択してください。 +NotAGameDir=「%1」はUnityゲームフォルダじゃないみたいです。ゲームデータを含むフォルダを選択してください。 +TitlePlaceholder=[ゲームタイトル] +MissingTitle=ゲームを認識できません。ドロップダウンから手で選択してください。 +ConflictingPaths=「%1」のフォルダは既にリストに入っています。上書きしますか? +ConflictingTitles=このフォルダは既に「%1」に関連付けられています。上書きしますか? +PathListLabel=LoveMachineは以下の場所にインストールされます: +EmptyGameList=少なくとも1つのゲームをリストに追加する必要があります。 +GamePending=ゲームをリストに入れないとモッドされません。それでも続行しますか? diff --git a/src/LoveMachine.AGH/PluginInfo.ini b/src/LoveMachine.AGH/PluginInfo.ini index 0371bab7..82c837e1 100644 Binary files a/src/LoveMachine.AGH/PluginInfo.ini and b/src/LoveMachine.AGH/PluginInfo.ini differ diff --git a/src/LoveMachine.AI/PluginInfo.ini b/src/LoveMachine.AI/PluginInfo.ini index 21c39745..e31ee7e0 100644 Binary files a/src/LoveMachine.AI/PluginInfo.ini and b/src/LoveMachine.AI/PluginInfo.ini differ diff --git a/src/LoveMachine.AIDR/PluginInfo.ini b/src/LoveMachine.AIDR/PluginInfo.ini index b61b9568..693b43c6 100644 Binary files a/src/LoveMachine.AIDR/PluginInfo.ini and b/src/LoveMachine.AIDR/PluginInfo.ini differ diff --git a/src/LoveMachine.COM3D2/PluginInfo.ini b/src/LoveMachine.COM3D2/PluginInfo.ini index 3094995d..7e2fd019 100644 Binary files a/src/LoveMachine.COM3D2/PluginInfo.ini and b/src/LoveMachine.COM3D2/PluginInfo.ini differ diff --git a/src/LoveMachine.DJ/PluginInfo.ini b/src/LoveMachine.DJ/PluginInfo.ini index 3c840406..acffc73f 100644 Binary files a/src/LoveMachine.DJ/PluginInfo.ini and b/src/LoveMachine.DJ/PluginInfo.ini differ diff --git a/src/LoveMachine.EC/PluginInfo.ini b/src/LoveMachine.EC/PluginInfo.ini index 1447304f..9eca5566 100644 Binary files a/src/LoveMachine.EC/PluginInfo.ini and b/src/LoveMachine.EC/PluginInfo.ini differ diff --git a/src/LoveMachine.HC.DigitalCraft/PluginInfo.ini b/src/LoveMachine.HC.DigitalCraft/PluginInfo.ini index 4b733f42..b5e37421 100644 Binary files a/src/LoveMachine.HC.DigitalCraft/PluginInfo.ini and b/src/LoveMachine.HC.DigitalCraft/PluginInfo.ini differ diff --git a/src/LoveMachine.HC/PluginInfo.ini b/src/LoveMachine.HC/PluginInfo.ini index 0b57124d..b47e2ce2 100644 Binary files a/src/LoveMachine.HC/PluginInfo.ini and b/src/LoveMachine.HC/PluginInfo.ini differ diff --git a/src/LoveMachine.HKR/PluginInfo.ini b/src/LoveMachine.HKR/PluginInfo.ini index d5aa91c9..51a42550 100644 Binary files a/src/LoveMachine.HKR/PluginInfo.ini and b/src/LoveMachine.HKR/PluginInfo.ini differ diff --git a/src/LoveMachine.HS/PluginInfo.ini b/src/LoveMachine.HS/PluginInfo.ini index 4b0476ab..6d5d94d2 100644 Binary files a/src/LoveMachine.HS/PluginInfo.ini and b/src/LoveMachine.HS/PluginInfo.ini differ diff --git a/src/LoveMachine.HS2/PluginInfo.ini b/src/LoveMachine.HS2/PluginInfo.ini index f73b6a3c..7b84575c 100644 Binary files a/src/LoveMachine.HS2/PluginInfo.ini and b/src/LoveMachine.HS2/PluginInfo.ini differ diff --git a/src/LoveMachine.I2C/PluginInfo.ini b/src/LoveMachine.I2C/PluginInfo.ini index d8a144eb..aaa8baa6 100644 Binary files a/src/LoveMachine.I2C/PluginInfo.ini and b/src/LoveMachine.I2C/PluginInfo.ini differ diff --git a/src/LoveMachine.IO/PluginInfo.ini b/src/LoveMachine.IO/PluginInfo.ini index 43a7937c..bf2c884e 100644 Binary files a/src/LoveMachine.IO/PluginInfo.ini and b/src/LoveMachine.IO/PluginInfo.ini differ diff --git a/src/LoveMachine.KK/PluginInfo.ini b/src/LoveMachine.KK/PluginInfo.ini index cc72aa4e..a6bd9a34 100644 Binary files a/src/LoveMachine.KK/PluginInfo.ini and b/src/LoveMachine.KK/PluginInfo.ini differ diff --git a/src/LoveMachine.KKLB/PluginInfo.ini b/src/LoveMachine.KKLB/PluginInfo.ini index 6652423d..34e14d75 100644 Binary files a/src/LoveMachine.KKLB/PluginInfo.ini and b/src/LoveMachine.KKLB/PluginInfo.ini differ diff --git a/src/LoveMachine.KKS/PluginInfo.ini b/src/LoveMachine.KKS/PluginInfo.ini index 1ebff01e..bbe440c1 100644 Binary files a/src/LoveMachine.KKS/PluginInfo.ini and b/src/LoveMachine.KKS/PluginInfo.ini differ diff --git a/src/LoveMachine.LE/PluginInfo.ini b/src/LoveMachine.LE/PluginInfo.ini index e9392894..63e170bb 100644 Binary files a/src/LoveMachine.LE/PluginInfo.ini and b/src/LoveMachine.LE/PluginInfo.ini differ diff --git a/src/LoveMachine.OA/PluginInfo.ini b/src/LoveMachine.OA/PluginInfo.ini index a0a5f8ac..71453bfe 100644 Binary files a/src/LoveMachine.OA/PluginInfo.ini and b/src/LoveMachine.OA/PluginInfo.ini differ diff --git a/src/LoveMachine.OT/PluginInfo.ini b/src/LoveMachine.OT/PluginInfo.ini index 5d297673..5adebfd9 100644 Binary files a/src/LoveMachine.OT/PluginInfo.ini and b/src/LoveMachine.OT/PluginInfo.ini differ diff --git a/src/LoveMachine.PH/PluginInfo.ini b/src/LoveMachine.PH/PluginInfo.ini index b237df52..51072d27 100644 Binary files a/src/LoveMachine.PH/PluginInfo.ini and b/src/LoveMachine.PH/PluginInfo.ini differ diff --git a/src/LoveMachine.RG/PluginInfo.ini b/src/LoveMachine.RG/PluginInfo.ini index b61c939b..c8892c1c 100644 Binary files a/src/LoveMachine.RG/PluginInfo.ini and b/src/LoveMachine.RG/PluginInfo.ini differ diff --git a/src/LoveMachine.SC/PluginInfo.ini b/src/LoveMachine.SC/PluginInfo.ini index 0960cd0f..0d656712 100644 Binary files a/src/LoveMachine.SC/PluginInfo.ini and b/src/LoveMachine.SC/PluginInfo.ini differ diff --git a/src/LoveMachine.SCH/PluginInfo.ini b/src/LoveMachine.SCH/PluginInfo.ini index d424722b..cd217f86 100644 Binary files a/src/LoveMachine.SCH/PluginInfo.ini and b/src/LoveMachine.SCH/PluginInfo.ini differ diff --git a/src/LoveMachine.SCS/PluginInfo.ini b/src/LoveMachine.SCS/PluginInfo.ini index e5d44fe0..ee2528ef 100644 Binary files a/src/LoveMachine.SCS/PluginInfo.ini and b/src/LoveMachine.SCS/PluginInfo.ini differ diff --git a/src/LoveMachine.SG/PluginInfo.ini b/src/LoveMachine.SG/PluginInfo.ini index 44c695a3..b5c3cbd3 100644 Binary files a/src/LoveMachine.SG/PluginInfo.ini and b/src/LoveMachine.SG/PluginInfo.ini differ diff --git a/src/LoveMachine.SIH/PluginInfo.ini b/src/LoveMachine.SIH/PluginInfo.ini index 96debed1..3afc791e 100644 Binary files a/src/LoveMachine.SIH/PluginInfo.ini and b/src/LoveMachine.SIH/PluginInfo.ini differ diff --git a/src/LoveMachine.VRK/PluginInfo.ini b/src/LoveMachine.VRK/PluginInfo.ini index fd78b3a5..f9f1322e 100644 Binary files a/src/LoveMachine.VRK/PluginInfo.ini and b/src/LoveMachine.VRK/PluginInfo.ini differ diff --git a/src/LoveMachine.WP/PluginInfo.ini b/src/LoveMachine.WP/PluginInfo.ini index 851f87ee..ed92c822 100644 Binary files a/src/LoveMachine.WP/PluginInfo.ini and b/src/LoveMachine.WP/PluginInfo.ini differ