Skip to content

Commit

Permalink
Añadiendo soporte para línea de comandos
Browse files Browse the repository at this point in the history
Se ha añadido soporte para poder lanzar un juego desde la línea de comandos y así poder integrarlo en Emuteca mediante ´LNSCompFE -f <clavejuego>´.

También se ha retocado un poco como se guardan las estadísticas de intentos de tal forma que ` - ` en el campo de puntuación sirva para crear una nueva columna (aunque posiblemente en el futuro se divida en un campo para el valor numérico exclusivamente y otros para comentarios).

Además se ha adaptado a los cambios que ha sufrido CHXPas en estos años...
  • Loading branch information
Chixpy committed Apr 27, 2024
1 parent 204a337 commit 7b86d61
Show file tree
Hide file tree
Showing 9 changed files with 320 additions and 344 deletions.
2 changes: 1 addition & 1 deletion CHXPas
Submodule CHXPas updated 341 files
360 changes: 127 additions & 233 deletions Source/Forms/ufrLNSCompFE.lfm

Large diffs are not rendered by default.

132 changes: 102 additions & 30 deletions Source/Forms/ufrLNSCompFE.pas
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ interface
// CHX units
uCHXStrUtils, uCHXDlgUtils,
// CHX forms
ufrCHXForm, ufCHXAbout,
ufrCHXForm,
// CHX frames
ufCHXImgListPreview,
ufCHXImgListPreview, ufCHXAbout,
// LNSCompFE classes
ucLNSCFEConfig,
// LNSCompFE frames
Expand Down Expand Up @@ -52,10 +52,12 @@ interface
krsCSVSep = ',';


// TODO: WolfMAME .181 tiene un fallo respecto al valor por defecto del
// parámetro -inplayout así que lo eliminamos.
// Cuando se use otra versión de WolfMAME +0.185 habría que quitarlo
// de los parámetros opcionales.
{ TODO: WolfMAME .181 tiene un fallo respecto al valor por defecto del
parámetro -inplayout así que lo eliminamos dándole un valor.
Cuando en las competiciones se use otra versión de WolfMAME (+0.185)
habría que quitarlo de los parámetros opcionales.
}
krsParamCrearINPOpc = '-inplayout standard';
krsParamCrearINPFmt = '-afs -throttle -speed 1 -rec %0:s.inp';

Expand Down Expand Up @@ -159,6 +161,7 @@ TfrmLNSCompFE = class(TfrmCHXForm)
FMAMEExe: string;
FNombreJuegos: TStringList;
FNVRAMFolder: string;
FRunFromCM : Boolean;
procedure SetConfigFile(const aConfigFile: string);
procedure SetDIFFFolder(const aDIFFFolder: string);
procedure SetHIFolder(const aHIFolder: string);
Expand All @@ -167,6 +170,7 @@ TfrmLNSCompFE = class(TfrmCHXForm)
procedure SetJuego(const aJuego: string);
procedure SetMAMEExe(const aMAMEExe: string);
procedure SetNVRAMFolder(const aNVRAMFolder: string);
procedure SetRunFromCM(const AValue : Boolean);

protected
property ConfigFile: string read FConfigFile write SetConfigFile;
Expand Down Expand Up @@ -200,6 +204,13 @@ TfrmLNSCompFE = class(TfrmCHXForm)
property ImpPreview: TfmCHXImgListPreview read FImpPreview;
//< Frame para previsualización de imágenes

property RunFromCM: Boolean read FRunFromCM write SetRunFromCM;
{< ¿El juego ha sido ejecutado desde la línea de comandos?
Si el juego ha sido ejecutado desde la linea de comandos entonces cualquier
en la configuración no se guardará.
}

procedure ActualizarNombreJuegos;
//< Actualiza el nombre de los juegos
procedure ActualizarConfig;
Expand Down Expand Up @@ -234,6 +245,8 @@ implementation
{ TfrmLNSCompFE }

procedure TfrmLNSCompFE.FormCreate(Sender: TObject);
var
Idx : Integer;
begin
Application.Title := Format(krsAppTitleFmt,
[Application.Title, GetFileVersion]);
Expand Down Expand Up @@ -272,7 +285,36 @@ procedure TfrmLNSCompFE.FormCreate(Sender: TObject);
// (si se hace al final se evitan redibujados)
ImpPreview.Parent := pRight;


// LINEA DE COMMANDOS
// ------------------

// Parseamos los parámetros de la línea de comandos para ejecutar un juego
// directamente.
// De esta forma pordemos integrarlo con Emuteca.

RunFromCM := False;
Idx := 0; // Quitamos warning

Application.CaseSensitiveOptions := False;
Application.CheckOptions('f','file');

