Main Restorations Software Audio/Jukebox/MP3 Everything Else Buy/Sell/Trade
Project Announcements Monitor/Video GroovyMAME Merit/JVL Touchscreen Meet Up Retail Vendors
Driving & Racing Woodworking Software Support Forums Consoles Project Arcade Reviews
Automated Projects Artwork Frontend Support Forums Pinball Forum Discussion Old Boards
Raspberry Pi & Dev Board controls.dat Linux Miscellaneous Arcade Wiki Discussion Old Archives
Lightguns Arcade1Up Try the site in https mode Site News

Unread posts | New Replies | Recent posts | Rules | Chatroom | Wiki | File Repository | RSS | Submit news

  

Author Topic: Speech  (Read 5753 times)

0 Members and 1 Guest are viewing this topic.

MikeQ

  • Guest
  • Trade Count: (0)
Speech
« on: March 06, 2006, 09:44:48 pm »
I know not many people were interested in this but I wanted it for my cabinet.   I'll probably get flack for working on it.  Oh well.

This is the feature where by pushing the pause button (how it is setup now.  Doesn't have to stay this way).  The cabinet will speak the controls that a game uses while flashing each button/control as it says the name.  I'm using controls.dat to get the true button names (thrust, fire), etc...  I find it to work well when it does work.  However, it doesn't work as well as I would like.

It seems to be missing a lot of games.   It is missing Player 2 control set on a number of games.  It is missing Pacman for gods sake!!!  It also doesn't include games with multiple revs.  like Joust.  It has Joust and Joust 2 but not Jostr and Josutwr.  It seems too lacking to make this feature available.  It will be annoying when many of the games don't work.

Anyone know how the other apps that use this file work around these issues?
« Last Edit: March 06, 2006, 10:59:55 pm by MikeQ »

mccoy178

  • It's hard to work with a straight jacket on
  • Trade Count: (+9)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 3127
  • Last login:September 03, 2021, 10:23:42 am
  • Go Bucks!
Re: Speech
« Reply #1 on: March 06, 2006, 10:57:26 pm »
Sounds like a question for Sirp and Howard.

mahuti

  • Wiki Master
  • Trade Count: (0)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 2757
  • Last login:March 02, 2022, 09:51:19 pm
  • I dare anything! I am Skeletor!
Re: Speech
« Reply #2 on: March 06, 2006, 11:43:00 pm »
I think the assumption is that anything using it, will carry down the information from the parent rom set. Pacman, AKA puckman. Jostr AKA Joust.

Additionally, if it is missing Player 2 control set... the original game may not have had an additional player 2 control set, regardless of the way it is set up in MAME. Again, SirP and HC could illuminate this further.
Raspberry Pi, AttractMode, and Skeletor enthusiast.

SirPoonga

  • Puck'em Up
  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 8183
  • Last login:April 12, 2023, 09:22:35 pm
  • The Bears Still Suck!
Re: Speech
« Reply #3 on: March 07, 2006, 12:19:52 am »
Yes, we only have parent info in there, no need to to store useless information.  As noted, pacman's parent is puckman.

Also, you use a combination of flags to determine how to label the controls.  I think all this information is in the FE dev package.  If not I willtry and update it.

For example, we'll take a game I own.
Double Dragon II - The Revenge (US) - ddragn2u

Controls aren't there (make sure you check as we will put clones in there that don't have the same controls as parents), well then.  Look at the listxml's output (FE Dev) and determine cloneof value.  It's ddragon2.  Here's the controls.ini entry for that.  XML format contains same data.

Code: [Select]
[ddragon2]
gamename=Double Dragon II - The Revenge (World)
numPlayers=2
alternating=0
mirrored=1
tilt=0
cocktail=1
usesService=0
miscDetails=
P1NumButtons=3
P1Controls=8-way Joystick+joy8way
P1_BUTTON1=Attack Left
P1_BUTTON2=Jump
P1_BUTTON3=Attack Right
P1_JOYSTICK_RIGHT=Right
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_UP=Up

You need to look at these values
numPlayers=2
alternating=0
mirrored=1

2 players, simutaneous, mirrored controls.  mirrored controls means player 2 has same labels as player 1 (again, keeping file sizes down, no need to store useless info).
A combination of those (and cocktail) can help you determine how the controls are used in the game and how to assign the labels.

Yes, double dragon 2 does have a cocktail switch, though I have no idea what it does as the book I have is the schematics and part numbers book, not operators manual.

After that you look at
P1NumButtons=3
P1Controls=8-way Joystick+joy8way
This will tell you how many button labels to look for (with the P1_ prefix).  And what controls it uses.  You determine the label key using one of the other files in the FE dev package (pie delimited files, direct dumps of a couple of tables).
Yeah, technically both the control description and constant don;t need to be there, but it simplifies things for some developers.
You can either look up 8-way Joystick which will return:
8-way Joystick|joy8way
Then look up joy8way in the other text file to get
joy8way|JOYSTICK_UP|Up|
joy8way|JOYSTICK_DOWN|Down|
joy8way|JOYSTICK_LEFT|Left|
joy8way|JOYSTICK_RIGHT|Right|

