26 aprile 2018

Script Groovywolf da frontend (ma non solo)

Ho iniziato a compilare il Groovywolf per essere utilizzato sul cab, la necessità di dover rinominare o spostare l' inp della partita appena fatta è però un problema, normalmente sul cab si utilizza un frontend e dover uscire e rientrare alla fine di ogni partita è una scocciatura, ho quindi creato un piccolo script con autoit per fare tutto in automatico senza intervenire manualmente.

Lo script in pratica avvia il gioco e la registrazione con groovywolf, finita la partita alla pressione tel tasto esc rinomina automaticamente il file .inp appena creato così si eviterà, avviando una nuova partita, di poter sovrascrivere la precedente registrazione, perdendo magari un record buono. Questo comporta la creazione di uno script per ogni gioco ma non credo sia un problema, un attacco al record in genere viene fatto su uno o due titoli quindi ci può stare.

Ho realizzato due versioni dello stesso script, una completamente "silenziosa", durante la quale non avremo comunicazioni, l'altra che ci mostrerà un messaggio dopo la pressione del tasto esc e la rinomina del file .inp, in qiesto caso era riferito a gigawing ed era il terzo tentativo.
Alla pressione del tasto enter il messaggio scompare e siamo pronti ad iniziare una nuova partita, questo nel caso ci volessimo annotare il numero inp, volendo tener traccia della partita appena fatta.

Spesso capita che dovendo chiudere il frontend per rinominare il file o controllarne il nome si perda quella concentrazione fondamentale se si sta tentando un record.

Gli script sono perfettamente funzionanti e testati con il frontend Attractmode, non ho avuto modo di provarli con altri FE ma non dovrebbeero esserci problemi, eccoli di seguito.

Versione "silenziosa"

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
 Author:         b4nd1t0

 Funzione dello script: avvio e registrazione partita rinomina in automatico del file .inp appena registrato per impedire che venga sovrascritto iniziando una nuova partita.

Script Function: Start playing and recording + automatically renames the newly registered .inp file to prevent it from being overwritten by starting a new game.

#ce ----------------------------------------------------------------------------

; Script StartRun("groovywolf.exe nomerom -record nomerom.inp -nvram_directory NUL")
While 1
If Not ProcessExists("groovywolf.exe") Then
#include <File.au3>
Global $sFileFrom = "inp\nomerom.inp"
Global $sFileTo = "inp\nomerom.inp"
$vResult = _SecureFileMove($sFileFrom, $sFileTo)
Exit
Func _SecureFileMove($sFileFrom, $sFileTo)

    Local $iIndex = 0, $sFileTemp, $iResult
    Local $sDrive, $sDir, $sFName, $sExt

    If FileExists($sFileTo) Then
        _PathSplit($sFileTo, $sDrive, $sDir, $sFName, $sExt)
        While 1
            $iIndex = $iIndex + 1
            $sFileTemp = $sDrive & $sDir & $sFName & "_" & $iIndex & $sExt
            If Not FileExists($sFileTemp) Then ExitLoop
        WEnd
        $sFileTo = $sFileTemp
    EndIf
    $iResult = FileCopy($sFileFrom, $sFileTo)
    If $iResult = 1 Then Return $sFileTo
    Return 0

EndFunc   ;==>_SecureFileMove
Exit
EndIf
WEnd

Versione con conferma di rinomina

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.2
 Author:         b4nd1t0

 Funzione dello script: avvio e registrazione partita rinomina in automatico del file .inp appena registrato per impedire che venga sovrascritto iniziando una nuova partita. Appena effettuata la rinomina compare una finestra di conferma con il nome file assegnato, premere enter per proseguire.

Script Function: Start playing and recording + automatically renames the newly registered .inp file to prevent it from being overwritten by starting a new game. When renaming is completed, a confirmation window appears with the assigned file name, press enter to continue.

#ce ----------------------------------------------------------------------------Run("groovywolf.exe nomerom -record nomerom.inp -nvram_directory NUL")
While 1
If Not ProcessExists("groovywolf.exe") Then
#include <File.au3>
Global $sFileFrom = "inp\nomerom.inp"
Global $sFileTo = "inp\nomerom.inp"
$vResult = _SecureFileMove($sFileFrom, $sFileTo)
If $vResult == 0 Then ; 0 = error
    MsgBox(0, "", "Errore nel rinominare il file/Error renaming file: " & $sFileTo)
Else ; on success the name of the moved file is returned
    MsgBox(0, "", "File salvato correttamente/File saved successfully: " & $vResult)
EndIf
Exit
Func _SecureFileMove($sFileFrom, $sFileTo)

    Local $iIndex = 0, $sFileTemp, $iResult
    Local $sDrive, $sDir, $sFName, $sExt

    If FileExists($sFileTo) Then
        _PathSplit($sFileTo, $sDrive, $sDir, $sFName, $sExt)
        While 1
            $iIndex = $iIndex + 1
            $sFileTemp = $sDrive & $sDir & $sFName & "_" & $iIndex & $sExt
            If Not FileExists($sFileTemp) Then ExitLoop
        WEnd
        $sFileTo = $sFileTemp
    EndIf
    $iResult = FileCopy($sFileFrom, $sFileTo)
    If $iResult = 1 Then Return $sFileTo
    Return 0

EndFunc   ;==>_SecureFileMove
Exit
EndIf
WEnd

gli unici parametri che andranno modificati in entrambe le versioni sono il nome dell'eseguibile groovywolf e il nome della rom da avviare con il relativo inp (2 eseguibili e 4 nomerom)
Per qualunque problema o consiglio (si può sempre migliorare 😤) non esitate a contattarmi.