if Application.HasOption('f','file') then
begin
// Añadimos el juego a la lista
Idx := Config.Juegos.Add(Application.GetOptionValue('f','file'));
RunFromCM := True;
end;

ActualizarConfig;

// Si se ha definido un juego está en la línea de commandos seleccionarlo y
// ejecutarlo directamente
if RunFromCM then
begin
rgbJuegos.ItemIndex := Idx;
actGrabarINP.Execute;
end;
end;

procedure TfrmLNSCompFE.actEditarConfigExecute(Sender: TObject);
Expand Down Expand Up @@ -333,8 +375,13 @@ procedure TfrmLNSCompFE.actReproducirINPExecute(Sender: TObject);

procedure TfrmLNSCompFE.FormDestroy(Sender: TObject);
begin
Config.Nick := eNick.Text;
Config.SaveToFile('', False); // No borrar el contenido previo del archivo
// Si se ha ejecutado el juego desde la línea de commandos no se guarda la
// configuración modificada.
if not RunFromCM then
begin
Config.Nick := eNick.Text;
Config.SaveToFile('', False); // No borrar el contenido previo del archivo
end;
Config.Free;

ImageList.Free;
Expand All @@ -344,19 +391,22 @@ procedure TfrmLNSCompFE.FormDestroy(Sender: TObject);
end;

procedure TfrmLNSCompFE.iLogoClick(Sender: TObject);
var
Info: TStringList;
begin
Application.CreateForm(TfrmCHXAbout, frmCHXAbout);

frmCHXAbout.mAditional.Lines.Add('(C) 2018 Chixpy - GNU-GPL 3.0');
frmCHXAbout.mAditional.Lines.Add('');

frmCHXAbout.mAditional.Lines.Add(Format('Imágenes: %0:s', [ImagesFolder]));
frmCHXAbout.mAditional.Lines.Add(Format('INP: %0:s', [INPFolder]));
frmCHXAbout.mAditional.Lines.Add(Format('HI: %0:s', [HIFolder]));
frmCHXAbout.mAditional.Lines.Add(Format('NVRAM: %0:s', [NVRAMFolder]));
frmCHXAbout.mAditional.Lines.Add(Format('DIFF: %0:s', [DIFFFolder]));

frmCHXAbout.ShowModal;
Info := TStringList.Create;
Info.Add('(C) 2018-2024 Chixpy - GNU-GPL 3.0');
Info.Add('');

Info.Add(Format('LNSCompFE: %0:s', [GetCurrentDirUTF8]));
Info.Add('');
Info.Add(Format('Imágenes: %0:s', [ImagesFolder]));
Info.Add(Format('INP: %0:s', [INPFolder]));
Info.Add(Format('HI: %0:s', [HIFolder]));
Info.Add(Format('NVRAM: %0:s', [NVRAMFolder]));
Info.Add(Format('DIFF: %0:s', [DIFFFolder]));

TfmCHXAbout.SimpleFormAbout(Info,'','');
end;

procedure TfrmLNSCompFE.rgbJuegosResize(Sender: TObject);
Expand All @@ -372,12 +422,15 @@ procedure TfrmLNSCompFE.rgbJuegosResize(Sender: TObject);
if rgbJuegos.Font.Height = 0 then
begin
FontData := GetFontData(rgbJuegos.Font.Handle);
AlturaTexto := ((FontData.Height * 72) div
rgbJuegos.Font.PixelsPerInch) * 2;
AlturaTexto := FontData.Height;
end;

// Suele ser negativo por alguna razón...
AlturaTexto := abs(AlturaTexto);
// Windows: Si TFontData.Height
// - Es negativo: Está expresado en 1/72 pulgadas
// - Es positivo: Está expresado en pixeles

if AlturaTexto < 0 then
AlturaTexto := abs((AlturaTexto * 72) div (rgbJuegos.Font.PixelsPerInch * 2));

rgbJuegos.Columns := (rgbJuegos.Items.Count div
((rgbJuegos.ClientHeight div AlturaTexto) + 1)) + 1;
Expand Down Expand Up @@ -453,6 +506,12 @@ procedure TfrmLNSCompFE.SetNVRAMFolder(const aNVRAMFolder: string);
FNVRAMFolder := SetAsFolder(aNVRAMFolder);
end;

procedure TfrmLNSCompFE.SetRunFromCM(const AValue : Boolean);
begin
if FRunFromCM = AValue then Exit;
FRunFromCM := AValue;
end;

procedure TfrmLNSCompFE.ActualizarNombreJuegos;
var
i: integer;
Expand Down Expand Up @@ -639,7 +698,6 @@ procedure TfrmLNSCompFE.ActualizarConfig;
rgbJuegos.ItemIndex := 0; // Seleccionamos un juego