This will tell you label suffix (which is the mame contant used in the ctrlr files) along with default label  (used for the submission wizard on fe.donkeyfly.com).  The last field I forgot offhand, it was obsoleted.  Kept there for backwards compatibility.

Then you can compare with your controller files and create something like johnny5 to display, accurately, the controls on your control panel, along with if you need to rotate your panel, what modules, whatever ever weird control setup you have.

An example of a game that doesn't use mirrored controls.

Code: [Select]
[wseries]
gamename=World Series: The Season
numPlayers=2
alternating=0
mirrored=0
tilt=0
cocktail=0
usesService=0
miscDetails=... Long description ...
P1NumButtons=3
P1Controls=Batter Control+stick
P1_BUTTON1=Go Back
P1_BUTTON2=Xtra Base
P1_BUTTON3=Aim
P1_AD_STICK_Y=Up
P1_AD_STICK_X_EXT=Swing
P1_AD_STICK_X=Swing
P1_AD_STICK_Y_EXT=Down
P2NumButtons=0
P2Controls=Baseball Pitcher+stick
P2_AD_STICK_X=Left
P2_AD_STICK_X_EXT=Right
P2_AD_STICK_Y=Pitch
P2_AD_STICK_Y_EXT=Windup
« Last Edit: March 07, 2006, 12:34:59 am by SirPoonga »

SirPoonga

  • Puck'em Up
  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 8183
  • Last login:April 12, 2023, 09:22:35 pm
  • The Bears Still Suck!
Re: Speech
« Reply #4 on: March 07, 2006, 12:22:54 am »
A great example of why we don't store clones (unless the clones have different controls which is something I have to get working on).

http://fe.donkeyfly.com/controls/report.php?theGame=sf2

Why store info on each version when they are the same :)

MikeQ

  • Guest
  • Trade Count: (0)
Re: Speech
« Reply #5 on: March 07, 2006, 08:40:25 am »
So how do I know that Pacman's parent is pucman?

mahuti

  • Wiki Master
  • Trade Count: (0)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 2757
  • Last login:March 02, 2022, 09:51:19 pm
  • I dare anything! I am Skeletor!
Re: Speech
« Reply #6 on: March 07, 2006, 09:23:56 am »
Mame's list xml is formatted like so;

<game name="pacman" sourcefile="pacman.c" cloneof="puckman" romof="puckman"

You have to read that item out of the listxml.
Raspberry Pi, AttractMode, and Skeletor enthusiast.

Buddabing

  • Wiki Master
  • Trade Count: (0)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 1845
  • Last login:February 12, 2015, 02:51:45 pm
  • I'm a llama!
Re: Speech
« Reply #7 on: March 07, 2006, 10:03:46 am »
So how do I know that Pacman's parent is pucman?

You can find out the parent game within MAME as follows:

Code: [Select]
if (Machine->gamedrv->clone_of==NULL)
{
   /* parent */
   printf("game %s is not a clone\n",Machine->gamedrv->name);
}
else
{
   printf("game %s is a clone of %s\n", Machine->gamedrv->name,
   Machine->gamedrv->clone_of->name);
}



Of course, this only works once the Machine structure is fully initialized.



I have changed my nickname to "Cakemeister". Please do not PM the Buddabing account because I do not check it anymore.

Please read the wiki!

MikeQ

  • Guest
  • Trade Count: (0)
Re: Speech
« Reply #8 on: March 07, 2006, 01:30:26 pm »
Yes, we only have parent info in there, no need to to store useless information.  As noted, pacman's parent is puckman.

Also, you use a combination of flags to determine how to label the controls.  I think all this information is in the FE dev package.  If not I willtry and update it.

For example, we'll take a game I own.
Double Dragon II - The Revenge (US) - ddragn2u

Controls aren't there (make sure you check as we will put clones in there that don't have the same controls as parents), well then.  Look at the listxml's output (FE Dev) and determine cloneof value.  It's ddragon2.  Here's the controls.ini entry for that.  XML format contains same data.

Code: [Select]
[ddragon2]
gamename=Double Dragon II - The Revenge (World)
numPlayers=2
alternating=0
mirrored=1
tilt=0
cocktail=1
usesService=0
miscDetails=
P1NumButtons=3
P1Controls=8-way Joystick+joy8way
P1_BUTTON1=Attack Left
P1_BUTTON2=Jump
P1_BUTTON3=Attack Right
P1_JOYSTICK_RIGHT=Right
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_UP=Up

You need to look at these values
numPlayers=2
alternating=0
mirrored=1

2 players, simutaneous, mirrored controls.  mirrored controls means player 2 has same labels as player 1 (again, keeping file sizes down, no need to store useless info).
A combination of those (and cocktail) can help you determine how the controls are used in the game and how to assign the labels.

Yes, double dragon 2 does have a cocktail switch, though I have no idea what it does as the book I have is the schematics and part numbers book, not operators manual.

