Arquivos de configuração para os controles¶
Introdução¶
Os arquivos de configuração para o controle podem ser usados para alterar as configurações da entrada predefinida do MAME. Tais arquivos de configuração podem ser usados com um dispositivo de entrada fornecendo padrões mais adequados, ou usados como perfis que possam ser selecionados para diferentes situações. O MAME inclui alguns exemplos de arquivos de configuração na pasta ctrlr desenvolvidos para fornecer padrões úteis para certos controles do tipo arcade.
Apesar da extensão .cfg
, estes arquivos estão no formato XML. O MAME
procura por tais arquivos nos diretórios definidos com a opção
ctrlrpath
. Um arquivo de configuração será selecionado quando a
opção ctrlr
seguido pelo nome do arquivo sem a extensão
.cfg
, exemplo:
ctrlr scorpionxg
Isso faz com que o MAME use o arquivo ctlrl\scorpionxg.cfg.
Haverá um erro caso o MAME identifique que o arquivo de configuração informado não exista ou caso o seu conteúdo não tenha nenhuma seção aplicável ao sistema que está sendo emulado.
A utilização dos símbolos ou dos tokens de entrada variam conforme a
aplicação. A precisão dos valores disponíveis e os seus significados
dependem da versão exata do MAME que está sendo usado, dos dispositivos
conectados na entrada, dos módulos do provedor da entrada selecionada
(as opções keyboardprovider
, mouseprovider
, lightgunprovider
e joystickprovider
) e possivelmente das outras configurações.
Estrutura básica¶
A sua estrutura segue um formato similar ao formato usado pela configuração do sistema que o MAME usa para salvar coisas como as configurações da entrada e os dados da contabilidade do sistema (criado na pasta que for definido usando a opção cfg_directory). Neste exemplo temos a estrutura geral de um arquivo de configuração de um controle:
<?xml version="1.0"?>
<mameconfig version="10">
<system name="default">
<input>
<!-- as configurações que afetam todos os sistemas emulados vão aqui -->
</input>
</system>
<system name="neogeo">
<input>
<!-- as configurações que afetam o neogeo e os seus clones vão aqui -->
</input>
</system>
<system name="intellec4.cpp">
<input>
<!-- as configurações que afetam todo os sistemas definidos no driver intellec4.cpp vão aqui -->
</input>
</system>
</mameconfig>
A base de um arquivo de configuração do controle deve ser um elemento
mameconfig
, com um atributo da version
que especifica a versão do
formato desta configuração (atualmente 10
- O MAME não carregará um
arquivo usando qualquer outra versão). O elemento mameconfig
contém
um ou mais elementos do sistema, cada qual com um nome do atributo
especificando os sistemas aos quais eles se aplicam. Cada elemento
system
pode conter um elemento input
que mantém o remap
atual e os elementos de configuração da porta port
que serão
descritos mais adiante. Cada elemento system
também pode conter um
elemento pointer_input
para definir as opções de entrada do ponteiro
para sistemas com ilustração interativa.
Ao iniciar a emulação de um sistema o MAME aplicará a configuração dos
elementos system
onde o valor do atributo name
atende a um dos
seguintes critérios:
Caso o atributo
name
tenha o valordefault
, ele sempre será aplicado (isso incluí os menus de seleção do sistema/software).Caso o atributo
name
tenha o mesmo nome do sistema, das suas variantes relacionadas ao sistema ou o nome encurtado da BIOS do sistema (caso seja aplicável).Caso o atributo
name
tenha o mesmo nome do arquivo fonte do driver.
Para o sistema "DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)" por
exemplo, os elementos system
serão aplicados caso o seu atributo
name
tenha o valor default
(se aplica a todos os sistemas),
sajeon
(um nome encurtado do próprio sistema), sasissu
(um nome
encurtado de uma outra versão do mesmo sistema), stvbios
(um nome
encurtado do nome da BIOS do sistema) ou stv.cpp
(nome do arquivo
fonte/driver onde o sistema foi definido).
Num outro exemplo, será aplicado aos sistemas "The Invaders",
"Super Invader Attack" (um bootleg do The Invaders) e "Dodgem" caso
um elemento system
onde o atributo name
tenha o valor
zac2650.cpp
.
Os elementos system
são aplicados na ordem em que aparecem no
arquivo de configuração. As configurações dos elementos que aparecem ao
final do arquivo podem modificar ou alterar as configurações dos
elementos anteriores. Dentro de um elemento system
, os elementos
remap
são aplicados antes dos elementos port
.
Remapeando os controles já predefinidos¶
É possível usar o emelento remap
para substituir uma entrada do host
para um outro qualquer na configuração padrão do MAME. O exemplo abaixo
substitui as teclas no teclado numérico para a teclas direcionais do
cursor:
<input>
<remap origcode="KEYCODE_UP" newcode="KEYCODE_8PAD" />
<remap origcode="KEYCODE_DOWN" newcode="KEYCODE_2PAD" />
<remap origcode="KEYCODE_LEFT" newcode="KEYCODE_4PAD" />
<remap origcode="KEYCODE_RIGHT" newcode="KEYCODE_6PAD" />
</input>
O atributo origcode
define o token para a entrada do host que será
substituído, o atributo newcode
define o token para a entrada do
host que será substituído. Neste caso, são as atribuições que usa o
cursor para cima, para baixo e as setas para a esquerda e para a
direita, elas serão substituídas pelas teclas numéricas 8,
2, 4 e 6 do teclado numérico.
Observe que as substituições indicadas usando os elementos remap
se aplicam apenas às entradas que usam a atribuição padrão do MAME para
o tipo do controle. Ou seja, elas só se aplicam às atribuições padrão
para os tipos de controle definidos no menu
Entradas (gerais).
Eles não se aplicam às atribuições padrão das entradas definidas nas
definições das portas de E/S do driver/dispositivo (usando a macro
PORT_CODE
).
O MAME aplica os elementos remap
encontrados dentro de qualquer
elemento system
que seja aplicável.
Substituindo os controles predefinidos pelo tipo da entrada¶
Utilize os elementos port
com os atributos type
sem os atributos
tag
para substituir as definições de entrada padrão do host para os
controles.
<input>
<port type="UI_MENU">
<newseq type="standard">KEYCODE_TAB OR KEYCODE_1 KEYCODE_5</newseq>
</port>
<port type="UI_CANCEL">
<newseq type="standard">KEYCODE_ESC OR KEYCODE_2 KEYCODE_6</newseq>
</port>
<port type="P1_BUTTON1">
<newseq type="standard">KEYCODE_C OR JOYCODE_1_BUTTON1</newseq>
</port>
<port type="P1_BUTTON2">
<newseq type="standard">KEYCODE_LSHIFT OR JOYCODE_1_BUTTON2</newseq>
</port>
<port type="P1_BUTTON3">
<newseq type="standard">KEYCODE_Z OR JOYCODE_1_BUTTON3</newseq>
</port>
<port type="P1_BUTTON4">
<newseq type="standard">KEYCODE_X OR JOYCODE_1_BUTTON4</newseq>
</port>
</input>
A configuração acima define as seguintes atribuições das entradas:
Mostra/esconde o menu (Interface do usuário).
Tecla Tab, ou pressionando as teclas 1 e 2 simultaneamente.
UI Cancel (Interface do usuário).
Tecla ESC, ou pressionando as teclas 2 e 6 simultaneamente.
P1 Button 1 (Controles do jogador 1).
Tecla C, ou o botão 1 do joystick 1.
P1 Button 2 (Controles do jogador 1).
Tecla Shift esquerda, ou o botão 2 do joystick 1.
P1 Button 3 (Controles do jogador 1).
Tecla Z, ou o botão 3 do joystick 1.
P1 Button 4 (Controles do jogador 1).
Tecla X, ou o botão 4 do joystick 1.
Repare que isto será aplicado somente às entradas do controle do MAME.
Ou seja, os elementos port
sem os atributos tag
substituem
apenas as atribuições predefinidas no menu "Entradas (gerais)". Eles
não substituem as atribuições das entradas definidas nas definições
das portas de E/S do driver/dispositivo (usando a macro PORT_CODE
).
O MAME aplica os elementos port
sem os atributos tag
encontrados
dentro de qualquer elemento system
.
Substituindo a configuração predefinida para uma tecla específica¶
Utilize os elementos port
com os atributos tag
, type
,
mask
e defvalue
para substituir os valores predefinidos para
controles específicos. Estes elementos port
devem ser definidos
dentro dos elementos system
para que sejam apenas aplicados em
determinados sistemas ou o código-fonte do driver (eles não devem
existir dentro dos elementos system
onde o atributo name
tenha
o valor default
). A atribuição da entrada predefinida do host pode
ser substituída assim como também é possível alternar as configurações
dos controles digitais.
Os atributos tag
, type
, mask
e o defvalue
são usados
para identificar a entrada em questão. É possível encontrar os valores
usados para uma determinada entrada do host alternando a sua atribuição,
encerrando o MAME e verificando os valores no arquivo de configuração do
sistema. Observe que não há garantias que estes valores sejam os mesmos
e podem variar entre as versões do MAME.
Abaixo um exemplo que substitui as entradas predefinidas para o 280-ZZZAP:
<system name="280zzzap">
<input>
<port tag=":IN0" type="P1_BUTTON2" mask="16" defvalue="0" toggle="no" />
<port tag=":IN1" type="P1_PADDLE" mask="255" defvalue="127">
<newseq type="increment">KEYCODE_K</newseq>
<newseq type="decrement">KEYCODE_J</newseq>
</port>
</input>
</system>
Esta configuração define as entradas para o esterçamento esquerdo e direito para as teclas K e J respectivamente, desativando também as configurações do câmbio para a entrada relacionada com a troca de marchas.
Atribuindo números aos dispositivos de entrada¶
Use os elementos mapdevice
em conjunto com os atributos device
e controller
para atribuir números fixos aos dispositivos de
entrada, caso contrário, eles são alterados, consulte o capítulo
ID fixo para os controles para obter mais informações. Observe que para que esta
configuração funcione como esperado, é preciso que o dispositivo já
esteja conectando quando o MAME for iniciado.
Defina o atributo device
para a ID do dispositivo de entrada e
defina o atributo controller
para o token do dispositivo desejado
(dispositivo, tipo e número).
Aqui está um exemplo ao enumarar duas pistolas de luz e dois controles de jogo do tipo XInput:
<system name="default">
<input>
<mapdevice device="VID_D209&PID_1601" controller="GUNCODE_1" />
<mapdevice device="VID_D209&PID_1602" controller="GUNCODE_2" />
<mapdevice device="XInput Player 1" controller="JOYCODE_1" />
<mapdevice device="XInput Player 2" controller="JOYCODE_2" />
</input>
</system>
O MAME apenas aplica os elementos mapdevice
que forem encontrados
dentro de qualquer elemento system
quando for possível. Visando
evitar confusão, é mais simples colocar o elemento system
para que
se aplique a todos os sistemas (o atributo name
definido como
default
) logo na primeira linha do arquivo e fazer seu uso para
atribuir os valores numéricos na entrada dos dispositivos.
Definição das opções de entrada do ponteiro¶
Um elemento pointer_input
pode conter elementos target
para
definir as opções de entrada do ponteiro para cada tela ou janela final.
Cada elemento target
deve ter um atributo index
que contém o
índice da tela com base em zero à qual se aplica.
Cada elemento target
pode ter um atributo activity_timeout
para
definir o tempo de inatividade do ponteiro do mouse quando este deixar
de se movimentar ou não tiver os botões pressionados. O valor é
especificado em segundos e deve estar no intervalo entre
0,1 a 10 segundos.
Cada elemento target
pode ter um elemento hide_inactive
para
definir se os ponteiros considerados inativos poderão ser ocultados. Se
o valor for 0
(zero), os ponteiros inativos não serão ocultados e se
for 1
, os ponteiros inativos poderão ser ocultados, mas as
visualizações de layout ainda poderão especificar que os ponteiros
inativos não devem ser ocultados.
Veja a seguir um exemplo que demonstra a utilização deste recurso:
<system name="default">
<pointer_input>
<target index="0" activity_timeout="1.5" />
</pointer_input>
</system>
<system name="intellec4.cpp">
<pointer_input>
<target index="0" hide_inactive="0" />
</pointer_input>
</system>
Em todos os sistemas, os ponteiros sobre a primeira tela ou janela final
serão considerados inativos após não se moverem por 1.5 segundos ou
se nenhum botão for pressionado. Para os sistemas definidos em
intellec4.cpp
, os ponteiros inativos sobre a primeira janela não
serão ocultados.