rgbJuegosResize(rgbJuegos); // Recolocando items...

end;

procedure TfrmLNSCompFE.ActualizarMedia;
Expand Down Expand Up @@ -714,7 +772,8 @@ procedure TfrmLNSCompFE.CrearINP;
Parametros: string;
HoraInicio: TDateTime;
DatosGrabarINP: RGrabarINPDatos;
aCSV: TStringList;
aCSV, TempStrLst: TStringList;
TempPts: string;
i: integer;
begin
if Juego = '' then
Expand Down Expand Up @@ -768,12 +827,25 @@ procedure TfrmLNSCompFE.CrearINP;
// Añadiendo la cabecera
aCSV.Add(krsStatsHeader);

// Formateando un poco la puntuación para el CSV
TempPts := UTF8QuotedStr(DatosGrabarINP.Puntuacion, '"');
TempPts := UTF8TextReplace(TempPts, ',', '","');
TempPts := UTF8TextReplace(TempPts, ' - ', '","');

// Una TStringList lo hace mejor que ha mano
TempStrLst := TStringList.Create;
// DateTimeToStr sin format settings, guarda las fechas igual que lo
// hace el DOS ;-D
aCSV.Add(DateTimeToStr(HoraInicio) + krsCSVSep +
IntToStr(DatosGrabarINP.Segundos) + krsCSVSep +
DatosGrabarINP.Puntuacion);
TempStrLst.Add(DateTimeToStr(HoraInicio));
TempStrLst.Add(IntToStr(DatosGrabarINP.Segundos));

TempPts := TempStrLst.CommaText + TempPts;

TempStrLst.Free;

aCSV.Add(TempPts);
aCSV.SaveToFile(aFileName);

finally
aCSV.Free;
end;
Expand All @@ -793,7 +865,7 @@ procedure TfrmLNSCompFE.CrearINP;
Inc(i);
end;

// Por el momentp no exite CopyFileUTF8...
// Por el momento no exite CopyFileUTF8...
CopyFile(UTF8ToSys(INPFolder + Juego + '.inp'),
UTF8ToSys(aFileName), True);
end;
Expand Down
25 changes: 13 additions & 12 deletions Source/Frames/ufLNSCFEConfig.pas
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,16 @@ TfmLNSCFEConfig = class(TfmCHXPropEditor)
FConfig: cLNSCFEConfig;
procedure SetConfig(const aConfig: cLNSCFEConfig);

protected
procedure DoClearFrameData;
procedure DoLoadFrameData;
procedure DoSaveFrameData;

public
property Config: cLNSCFEConfig read FConfig write SetConfig;

class function SimpleModalForm(aConfig: cLNSCFEConfig;
const aConfigIni, aIconsIni: string): integer;

procedure ClearFrameData; override;
procedure LoadFrameData; override;
procedure SaveFrameData; override;

constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
end;
Expand Down Expand Up @@ -93,8 +92,10 @@ procedure TfmLNSCFEConfig.SetConfig(const aConfig: cLNSCFEConfig);
LoadFrameData;
end;

procedure TfmLNSCFEConfig.DoClearFrameData;
procedure TfmLNSCFEConfig.ClearFrameData;
begin
inherited;

// Basico
eMAMEExe.Clear;
eImagesFolder.Clear;
Expand All @@ -107,8 +108,10 @@ procedure TfmLNSCFEConfig.DoClearFrameData;
eParProbarJuego.Clear;
end;

procedure TfmLNSCFEConfig.DoLoadFrameData;
procedure TfmLNSCFEConfig.LoadFrameData;
begin
inherited;

Enabled := Assigned(Config);
if not Enabled then
begin
Expand All @@ -128,8 +131,10 @@ procedure TfmLNSCFEConfig.DoLoadFrameData;
eParProbarJuego.Text := Config.ParAdicProbarJuego;
end;

procedure TfmLNSCFEConfig.DoSaveFrameData;
procedure TfmLNSCFEConfig.SaveFrameData;
begin
inherited;

// Básico
Config.MAMEExe := eMAMEExe.Text;
Config.ImagesFolder := eImagesFolder.Text;
Expand Down Expand Up @@ -163,10 +168,6 @@ constructor TfmLNSCFEConfig.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);

OnClearFrameData := @DoClearFrameData;
OnLoadFrameData := @DoLoadFrameData;
OnSaveFrameData := @DoSaveFrameData;

PageControl1.ActivePageIndex := 0;
end;

Expand Down
Loading

0 comments on commit 7b86d61

Please sign in to comment.