Close

Retrobat + restrictor

A project log for THE ULTIMATE MINI ARCADE

Classic arcade with all the latest technological advancements, ready for the classics. Enjoy!

srrubioSrRubio 03/02/2026 at 15:070 Comments

🕹 PROYECTO: Restrictor automático integrado con RetroBat + MAME

🎯 Objetivo

🧠 Arquitectura final correcta

NO tocamos el XML para meter comandos raros.

La solución profesional fue:

👉 Mantener el <command> original
👉 Integrar el restrictor dentro del .bat que ya lanza MAME

Esto evita problemas con &, && y procesos de Windows.

🛠 1️⃣ Instalación de Python

Descargar

Ir a:

https://www.python.org/downloads/

Muy importante

Marcar la casilla:

☑ Add Python to PATH

Luego instalar.

Verificar instalación

Abrir CMD:

python --version

Debe devolver algo como:

Python 3.x.x

🛠 2️⃣ Instalar pyserial

En CMD:

pip install pyserial

Si falla:

python -m pip install pyserial

🛠 3️⃣ Crear el plugin restrictor

Ruta:

C:\RetroBat\plugins\restrictor.py

Crear con VS Code o bloc de notas.

Contenido:

import serial
import sys
import time
import os

COM_PORT = "COM5"      # ← Cambiar por tu puerto
BAUDRATE = 115200

lista_4 = [
    "nrallyx", "alibaba", "alphaf", "amidar", "armwrest", "armoredcar", "barrier",
    "blasto", "blockade", "btime", "carjmbre", "chameleo", "chinhero", "commando",
    "comotion", "congob", "copsnrob", "crash", "ckong", "crush", "diamondrun",
    "digdug", "digdug2", "digger", "disco", "dorunrun", "dominos", "dommy",
    "dkong", "dkong3", "dkongjr", "dorodon", "drmicro", "drgnbstr", "dremshpr", "elevator",
    "eyes", "qbertfh", "firetrap", "40love", "frogger", "galpanic", "gundealr",
    "guzzler", "hardhat", "headon", "headon2", "heiankyo", "hexa", "hustle",
    "invinco", "ironhors", "jrpacman", "jjack", "jungler", "karatedo", "karianx",
    "kicker", "kungfum", "ladybug", "lvgirl94", "lasso", "lockon", "locomotn",
    "logicpro", "logicpro2", "lupin3", "mjsikaku", "meikyu", "mikie","mineswpr",
    "mmonkey", "mmonster", "mtrap", "mrdo", "docastle", "dowild", "mrgoemon",
    "mrjong", "mrtnt", "mspacman", "mystston", "natodef", "naughtyb", "netwars",
    "olibochu", "pacnpal", "pacplus", "pairs", "pengo", "pepper2", "perestro",
    "pettanp", "pignewt", "higemaru", "popflame", "popeye", "pulsar", "punchout",
    "qbert", "qbertqub", "qix", "radarscp", "raiders5", "rallyx", "rampage",
    "reikaids", "robby", "rocnrope", "rthunder", "route16", "samurai", "scregg",
    "sidetrac", "sindbadm", "solarfox", "schaser", "spacepan", "spacezap", "spectar",
    "streakng", "sinvaders", "superpac", "spnchout", "sqix", "swat", "tactcian",
    "tankbatt", "tapper", "targ", "taxidriv", "telmahjn", "mrflea","elecyoyo",
    "thief", "timber", "timelimt", "tomahawk", "todruaga", "toypop", "trankgun",
    "tripunch", "tutankhm", "vanvan", "volfied", "vsgongf", "waijockey", "warpwarp",
    "wiping", "wndrmomo", "yamyam", "zerozone", "zigzag", "zookeep"
]

lista_8 = [
    "sf2", "sf2ce", "sf2hf",
    "ssf2", "mk", "mk2", "mk3", "umk3",
    "kof94", "kof95", "kof96", "kof97",
    "kof98", "kof99",
    "samsho", "samsho2"
]

def enviar(valor):
    try:
        with serial.Serial(COM_PORT, BAUDRATE, timeout=1) as ser:
            time.sleep(1.2)
            ser.write(valor.encode())
    except:
        pass

if __name__ == "__main__":

    if len(sys.argv) < 2:
        sys.exit(0)

    rom_path = sys.argv[1]
    rom = os.path.splitext(os.path.basename(rom_path))[0].lower()

    if rom in lista_4:
        enviar("4")
    elif rom in lista_8:
        enviar("8")
    else:
        enviar("0"

🛠 4️⃣ Probar manualmente

En:

C:\RetroBat\plugins

Ejecutar:

python restrictor.py pacman

Debe ir a 4.

python restrictor.py sf2

Debe ir a 8.

python restrictor.py metalslug

Debe ir a 0.

Si funciona → integración lista.

🛠 5️⃣ Integración correcta en RetroBat

NO modificar el XML.

Mantener:

<command>"C:\RetroBat\plugins\launch_mame_direct.bat" %ROM%</command>

Editar el archivo:

C:\RetroBat\plugins\launch_mame_direct.bat

Al principio del archivo añadir:

python "C:\RetroBat\plugins\restrictor.py" %1

Debe quedar así:

@echo off

python "C:\RetroBat\plugins\restrictor.py" %1

REM --- aquí sigue tu código original ---
...

No borrar nada más.

🎮 Flujo final de funcionamiento

Cuando seleccionas un juego:

1️⃣ RetroBat ejecuta launch_mame_direct.bat
2️⃣ El .bat ejecuta restrictor.py
3️⃣ Python envía "4", "8" o "0" por serie
4️⃣ El Arduino mueve el motor
5️⃣ Luego el .bat lanza MAME
6️⃣ El juego arranca con el restrictor ya colocado

Pantallas siguen funcionando. Nada se rompe. Sistema estable.

🧠 Lógica final aplicada

Tipo de juegoPosición
Lista 4-way4 (rombo)
Lista lucha8 (octógono)
Resto0 (cuadrado)

Discussions