After that you look at
P1NumButtons=3
P1Controls=8-way Joystick+joy8way
This will tell you how many button labels to look for (with the P1_ prefix).  And what controls it uses.  You determine the label key using one of the other files in the FE dev package (pie delimited files, direct dumps of a couple of tables).
Yeah, technically both the control description and constant don;t need to be there, but it simplifies things for some developers.
You can either look up 8-way Joystick which will return:
8-way Joystick|joy8way
Then look up joy8way in the other text file to get
joy8way|JOYSTICK_UP|Up|
joy8way|JOYSTICK_DOWN|Down|
joy8way|JOYSTICK_LEFT|Left|
joy8way|JOYSTICK_RIGHT|Right|

This will tell you label suffix (which is the mame contant used in the ctrlr files) along with default label  (used for the submission wizard on fe.donkeyfly.com).  The last field I forgot offhand, it was obsoleted.  Kept there for backwards compatibility.

Then you can compare with your controller files and create something like johnny5 to display, accurately, the controls on your control panel, along with if you need to rotate your panel, what modules, whatever ever weird control setup you have.

An example of a game that doesn't use mirrored controls.

Code: [Select]
[wseries]
gamename=World Series: The Season
numPlayers=2
alternating=0
mirrored=0
tilt=0
cocktail=0
usesService=0
miscDetails=... Long description ...
P1NumButtons=3
P1Controls=Batter Control+stick
P1_BUTTON1=Go Back
P1_BUTTON2=Xtra Base
P1_BUTTON3=Aim
P1_AD_STICK_Y=Up
P1_AD_STICK_X_EXT=Swing
P1_AD_STICK_X=Swing
P1_AD_STICK_Y_EXT=Down
P2NumButtons=0
P2Controls=Baseball Pitcher+stick
P2_AD_STICK_X=Left
P2_AD_STICK_X_EXT=Right
P2_AD_STICK_Y=Pitch
P2_AD_STICK_Y_EXT=Windup

Ok.  Cool.  This solves many of the problems I ran into. 

SirPoonga

  • Puck'em Up
  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 8183
  • Last login:April 12, 2023, 09:22:35 pm
  • The Bears Still Suck!
Re: Speech
« Reply #9 on: March 07, 2006, 01:46:25 pm »
I skimmed over the readme in the fe dev file, it seems to have most of this info.

I just wanted to restate something.  usesService indicated if the game uses the SERVICE constants.  See playchoice 10.

Code: [Select]
[playch10]
gamename=PlayChoice-10
numPlayers=2
alternating=0
mirrored=0
tilt=0
cocktail=0
usesService=1
miscDetails=The playchoice 10 system is a pay-per-play system based on the original nes console and plays the same titles.  Instead of purchasing lives, you purchase time on the machine.  The machine can hold 10 games at once and you switch using the game menu on the secondary monitor.   
P1NumButtons=2
P1Controls=8-way Joystick+joy8way|Lightgun+lightgun
P1_BUTTON2=B
P1_BUTTON1=A
P1_JOYSTICK_RIGHT=Right
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_UP=Up
P1_LIGHTGUN_X_EXT=Right
P1_LIGHTGUN_X=Left
P1_LIGHTGUN_Y=Up
P1_LIGHTGUN_Y_EXT=Down
P2NumButtons=2
P2Controls=8-way Joystick+joy8way
P2_BUTTON1=A
P2_BUTTON2=B
P1_JOYSTICK_UP=Up
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_RIGHT=Right
SERVICE1=Service Coin
SERVICE2=Channel Select
SERVICE3=Enter
SERVICE4=Reset

MikeQ

  • Guest
  • Trade Count: (0)
Re: Speech
« Reply #10 on: March 07, 2006, 04:38:48 pm »
I skimmed over the readme in the fe dev file, it seems to have most of this info.

I just wanted to restate something.  usesService indicated if the game uses the SERVICE constants.  See playchoice 10.

Code: [Select]
[playch10]
gamename=PlayChoice-10
numPlayers=2
alternating=0
mirrored=0
tilt=0
cocktail=0
usesService=1
miscDetails=The playchoice 10 system is a pay-per-play system based on the original nes console and plays the same titles.  Instead of purchasing lives, you purchase time on the machine.  The machine can hold 10 games at once and you switch using the game menu on the secondary monitor.   
P1NumButtons=2
P1Controls=8-way Joystick+joy8way|Lightgun+lightgun
P1_BUTTON2=B
P1_BUTTON1=A
P1_JOYSTICK_RIGHT=Right
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_UP=Up
P1_LIGHTGUN_X_EXT=Right
P1_LIGHTGUN_X=Left
P1_LIGHTGUN_Y=Up
P1_LIGHTGUN_Y_EXT=Down
P2NumButtons=2
P2Controls=8-way Joystick+joy8way
P2_BUTTON1=A
P2_BUTTON2=B
P1_JOYSTICK_UP=Up
P1_JOYSTICK_DOWN=Down
P1_JOYSTICK_LEFT=Left
P1_JOYSTICK_RIGHT=Right
SERVICE1=Service Coin
SERVICE2=Channel Select
SERVICE3=Enter
SERVICE4=Reset


I have to admit I rarely read directions first.  I only read them after I've exhausted all other approaches.   ;D