1 /**********************************************************
2  * mame2003-plus control description data stuctures
3  *
4  * Originally dervied from
5  * controls.dat Version=0.141.1, Time=2011-01-05 18:17:26, Generated by=SirPoonga
6  *********************************************************/
7 
8  /* By default we assume that multiplayer games use the same button names for the different
9   * players, although there are exceptions. The approach is to use case statements with the
10   * highest player numbers first so that the Player 1 labels can serve as default.
11   */
12 
13 #include "controls.h"
14 #include "inptport.h"
15 #include "mame.h"
16 
17 /***********************************************************
18   PRIVATE HELPER FUNCTIONS
19  ***********************************************************/
20 
21 static const char *joy2way_labels(int type);
22 static const char *joy4way_labels(int type);
23 
24 /* joy2way_labels returns only generic "Left" and "Right"
25  * strings for 2-way joysticks that have no game-specific
26  * control panel labels.
27 */
joy2way_labels(int type)28 static const char *joy2way_labels(int type)
29 {
30   switch(type)
31   {
32     case IPT_JOYSTICK_LEFT:  return "Left";
33     case IPT_JOYSTICK_RIGHT: return "Right";
34   } /* end of switch */
35 
36   return "";
37 }
38 
39 /* joy4way_labels returns only generic "Left", "Right",
40  * "Up", and "Down" strings for 4-way and 8-way joysticks that have
41  * no game-specific control panel labels. An example of game-
42  * specific 8-way joystick labels is Street Fighter 2, which uses
43  * "Crouch" instead of "Down" and "Jump" instead of "Up" and
44  * and therefore is not suitable for the generic function.
45 */
joy4way_labels(int type)46 static const char *joy4way_labels(int type)
47 {
48   switch(type)
49   {
50     case IPT_JOYSTICK_UP:    return "Up";
51     case IPT_JOYSTICK_DOWN:  return "Down";
52     case IPT_JOYSTICK_LEFT:  return "Left";
53     case IPT_JOYSTICK_RIGHT: return "Right";
54   } /* end of switch */
55 
56   return "";
57 }
58 
59 /***********************************************************
60   CONTROLS METADATA
61  ***********************************************************/
62 
63 const struct ControlInfo generic_ctrl =
64 {
65   false, /* 45_degree_rotation for joystick(s) */
66   false, /* alternating_controls */
67   true, /* mirrored_controls */
68   "",    /* control_details */
69   &generic_ctrl_label /* button labeler function */
70 };
71 
72 const struct ControlInfo a88games_ctrl =
73 {
74   false, /* 45_degree_rotation for joystick(s) */
75   false, /* alternating_controls */
76   true, /* mirrored_controls */
77   "This is a 4 player team type game where 2 players compete each time.", /* control_details */
78   &a88games_get_ctrl_name
79 };
80 
a88games_get_ctrl_name(int type)81 const char *a88games_get_ctrl_name(int type)
82 {
83   switch(type)
84   {
85     case IPT_BUTTON1: return BTN1 "Run";
86     case IPT_BUTTON2: return BTN2 "Jump";
87     case IPT_BUTTON3: return BTN3 "Run";
88   } /* end of switch */
89 
90   return "";
91 }
92 
93 const struct ControlInfo a005_ctrl =
94 {
95   false, /* 45_degree_rotation for joystick(s) */
96   true, /* alternating_controls */
97   true, /* mirrored_controls */
98   "", /* control_details */
99   &a005_get_ctrl_name
100 };
101 
a005_get_ctrl_name(int type)102 const char *a005_get_ctrl_name(int type)
103 {
104   switch(type)
105   {
106     case IPT_BUTTON1: return BTN1 "Fire";
107   } /* end of switch */
108 
109   return joy4way_labels(type);
110 }
111 
112 const struct ControlInfo a10yardj_ctrl =
113 {
114   false, /* 45_degree_rotation for joystick(s) */
115   true, /* alternating_controls */
116   true, /* mirrored_controls */
117   "", /* control_details */
118   &a10yardj_get_ctrl_name
119 };
120 
a10yardj_get_ctrl_name(int type)121 const char *a10yardj_get_ctrl_name(int type)
122 {
123   switch(type)
124   {
125     case IPT_BUTTON1: return BTN1 "Pass / Hike";
126     case IPT_BUTTON2: return BTN2 "Lateral";
127   } /* end of switch */
128 
129   return joy4way_labels(type);
130 }
131 
132 const struct ControlInfo gtmr_ctrl =
133 {
134   false, /* 45_degree_rotation for joystick(s) */
135   true, /* alternating_controls */
136   true, /* mirrored_controls */
137   "This game has several options regarding the control type. It has an optional brake pedal/button as well as the option to play the game with either a 270 wheel or an 8way joystick. The controls shown here are the ones used on the dedicated model. Notice the lack of the brake pedal. It seems that the brake pedal was used in conversion kits as the dedicated cabinet didn't have one.", /* control_details */
138   &gtmr_get_ctrl_name
139 };
140 
gtmr_get_ctrl_name(int type)141 const char *gtmr_get_ctrl_name(int type)
142 {
143   switch(type)
144   {
145     case IPT_BUTTON1: return BTN1 "Accelerate";
146     case IPT_PADDLE: return "Left";
147     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
148   } /* end of switch */
149 
150   return "";
151 }
152 
153 const struct ControlInfo a1941_ctrl =
154 {
155   false, /* 45_degree_rotation for joystick(s) */
156   false, /* alternating_controls */
157   true, /* mirrored_controls */
158   "", /* control_details */
159   &a1941_get_ctrl_name
160 };
161 
a1941_get_ctrl_name(int type)162 const char *a1941_get_ctrl_name(int type)
163 {
164   switch(type)
165   {
166     case IPT_BUTTON1: return BTN1 "Fire";
167     case IPT_BUTTON2: return BTN2 "Loop";
168   } /* end of switch */
169 
170   return joy4way_labels(type);
171 }
172 
173 const struct ControlInfo a1942_ctrl =
174 {
175   false, /* 45_degree_rotation for joystick(s) */
176   true, /* alternating_controls */
177   true, /* mirrored_controls */
178   "", /* control_details */
179   &a1942_get_ctrl_name
180 };
181 
a1942_get_ctrl_name(int type)182 const char *a1942_get_ctrl_name(int type)
183 {
184   switch(type)
185   {
186     case IPT_BUTTON1: return BTN1 "Fire";
187     case IPT_BUTTON2: return BTN2 "Loop";
188   } /* end of switch */
189 
190   return joy4way_labels(type);
191 }
192 
193 const struct ControlInfo a1943kai_ctrl =
194 {
195   false, /* 45_degree_rotation for joystick(s) */
196   false, /* alternating_controls */
197   true, /* mirrored_controls */
198   "A - Fire, B - Bomb Pressing both buttons will allow the plane to loop", /* control_details */
199   &a1943kai_get_ctrl_name
200 };
201 
a1943kai_get_ctrl_name(int type)202 const char *a1943kai_get_ctrl_name(int type)
203 {
204   switch(type)
205   {
206     case IPT_BUTTON1: return BTN1 "A";
207     case IPT_BUTTON2: return BTN2 "B";
208   } /* end of switch */
209 
210   return joy4way_labels(type);
211 }
212 
213 const struct ControlInfo a1943_ctrl =
214 {
215   false, /* 45_degree_rotation for joystick(s) */
216   false, /* alternating_controls */
217   true, /* mirrored_controls */
218   "Press both buttons together to cause the plane to loop.", /* control_details */
219   &a1943_get_ctrl_name
220 };
221 
a1943_get_ctrl_name(int type)222 const char *a1943_get_ctrl_name(int type)
223 {
224   switch(type)
225   {
226     case IPT_BUTTON1: return BTN1 "Fire";
227     case IPT_BUTTON2: return BTN2 "Special";
228   } /* end of switch */
229 
230   return joy4way_labels(type);
231 }
232 
233 const struct ControlInfo a1944_ctrl =
234 {
235   false, /* 45_degree_rotation for joystick(s) */
236   false, /* alternating_controls */
237   true, /* mirrored_controls */
238   "", /* control_details */
239   &a1944_get_ctrl_name
240 };
241 
a1944_get_ctrl_name(int type)242 const char *a1944_get_ctrl_name(int type)
243 {
244   switch(type)
245   {
246     case IPT_BUTTON1: return BTN1 "Shoot";
247     case IPT_BUTTON2: return BTN2 "Bomb";
248   } /* end of switch */
249 
250   return joy4way_labels(type);
251 }
252 
253 const struct ControlInfo a19xx_ctrl =
254 {
255   false, /* 45_degree_rotation for joystick(s) */
256   false, /* alternating_controls */
257   true, /* mirrored_controls */
258   "If you hold down the shoot button, your weapon powers up and gives you a homing missle in addition to you normal weapon.", /* control_details */
259   &a19xx_get_ctrl_name
260 };
261 
a19xx_get_ctrl_name(int type)262 const char *a19xx_get_ctrl_name(int type)
263 {
264   switch(type)
265   {
266     case IPT_BUTTON1: return BTN1 "Shoot";
267     case IPT_BUTTON2: return BTN2 "Bomb";
268   } /* end of switch */
269 
270   return joy4way_labels(type);
271 }
272 
273 const struct ControlInfo openice_ctrl =
274 {
275   false, /* 45_degree_rotation for joystick(s) */
276   false, /* alternating_controls */
277   true, /* mirrored_controls */
278   "", /* control_details */
279   &openice_get_ctrl_name
280 };
281 
openice_get_ctrl_name(int type)282 const char *openice_get_ctrl_name(int type)
283 {
284   switch(type)
285   {
286     case IPT_BUTTON1: return BTN1 "Turbo";
287     case IPT_BUTTON2: return BTN2 "Shoot / Block";
288     case IPT_BUTTON3: return BTN3 "Pass / Steal";
289   } /* end of switch */
290 
291   return joy4way_labels(type);
292 }
293 
294 const struct ControlInfo a39in1_ctrl =
295 {
296   false, /* 45_degree_rotation for joystick(s) */
297   false, /* alternating_controls */
298   true, /* mirrored_controls */
299   "This is a bootleg pcb that contains many classic vertical arcade games. Because of this the 'alternating play' flag is invalid and will vary from game to game. The game kit is a pcb only and thus lacks any official labels. The manual for this version lists the buttons as 1P-S1 thru 2P-S3. However, these are simply the jamma pinouts. Every control panel overlay manufacturer that has since released a overlay for this unit has either left the labels blank or labeled them A, B and C respectively.", /* control_details */
300   &a39in1_get_ctrl_name
301 };
302 
a39in1_get_ctrl_name(int type)303 const char *a39in1_get_ctrl_name(int type)
304 {
305   switch(type)
306   {
307     case IPT_BUTTON1: return BTN1 "A";
308     case IPT_BUTTON2: return BTN2 "B";
309     case IPT_BUTTON3: return BTN3 "C";
310   } /* end of switch */
311 
312   return joy4way_labels(type);
313 }
314 
315 const struct ControlInfo a4enraya_ctrl =
316 {
317   false, /* 45_degree_rotation for joystick(s) */
318   false, /* alternating_controls */
319   true, /* mirrored_controls */
320   "", /* control_details */
321   &a4enraya_get_ctrl_name
322 };
323 
a4enraya_get_ctrl_name(int type)324 const char *a4enraya_get_ctrl_name(int type)
325 {
326   switch(type)
327   {
328     case IPT_BUTTON1: return BTN1 "Down";
329     case IPT_BUTTON2: return BTN2 "Shot";
330   } /* end of switch */
331 
332   return joy2way_labels(type);
333 }
334 
335 const struct ControlInfo a4in1_ctrl =
336 {
337   false, /* 45_degree_rotation for joystick(s) */
338   true, /* alternating_controls */
339   true, /* mirrored_controls */
340   "", /* control_details */
341   &a4in1_get_ctrl_name
342 };
343 
a4in1_get_ctrl_name(int type)344 const char *a4in1_get_ctrl_name(int type)
345 {
346   switch(type)
347   {
348     case IPT_BUTTON1: return BTN1 "Fire";
349   } /* end of switch */
350 
351   return joy4way_labels(type);
352 }
353 
354 const struct ControlInfo a4dwarrio_ctrl =
355 {
356   false, /* 45_degree_rotation for joystick(s) */
357   true, /* alternating_controls */
358   true, /* mirrored_controls */
359   "", /* control_details */
360   &a4dwarrio_get_ctrl_name
361 };
362 
a4dwarrio_get_ctrl_name(int type)363 const char *a4dwarrio_get_ctrl_name(int type)
364 {
365   switch(type)
366   {
367     case IPT_BUTTON1: return BTN1 "Fire";
368     case IPT_BUTTON2: return BTN2 "Bomb";
369   } /* end of switch */
370 
371   return joy4way_labels(type);
372 }
373 
374 const struct ControlInfo a64street_ctrl =
375 {
376   false, /* 45_degree_rotation for joystick(s) */
377   false, /* alternating_controls */
378   true, /* mirrored_controls */
379   "Pressing both buttons will do a special attack", /* control_details */
380   &a64street_get_ctrl_name
381 };
382 
a64street_get_ctrl_name(int type)383 const char *a64street_get_ctrl_name(int type)
384 {
385   switch(type)
386   {
387     case IPT_BUTTON1: return BTN1 "Attack";
388     case IPT_BUTTON2: return BTN2 "Jump";
389   } /* end of switch */
390 
391   return joy4way_labels(type);
392 }
393 
394 const struct ControlInfo a720_ctrl =
395 {
396   false, /* 45_degree_rotation for joystick(s) */
397   true, /* alternating_controls */
398   true, /* mirrored_controls */
399   "OTHER: The 720 controller is unique. It is an optical sensed spinner with a joystick handle. The controller had two encoder wheels on the same axis /* control_details */ one was like a normal spinner encode wheel with 72 spokes & 72 gaps, the other encoder wheel had only two gaps spaced as far as alternating gaps on the normal encoder wheel (ie: instead of gap, spoke, gap, spoke, gap like on the normal wheel, the middle gap was part of the one fat spoke seperating the two gaps on the ends). The normal encoder wheel turns the character in the game, the other encoder wheel is to help keep the stick calibrated with the screen, on each rotation of the stick. Mame only emulates the normal wheel as a dial type input; the other is ignored. The character in the game can face 16 directions: the 4 cardinal directions, the 4 normal diagonals, and the 8 directions inbetween the cardinals and the diagonals. The Kick button makes the character skate faster (in case that's not clear). Both buttons are mirrored on opposite sides of the 'joystick' spinner, but like most mirror cases, they are wired as a total of only two buttons.", /* control_details */
400   &a720_get_ctrl_name
401 };
402 
a720_get_ctrl_name(int type)403 const char *a720_get_ctrl_name(int type)
404 {
405   switch(type)
406   {
407     case IPT_BUTTON1: return BTN1 "Kick";
408     case IPT_BUTTON2: return BTN2 "Jump";
409     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
410     case IPT_DIAL: return "Rotate Left";
411   } /* end of switch */
412 
413   return "";
414 }
415 
416 
417 const struct ControlInfo ace_ctrl =
418 {
419   false, /* 45_degree_rotation for joystick(s) */
420   false, /* alternating_controls */
421   true, /* mirrored_controls */
422   "The 2-way horizontal stick is a trigger stick, pushing left rotates the plane anticlockwise, pushing right rotates the plane clockwise", /* control_details */
423   &ace_get_ctrl_name
424 };
425 
ace_get_ctrl_name(int type)426 const char *ace_get_ctrl_name(int type)
427 {
428   switch(type)
429   {
430     case IPT_BUTTON1: return BTN1 "Fire";
431     case IPT_JOYSTICK_LEFT: return "Left";
432     case IPT_JOYSTICK_RIGHT: return "Right";
433     case IPT_JOYSTICK_UP: return "Speed Up";
434     case IPT_JOYSTICK_DOWN: return "Slow Down";
435   } /* end of switch */
436 
437   return "";
438 }
439 
440 const struct ControlInfo acrobatm_ctrl =
441 {
442   false, /* 45_degree_rotation for joystick(s) */
443   false, /* alternating_controls */
444   true, /* mirrored_controls */
445   "Hold down Fire button to increase power", /* control_details */
446   &acrobatm_get_ctrl_name
447 };
448 
acrobatm_get_ctrl_name(int type)449 const char *acrobatm_get_ctrl_name(int type)
450 {
451   switch(type)
452   {
453     case IPT_BUTTON1: return BTN1 "Fire";
454     case IPT_BUTTON2: return BTN2 "Bomb";
455   } /* end of switch */
456 
457   return joy4way_labels(type);
458 }
459 
460 const struct ControlInfo actfancr_ctrl =
461 {
462   false, /* 45_degree_rotation for joystick(s) */
463   true, /* alternating_controls */
464   true, /* mirrored_controls */
465   "", /* control_details */
466   &actfancr_get_ctrl_name
467 };
468 
actfancr_get_ctrl_name(int type)469 const char *actfancr_get_ctrl_name(int type)
470 {
471   switch(type)
472   {
473     case IPT_BUTTON1: return BTN1 "Fire";
474     case IPT_BUTTON2: return BTN2 "Jump";
475   } /* end of switch */
476 
477   return joy4way_labels(type);
478 }
479 
480 const struct ControlInfo hatena_ctrl =
481 {
482   false, /* 45_degree_rotation for joystick(s) */
483   false, /* alternating_controls */
484   true, /* mirrored_controls */
485   "", /* control_details */
486   &hatena_get_ctrl_name
487 };
488 
hatena_get_ctrl_name(int type)489 const char *hatena_get_ctrl_name(int type)
490 {
491   switch(type)
492   {
493     case IPT_BUTTON1: return BTN1 "1";
494     case IPT_BUTTON2: return BTN2 "2";
495     case IPT_BUTTON3: return BTN3 "3";
496     case IPT_BUTTON4: return BTN4 "4";
497   } /* end of switch */
498 
499   return "";
500 }
501 
502 const struct ControlInfo aerofgt_ctrl =
503 {
504   false, /* 45_degree_rotation for joystick(s) */
505   false, /* alternating_controls */
506   true, /* mirrored_controls */
507   "Pressing bomb button drops bomb and plane also loops. There are no labels on the CP.", /* control_details */
508   &aerofgt_get_ctrl_name
509 };
510 
aerofgt_get_ctrl_name(int type)511 const char *aerofgt_get_ctrl_name(int type)
512 {
513   switch(type)
514   {
515     case IPT_BUTTON1: return BTN1 "Fire";
516     case IPT_BUTTON2: return BTN2 "Bomb";
517   } /* end of switch */
518 
519   return joy4way_labels(type);
520 }
521 
522 const struct ControlInfo aburner2_ctrl =
523 {
524   false, /* 45_degree_rotation for joystick(s) */
525   false, /* alternating_controls */
526   true, /* mirrored_controls */
527   "The 'unknown' button is emulated in MAME but has no real purpose. As far as I can tell from the drivers, it was used for some sort of feedback in the simulation cockpits.", /* control_details */
528   &aburner2_get_ctrl_name
529 };
530 
aburner2_get_ctrl_name(int type)531 const char *aburner2_get_ctrl_name(int type)
532 {
533   switch(type)
534   {
535     case IPT_BUTTON1: return BTN1 "Fire";
536     case IPT_BUTTON2: return BTN2 "Vulcan";
537     case IPT_BUTTON3: return BTN3 "Unknown";
538     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
539     case IPT_AD_STICK_Y: return "Up";
540     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
541     case IPT_AD_STICK_X: return "Left";
542     case IPT_AD_STICK_Z: return "Slow";
543     case (IPT_AD_STICK_Z + IPT_EXTENSION): return "Fast";
544   } /* end of switch */
545 
546   return "";
547 }
548 
549 const struct ControlInfo koshien_ctrl =
550 {
551   false, /* 45_degree_rotation for joystick(s) */
552   false, /* alternating_controls */
553   true, /* mirrored_controls */
554   "A - Power-up B - Hit/Throw C - Unknown action during game", /* control_details */
555   &koshien_get_ctrl_name
556 };
557 
koshien_get_ctrl_name(int type)558 const char *koshien_get_ctrl_name(int type)
559 {
560   switch(type)
561   {
562     case IPT_BUTTON1: return BTN1 "A";
563     case IPT_BUTTON2: return BTN2 "B";
564     case IPT_BUTTON3: return BTN3 "C";
565   } /* end of switch */
566 
567   return joy4way_labels(type);
568 }
569 
570 const struct ControlInfo airbustr_ctrl =
571 {
572   false, /* 45_degree_rotation for joystick(s) */
573   false, /* alternating_controls */
574   true, /* mirrored_controls */
575   "Only 1 button on the CP but MAME has 2 mapped (both doing the same thing)", /* control_details */
576   &airbustr_get_ctrl_name
577 };
578 
airbustr_get_ctrl_name(int type)579 const char *airbustr_get_ctrl_name(int type)
580 {
581   switch(type)
582   {
583     case IPT_BUTTON1: return BTN1 "Fire";
584     case IPT_BUTTON2: return BTN2 "Fire";
585   } /* end of switch */
586 
587   return joy4way_labels(type);
588 }
589 
590 const struct ControlInfo airduel_ctrl =
591 {
592   false, /* 45_degree_rotation for joystick(s) */
593   false, /* alternating_controls */
594   true, /* mirrored_controls */
595   "Pinout shows 3 buttons (Fire1, Fire2, Fire3), the flyer shows 2 buttons, Mame has 4 buttons mapped and only 2 seem to work", /* control_details */
596   &airduel_get_ctrl_name
597 };
598 
airduel_get_ctrl_name(int type)599 const char *airduel_get_ctrl_name(int type)
600 {
601   switch(type)
602   {
603     case IPT_BUTTON1: return BTN1 "Gun";
604     case IPT_BUTTON2: return BTN2 "Guided Bomb";
605     case IPT_BUTTON3: return BTN3 "Unknown";
606     case IPT_BUTTON4: return BTN4 "Unknown";
607   } /* end of switch */
608 
609   return joy4way_labels(type);
610 }
611 
612 const struct ControlInfo airwolf_ctrl =
613 {
614   false, /* 45_degree_rotation for joystick(s) */
615   true, /* alternating_controls */
616   true, /* mirrored_controls */
617   "Button 2 acts differently based on the position on the screen. In the lower half of the screen button 2 will shoot diagonally down to the ground. In the top half it will drop a bomb", /* control_details */
618   &airwolf_get_ctrl_name
619 };
620 
airwolf_get_ctrl_name(int type)621 const char *airwolf_get_ctrl_name(int type)
622 {
623   switch(type)
624   {
625     case IPT_BUTTON1: return BTN1 "Fire";
626     case IPT_BUTTON2: return BTN2 "Bomb";
627   } /* end of switch */
628 
629   return joy4way_labels(type);
630 }
631 
632 const struct ControlInfo ajax_ctrl =
633 {
634   false, /* 45_degree_rotation for joystick(s) */
635   true, /* alternating_controls */
636   true, /* mirrored_controls */
637   "", /* control_details */
638   &ajax_get_ctrl_name
639 };
640 
ajax_get_ctrl_name(int type)641 const char *ajax_get_ctrl_name(int type)
642 {
643   switch(type)
644   {
645     case IPT_BUTTON1: return BTN1 "Machine Gun";
646     case IPT_BUTTON2: return BTN2 "Missle";
647     case IPT_BUTTON3: return BTN3 "Super Weapon";
648   } /* end of switch */
649 
650   return joy4way_labels(type);
651 }
652 
653 const struct ControlInfo alexkidd_ctrl =
654 {
655   false, /* 45_degree_rotation for joystick(s) */
656   false, /* alternating_controls */
657   true, /* mirrored_controls */
658   "I cold not find what the 3rd button did nor did I immediately notice where it is written in the driver (I think it's one of those generic drivers)", /* control_details */
659   &alexkidd_get_ctrl_name
660 };
661 
alexkidd_get_ctrl_name(int type)662 const char *alexkidd_get_ctrl_name(int type)
663 {
664   switch(type)
665   {
666     case IPT_BUTTON1: return BTN1 "Attack";
667     case IPT_BUTTON2: return BTN2 "Jump";
668     case IPT_BUTTON3: return BTN3 "Unknown";
669   } /* end of switch */
670 
671   return joy4way_labels(type);
672 }
673 
674 const struct ControlInfo alibaba_ctrl =
675 {
676   false, /* 45_degree_rotation for joystick(s) */
677   true, /* alternating_controls */
678   true, /* mirrored_controls */
679   "Drop is not the button label (couldn't find one). It drops something behind your character which blocks the path of the Captain Thief which allows you to get away", /* control_details */
680   &alibaba_get_ctrl_name
681 };
682 
alibaba_get_ctrl_name(int type)683 const char *alibaba_get_ctrl_name(int type)
684 {
685   switch(type)
686   {
687     case IPT_BUTTON1: return BTN1 "Drop";
688   } /* end of switch */
689 
690   return joy4way_labels(type);
691 }
692 
693 const struct ControlInfo astorm_ctrl =
694 {
695   false, /* 45_degree_rotation for joystick(s) */
696   false, /* alternating_controls */
697   true, /* mirrored_controls */
698   "", /* control_details */
699   &astorm_get_ctrl_name
700 };
701 
astorm_get_ctrl_name(int type)702 const char *astorm_get_ctrl_name(int type)
703 {
704   switch(type)
705   {
706     case IPT_BUTTON1: return BTN1 "Attack";
707     case IPT_BUTTON2: return BTN2 "Roll";
708     case IPT_BUTTON3: return BTN3 "Special";
709   } /* end of switch */
710 
711   return joy4way_labels(type);
712 }
713 
714 const struct ControlInfo aliensyn_ctrl =
715 {
716   false, /* 45_degree_rotation for joystick(s) */
717   false, /* alternating_controls */
718   true, /* mirrored_controls */
719   "", /* control_details */
720   &aliensyn_get_ctrl_name
721 };
722 
aliensyn_get_ctrl_name(int type)723 const char *aliensyn_get_ctrl_name(int type)
724 {
725   switch(type)
726   {
727     case IPT_BUTTON1: return BTN1 "Fire";
728   } /* end of switch */
729 
730   return joy4way_labels(type);
731 }
732 
733 const struct ControlInfo avsp_ctrl =
734 {
735   false, /* 45_degree_rotation for joystick(s) */
736   false, /* alternating_controls */
737   true, /* mirrored_controls */
738   "The default dipswitch is two player mode /* control_details */ you need to F2 into the game's service mode and change it to three player mode to play with 3 players. Each character has special moves.", /* control_details */
739   &avsp_get_ctrl_name
740 };
741 
avsp_get_ctrl_name(int type)742 const char *avsp_get_ctrl_name(int type)
743 {
744   switch(type)
745   {
746     case IPT_BUTTON1: return BTN1 "Shoot";
747     case IPT_BUTTON2: return BTN2 "Attack";
748     case IPT_BUTTON3: return BTN3 "Jump (Dash)";
749     case IPT_JOYSTICK_UP: return "Up";
750     case IPT_JOYSTICK_DOWN: return "Down";
751     case IPT_JOYSTICK_LEFT: return "Move Left";
752     case IPT_JOYSTICK_RIGHT: return "Move Right";
753   } /* end of switch */
754 
755   return "";
756 }
757 
758 const struct ControlInfo alien3_ctrl =
759 {
760   false, /* 45_degree_rotation for joystick(s) */
761   false, /* alternating_controls */
762   true, /* mirrored_controls */
763   "There isn't much info about the 'real' name for the second button on the guns. If you have any info feel free to corect.", /* control_details */
764   &alien3_get_ctrl_name
765 };
766 
alien3_get_ctrl_name(int type)767 const char *alien3_get_ctrl_name(int type)
768 {
769   switch(type)
770   {
771     case IPT_BUTTON1: return BTN1 "Fire";
772     case IPT_BUTTON2: return BTN2 "Secondary Weapon";
773     case IPT_LIGHTGUN_X: return "Left";
774     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
775     case IPT_LIGHTGUN_Y: return "Up";
776     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
777   } /* end of switch */
778 
779   return "";
780 }
781 
782 const struct ControlInfo aliens_ctrl =
783 {
784   false, /* 45_degree_rotation for joystick(s) */
785   false, /* alternating_controls */
786   true, /* mirrored_controls */
787   "", /* control_details */
788   &aliens_get_ctrl_name
789 };
790 
aliens_get_ctrl_name(int type)791 const char *aliens_get_ctrl_name(int type)
792 {
793   switch(type)
794   {
795     case IPT_BUTTON1: return BTN1 "Shoot 1";
796     case IPT_BUTTON2: return BTN2 "Shoot 2";
797   } /* end of switch */
798 
799   return joy4way_labels(type);
800 }
801 
802 const struct ControlInfo aafb_ctrl =
803 {
804   false, /* 45_degree_rotation for joystick(s) */
805   false, /* alternating_controls */
806   true, /* mirrored_controls */
807   "The joystick controls the player movement while the kicker is for kicking and passing.", /* control_details */
808   &aafb_get_ctrl_name
809 };
810 
aafb_get_ctrl_name(int type)811 const char *aafb_get_ctrl_name(int type)
812 {
813   switch(type)
814   {
815     case IPT_BUTTON1: return BTN1 "Action";
816     case IPT_AD_STICK_X: return "Aim Left";
817     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Aim Right";
818     case IPT_AD_STICK_Y: return "Short";
819     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Long";
820   } /* end of switch */
821 
822   return joy4way_labels(type);
823 }
824 
825 const struct ControlInfo alleymas_ctrl =
826 {
827   false, /* 45_degree_rotation for joystick(s) */
828   true, /* alternating_controls */
829   true, /* mirrored_controls */
830   "Probably the oddest bowling game out there, this game uses a football kicker stick to bowl!", /* control_details */
831   &alleymas_get_ctrl_name
832 };
833 
alleymas_get_ctrl_name(int type)834 const char *alleymas_get_ctrl_name(int type)
835 {
836   switch(type)
837   {
838     case IPT_BUTTON1: return BTN1 "Left";
839     case IPT_BUTTON2: return BTN2 "Right";
840     case IPT_AD_STICK_X: return "Left";
841     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
842     case IPT_AD_STICK_Y: return "Up";
843     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
844   } /* end of switch */
845 
846   return "";
847 }
848 
849 const struct ControlInfo alphaho_ctrl =
850 {
851   false, /* 45_degree_rotation for joystick(s) */
852   false, /* alternating_controls */
853   true, /* mirrored_controls */
854   "", /* control_details */
855   &alphaho_get_ctrl_name
856 };
857 
alphaho_get_ctrl_name(int type)858 const char *alphaho_get_ctrl_name(int type)
859 {
860   switch(type)
861   {
862     case IPT_BUTTON1: return BTN1 "Accelerate";
863   } /* end of switch */
864 
865   return joy4way_labels(type);
866 }
867 
868 const struct ControlInfo alpinerd_ctrl =
869 {
870   false, /* 45_degree_rotation for joystick(s) */
871   false, /* alternating_controls */
872   false, /* mirrored_controls */
873   "This game uses a dedicated platform shaped like a pair of skiis. It basically acts like a giant analog stick. The player navigates via three, lighted, navigational buttons. (Left, Right and Decision)  The Decision button also changes view during gameplay. The 'sweep' and 'edge' descriptions were taken directly from the game's cryptic i/o test menu. Knowing nothing about skiiing, the way the terms 'sweep' and 'edge' were used may be incorrect.", /* control_details */
874   &alpinerd_get_ctrl_name
875 };
876 
alpinerd_get_ctrl_name(int type)877 const char *alpinerd_get_ctrl_name(int type)
878 {
879   switch(type)
880   {
881     case IPT_BUTTON1: return BTN1 "Decision";
882     case IPT_BUTTON2: return BTN2 "Left (Select)";
883     case IPT_BUTTON3: return BTN3 "Right (Select)";
884     case IPT_AD_STICK_X: return "Sweep Left";
885     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Sweep Right";
886     case IPT_AD_STICK_Y: return "Increase Edge ";
887     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Decrease Edge";
888   } /* end of switch */
889 
890   return "";
891 }
892 
893 const struct ControlInfo alpine_ctrl =
894 {
895   false, /* 45_degree_rotation for joystick(s) */
896   true, /* alternating_controls */
897   true, /* mirrored_controls */
898   "The cpo depicted a simple arrow pointing up for the button label. Upon research I found that this button makes you go down the hill faster. I modified the caption accordingly to avoid confusion. For left and right, the cpo shows a picture of a skiier going left and right respectively. I added the 'ski' part of the caption to prepare for the upcoming icon support in the viewer. As the game doesn't have a true caption, this shouldn't be any less accurate.", /* control_details */
899   &alpine_get_ctrl_name
900 };
901 
alpine_get_ctrl_name(int type)902 const char *alpine_get_ctrl_name(int type)
903 {
904   switch(type)
905   {
906     case IPT_BUTTON1: return BTN1 "Ski Faster";
907     case IPT_JOYSTICK_RIGHT: return "Ski Right";
908     case IPT_JOYSTICK_LEFT: return "Ski Left";
909   } /* end of switch */
910 
911   return "";
912 }
913 
914 const struct ControlInfo altbeast_ctrl =
915 {
916   false, /* 45_degree_rotation for joystick(s) */
917   false, /* alternating_controls */
918   true, /* mirrored_controls */
919   "", /* control_details */
920   &altbeast_get_ctrl_name
921 };
922 
altbeast_get_ctrl_name(int type)923 const char *altbeast_get_ctrl_name(int type)
924 {
925   switch(type)
926   {
927     case IPT_BUTTON1: return BTN1 "Punch";
928     case IPT_BUTTON2: return BTN2 "Kick ";
929     case IPT_BUTTON3: return BTN3 "Jump";
930   } /* end of switch */
931 
932   return joy4way_labels(type);
933 }
934 
935 const struct ControlInfo maze_ctrl =
936 {
937   false, /* 45_degree_rotation for joystick(s) */
938   false, /* alternating_controls */
939   true, /* mirrored_controls */
940   "", /* control_details */
941   &maze_get_ctrl_name
942 };
943 
maze_get_ctrl_name(int type)944 const char *maze_get_ctrl_name(int type)
945 {
946   return joy4way_labels(type);
947 }
948 
949 const struct ControlInfo horshoes_ctrl =
950 {
951   false, /* 45_degree_rotation for joystick(s) */
952   true, /* alternating_controls */
953   true, /* mirrored_controls */
954   "", /* control_details */
955   &horshoes_get_ctrl_name
956 };
957 
horshoes_get_ctrl_name(int type)958 const char *horshoes_get_ctrl_name(int type)
959 {
960   switch(type)
961   {
962     case IPT_BUTTON1: return BTN1 "Angle";
963     case IPT_BUTTON2: return BTN2 "Grip";
964     case IPT_TRACKBALL_Y: return "Up";
965     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
966     case IPT_TRACKBALL_X: return "Left";
967     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
968   } /* end of switch */
969 
970   return "";
971 }
972 
973 const struct ControlInfo amspdwy_ctrl =
974 {
975   false, /* 45_degree_rotation for joystick(s) */
976   false, /* alternating_controls */
977   true, /* mirrored_controls */
978   "", /* control_details */
979   &amspdwy_get_ctrl_name
980 };
981 
amspdwy_get_ctrl_name(int type)982 const char *amspdwy_get_ctrl_name(int type)
983 {
984   switch(type)
985   {
986     case IPT_BUTTON1: return BTN1 "Accelerate";
987     case IPT_DIAL: return "Left";
988     case (IPT_DIAL + IPT_EXTENSION): return "Right";
989   } /* end of switch */
990 
991   return "";
992 }
993 
994 const struct ControlInfo amerdart_ctrl =
995 {
996   false, /* 45_degree_rotation for joystick(s) */
997   true, /* alternating_controls */
998   true, /* mirrored_controls */
999   "To play, aim with the trackball, press the 'lock' button to set the position and then roll to throw.", /* control_details */
1000   &amerdart_get_ctrl_name
1001 };
1002 
amerdart_get_ctrl_name(int type)1003 const char *amerdart_get_ctrl_name(int type)
1004 {
1005   switch(type)
1006   {
1007     case IPT_BUTTON1: return BTN1 "Lock";
1008     case IPT_TRACKBALL_X: return "Left";
1009     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
1010     case IPT_TRACKBALL_Y: return "Up";
1011     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
1012   } /* end of switch */
1013 
1014   return "";
1015 }
1016 
1017 const struct ControlInfo amidar_ctrl =
1018 {
1019   false, /* 45_degree_rotation for joystick(s) */
1020   true, /* alternating_controls */
1021   true, /* mirrored_controls */
1022   "", /* control_details */
1023   &amidar_get_ctrl_name
1024 };
1025 
amidar_get_ctrl_name(int type)1026 const char *amidar_get_ctrl_name(int type)
1027 {
1028   switch(type)
1029   {
1030     case IPT_BUTTON1: return BTN1 "Jump";
1031   } /* end of switch */
1032 
1033   return joy4way_labels(type);
1034 }
1035 
1036 const struct ControlInfo angelkds_ctrl =
1037 {
1038   false, /* 45_degree_rotation for joystick(s) */
1039   true, /* alternating_controls */
1040   true, /* mirrored_controls */
1041   "Left joy controls the left kid, right controls the right kid", /* control_details */
1042   &angelkds_get_ctrl_name
1043 };
1044 
angelkds_get_ctrl_name(int type)1045 const char *angelkds_get_ctrl_name(int type)
1046 {
1047   switch(type)
1048   {
1049     case IPT_JOYSTICKLEFT_UP: return "Up";
1050     case IPT_JOYSTICKLEFT_DOWN: return "Down";
1051     case IPT_JOYSTICKLEFT_LEFT: return "Left";
1052     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
1053     case IPT_JOYSTICKRIGHT_UP: return "Up";
1054     case IPT_JOYSTICKRIGHT_DOWN: return "Down";
1055     case IPT_JOYSTICKRIGHT_LEFT: return "Left";
1056     case IPT_JOYSTICKRIGHT_RIGHT: return "Right";
1057   } /* end of switch */
1058 
1059   return "";
1060 }
1061 
1062 const struct ControlInfo anteater_ctrl =
1063 {
1064   false, /* 45_degree_rotation for joystick(s) */
1065   true, /* alternating_controls */
1066   true, /* mirrored_controls */
1067   "Not sure if the label is correct but that's what it does. Couldn't find a pic of the panel", /* control_details */
1068   &anteater_get_ctrl_name
1069 };
1070 
anteater_get_ctrl_name(int type)1071 const char *anteater_get_ctrl_name(int type)
1072 {
1073   switch(type)
1074   {
1075     case IPT_BUTTON1: return BTN1 "Tongue Return";
1076   } /* end of switch */
1077 
1078   return joy4way_labels(type);
1079 }
1080 
1081 const struct ControlInfo apb_ctrl =
1082 {
1083   false, /* 45_degree_rotation for joystick(s) */
1084   false, /* alternating_controls */
1085   false, /* mirrored_controls */
1086   "", /* control_details */
1087   &apb_get_ctrl_name
1088 };
1089 
apb_get_ctrl_name(int type)1090 const char *apb_get_ctrl_name(int type)
1091 {
1092   switch(type)
1093   {
1094     case IPT_BUTTON1: return BTN1 "Siren / Start";
1095     case IPT_BUTTON2: return BTN2 "Fire";
1096     case (IPT_DIAL + IPT_EXTENSION): return "Right";
1097     case IPT_DIAL: return "Left";
1098     case IPT_PEDAL: return "Accelerate";
1099   } /* end of switch */
1100 
1101   return "";
1102 }
1103 
1104 const struct ControlInfo aquajack_ctrl =
1105 {
1106   false, /* 45_degree_rotation for joystick(s) */
1107   false, /* alternating_controls */
1108   false, /* mirrored_controls */
1109   "In mame a dial is also emulated. This dial has no apparent function and isn't used in the game at all. It could be reminants of a hack or something.", /* control_details */
1110   &aquajack_get_ctrl_name
1111 };
1112 
aquajack_get_ctrl_name(int type)1113 const char *aquajack_get_ctrl_name(int type)
1114 {
1115   switch(type)
1116   {
1117     case IPT_BUTTON1: return BTN1 "Machine Gun";
1118     case IPT_BUTTON2: return BTN2 "Jump";
1119     case IPT_BUTTON3: return BTN3 "Vulcan";
1120     case IPT_BUTTON4: return BTN4 "Thrust";
1121   } /* end of switch */
1122 
1123   return joy4way_labels(type);
1124 }
1125 
1126 const struct ControlInfo aquarium_ctrl =
1127 {
1128   false, /* 45_degree_rotation for joystick(s) */
1129   false, /* alternating_controls */
1130   true, /* mirrored_controls */
1131   "You can choose at the start of the game whether you would like to use 1 or 2 buttons Type A - 2 buttons Type B - 1 button No pic available, labelled on what they do", /* control_details */
1132   &aquarium_get_ctrl_name
1133 };
1134 
aquarium_get_ctrl_name(int type)1135 const char *aquarium_get_ctrl_name(int type)
1136 {
1137   switch(type)
1138   {
1139     case IPT_BUTTON1: return BTN1 "Rotate Right";
1140     case IPT_BUTTON2: return BTN2 "Rotate Left";
1141   } /* end of switch */
1142 
1143   return joy4way_labels(type);
1144 }
1145 
1146 const struct ControlInfo arabian_ctrl =
1147 {
1148   false, /* 45_degree_rotation for joystick(s) */
1149   true, /* alternating_controls */
1150   true, /* mirrored_controls */
1151   "", /* control_details */
1152   &arabian_get_ctrl_name
1153 };
1154 
arabian_get_ctrl_name(int type)1155 const char *arabian_get_ctrl_name(int type)
1156 {
1157   switch(type)
1158   {
1159     case IPT_BUTTON1: return BTN1 "Kick";
1160     case IPT_JOYSTICK_RIGHT: return "Walk";
1161     case IPT_JOYSTICK_LEFT: return "Walk";
1162     case IPT_JOYSTICK_DOWN: return "Down";
1163     case IPT_JOYSTICK_UP: return "Up";
1164   } /* end of switch */
1165 
1166   return "";
1167 }
1168 
1169 const struct ControlInfo arbalest_ctrl =
1170 {
1171   false, /* 45_degree_rotation for joystick(s) */
1172   false, /* alternating_controls */
1173   true, /* mirrored_controls */
1174   "", /* control_details */
1175   &arbalest_get_ctrl_name
1176 };
1177 
arbalest_get_ctrl_name(int type)1178 const char *arbalest_get_ctrl_name(int type)
1179 {
1180   switch(type)
1181   {
1182     case IPT_BUTTON1: return BTN1 "Fire";
1183     case IPT_BUTTON2: return BTN2 "Special";
1184   } /* end of switch */
1185 
1186   return joy4way_labels(type);
1187 }
1188 
1189 const struct ControlInfo arcadecl_ctrl =
1190 {
1191   false, /* 45_degree_rotation for joystick(s) */
1192   false, /* alternating_controls */
1193   true, /* mirrored_controls */
1194   "", /* control_details */
1195   &arcadecl_get_ctrl_name
1196 };
1197 
arcadecl_get_ctrl_name(int type)1198 const char *arcadecl_get_ctrl_name(int type)
1199 {
1200   switch(type)
1201   {
1202     case IPT_BUTTON1: return BTN1 "Fire / Left Missile";
1203     case IPT_BUTTON2: return BTN2 "Fire / Center Missile";
1204     case IPT_BUTTON3: return BTN3 "Fire / Right Missile";
1205     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
1206     case IPT_TRACKBALL_Y: return "Up";
1207     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
1208     case IPT_TRACKBALL_X: return "Left";
1209   } /* end of switch */
1210 
1211   return "";
1212 }
1213 
1214 const struct ControlInfo archrivl_ctrl =
1215 {
1216   false, /* 45_degree_rotation for joystick(s) */
1217   false, /* alternating_controls */
1218   true, /* mirrored_controls */
1219   "The control panel for this game had two pass buttons, but they were merely wired to the same input as only one pass is wired in the schematics. The controls actually used 49-way joysticks for this game, which can be thought of as corse analog sticks.", /* control_details */
1220   &archrivl_get_ctrl_name
1221 };
1222 
archrivl_get_ctrl_name(int type)1223 const char *archrivl_get_ctrl_name(int type)
1224 {
1225   switch(type)
1226   {
1227     case IPT_BUTTON1: return BTN1 "Shoot/Jump";
1228     case IPT_BUTTON2: return BTN2 "Pass/Punch";
1229     case IPT_AD_STICK_X: return "Left";
1230     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
1231     case IPT_AD_STICK_Y: return "Up";
1232     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
1233   } /* end of switch */
1234 
1235   return "";
1236 }
1237 
1238 const struct ControlInfo area51_ctrl =
1239 {
1240   false, /* 45_degree_rotation for joystick(s) */
1241   false, /* alternating_controls */
1242   true, /* mirrored_controls */
1243   "As with many of the lightgun games at the time, Area 51 requires you to fire off screen to reload. Mame has hacked this to where you fire at the absolute edge of the screen to reload. This is good for people who don't use lightguns but very bad for those of us who do.", /* control_details */
1244   &area51_get_ctrl_name
1245 };
1246 
area51_get_ctrl_name(int type)1247 const char *area51_get_ctrl_name(int type)
1248 {
1249   switch(type)
1250   {
1251     case IPT_BUTTON1: return BTN1 "Fire";
1252     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
1253     case IPT_LIGHTGUN_Y: return "Up";
1254     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
1255     case IPT_LIGHTGUN_X: return "Left";
1256   } /* end of switch */
1257 
1258   return "";
1259 }
1260 
1261 const struct ControlInfo area51mx_ctrl =
1262 {
1263   false, /* 45_degree_rotation for joystick(s) */
1264   false, /* alternating_controls */
1265   true, /* mirrored_controls */
1266   "", /* control_details */
1267   &area51mx_get_ctrl_name
1268 };
1269 
area51mx_get_ctrl_name(int type)1270 const char *area51mx_get_ctrl_name(int type)
1271 {
1272   switch(type)
1273   {
1274     case IPT_BUTTON1: return BTN1 "Fire";
1275     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
1276     case IPT_LIGHTGUN_Y: return "Up";
1277     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
1278     case IPT_LIGHTGUN_X: return "Left";
1279   } /* end of switch */
1280 
1281   return "";
1282 }
1283 
1284 const struct ControlInfo a51site4_ctrl =
1285 {
1286   false, /* 45_degree_rotation for joystick(s) */
1287   false, /* alternating_controls */
1288   true, /* mirrored_controls */
1289   "Shoot off-screen to reload. Note:  many pc lightguns have a dedicated reload button, which mame supports.", /* control_details */
1290   &a51site4_get_ctrl_name
1291 };
1292 
a51site4_get_ctrl_name(int type)1293 const char *a51site4_get_ctrl_name(int type)
1294 {
1295   switch(type)
1296   {
1297     case IPT_BUTTON1: return BTN1 "Fire";
1298     case IPT_LIGHTGUN_X: return "Aim Left";
1299     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
1300     case IPT_LIGHTGUN_Y: return "Aim Up";
1301     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
1302   } /* end of switch */
1303 
1304   return "";
1305 }
1306 
1307 const struct ControlInfo argus_ctrl =
1308 {
1309   false, /* 45_degree_rotation for joystick(s) */
1310   true, /* alternating_controls */
1311   true, /* mirrored_controls */
1312   "Fire button shoots flying objects, the laser hits the ground units", /* control_details */
1313   &argus_get_ctrl_name
1314 };
1315 
argus_get_ctrl_name(int type)1316 const char *argus_get_ctrl_name(int type)
1317 {
1318   switch(type)
1319   {
1320     case IPT_BUTTON1: return BTN1 "Fire";
1321     case IPT_BUTTON2: return BTN2 "Laser";
1322   } /* end of switch */
1323 
1324   return joy4way_labels(type);
1325 }
1326 
1327 const struct ControlInfo arkarea_ctrl =
1328 {
1329   false, /* 45_degree_rotation for joystick(s) */
1330   false, /* alternating_controls */
1331   true, /* mirrored_controls */
1332   "To change direction hold the direction button down while using the joystick", /* control_details */
1333   &arkarea_get_ctrl_name
1334 };
1335 
arkarea_get_ctrl_name(int type)1336 const char *arkarea_get_ctrl_name(int type)
1337 {
1338   switch(type)
1339   {
1340     case IPT_BUTTON1: return BTN1 "Fire";
1341     case IPT_BUTTON2: return BTN2 "Direction";
1342   } /* end of switch */
1343 
1344   return joy4way_labels(type);
1345 }
1346 
1347 const struct ControlInfo arkanoid_ctrl =
1348 {
1349   false, /* 45_degree_rotation for joystick(s) */
1350   true, /* alternating_controls */
1351   true, /* mirrored_controls */
1352   "", /* control_details */
1353   &arkanoid_get_ctrl_name
1354 };
1355 
arkanoid_get_ctrl_name(int type)1356 const char *arkanoid_get_ctrl_name(int type)
1357 {
1358   switch(type)
1359   {
1360     case IPT_BUTTON1: return BTN1 "Fire";
1361     case IPT_DIAL: return "Left";
1362     case (IPT_DIAL + IPT_EXTENSION): return "Right";
1363   } /* end of switch */
1364 
1365   return "";
1366 }
1367 
1368 const struct ControlInfo arknoid2_ctrl =
1369 {
1370   false, /* 45_degree_rotation for joystick(s) */
1371   true, /* alternating_controls */
1372   true, /* mirrored_controls */
1373   "", /* control_details */
1374   &arknoid2_get_ctrl_name
1375 };
1376 
arknoid2_get_ctrl_name(int type)1377 const char *arknoid2_get_ctrl_name(int type)
1378 {
1379   switch(type)
1380   {
1381     case IPT_BUTTON1: return BTN1 "Fire";
1382     case IPT_DIAL: return "Left";
1383     case (IPT_DIAL + IPT_EXTENSION): return "Right";
1384   } /* end of switch */
1385 
1386   return "";
1387 }
1388 
1389 const struct ControlInfo arlingtn_ctrl =
1390 {
1391   false, /* 45_degree_rotation for joystick(s) */
1392   true, /* alternating_controls */
1393   true, /* mirrored_controls */
1394   "Sirp Please fix me.... vertical 2 ways have the wrong labels showing up and there isn't a directional 2 way button (vertical), which is what I use.", /* control_details */
1395   &arlingtn_get_ctrl_name
1396 };
1397 
arlingtn_get_ctrl_name(int type)1398 const char *arlingtn_get_ctrl_name(int type)
1399 {
1400   switch(type)
1401   {
1402     case IPT_BUTTON1: return BTN1 "WIN";
1403     case IPT_BUTTON2: return BTN2 "PLACE";
1404     case IPT_BUTTON3: return BTN3 "SHOW";
1405     case IPT_BUTTON4: return BTN4 "COLLECT";
1406     case IPT_JOYSTICK_DOWN: return "Down";
1407     case IPT_JOYSTICK_UP: return "Up";
1408   } /* end of switch */
1409 
1410   return "";
1411 }
1412 
1413 const struct ControlInfo armwrest_ctrl =
1414 {
1415   false, /* 45_degree_rotation for joystick(s) */
1416   false, /* alternating_controls */
1417   false, /* mirrored_controls */
1418   "This Game only uses 3 directions of the 4 way stick. Down is not used.", /* control_details */
1419   &armwrest_get_ctrl_name
1420 };
1421 
armwrest_get_ctrl_name(int type)1422 const char *armwrest_get_ctrl_name(int type)
1423 {
1424   switch(type)
1425   {
1426     case IPT_BUTTON1: return BTN1 "Power";
1427     case IPT_JOYSTICK_LEFT: return "Left";
1428     case IPT_JOYSTICK_UP: return "Pull";
1429     case IPT_JOYSTICK_RIGHT: return "Right";
1430   } /* end of switch */
1431 
1432   return "";
1433 }
1434 
1435 const struct ControlInfo armedf_ctrl =
1436 {
1437   false, /* 45_degree_rotation for joystick(s) */
1438   true, /* alternating_controls */
1439   true, /* mirrored_controls */
1440   "Button 3 is mapped in driver armedf.c but isn't used", /* control_details */
1441   &armedf_get_ctrl_name
1442 };
1443 
armedf_get_ctrl_name(int type)1444 const char *armedf_get_ctrl_name(int type)
1445 {
1446   switch(type)
1447   {
1448     case IPT_BUTTON1: return BTN1 "Fire";
1449     case IPT_BUTTON2: return BTN2 "Special";
1450     case IPT_BUTTON3: return BTN3 "Unknown";
1451   } /* end of switch */
1452 
1453   return joy4way_labels(type);
1454 }
1455 
1456 const struct ControlInfo armora_ctrl =
1457 {
1458   false, /* 45_degree_rotation for joystick(s) */
1459   false, /* alternating_controls */
1460   true, /* mirrored_controls */
1461   "Something of note is this game is pretty much unplayable in Mame without the artwork pack that goes with the rom. Be sure to download it.", /* control_details */
1462   &armora_get_ctrl_name
1463 };
1464 
armora_get_ctrl_name(int type)1465 const char *armora_get_ctrl_name(int type)
1466 {
1467   switch(type)
1468   {
1469     case IPT_BUTTON1: return BTN1 "Fire";
1470     case IPT_BUTTON2: return BTN2 "Forward";
1471   } /* end of switch */
1472 
1473   return joy2way_labels(type);
1474 }
1475 
1476 const struct ControlInfo armorcar_ctrl =
1477 {
1478   false, /* 45_degree_rotation for joystick(s) */
1479   true, /* alternating_controls */
1480   true, /* mirrored_controls */
1481   "I think a bit of how to play info might be necessary. The sawhorse button releases a police barrier to crash cars. The 2nd gear button makes you go faster, but only while it is held.", /* control_details */
1482   &armorcar_get_ctrl_name
1483 };
1484 
armorcar_get_ctrl_name(int type)1485 const char *armorcar_get_ctrl_name(int type)
1486 {
1487   switch(type)
1488   {
1489     case IPT_BUTTON1: return BTN1 "Sawhorse";
1490     case IPT_BUTTON2: return BTN2 "2nd Gear";
1491   } /* end of switch */
1492 
1493   return joy4way_labels(type);
1494 }
1495 
1496 const struct ControlInfo ashura_ctrl =
1497 {
1498   false, /* 45_degree_rotation for joystick(s) */
1499   false, /* alternating_controls */
1500   true, /* mirrored_controls */
1501   "", /* control_details */
1502   &ashura_get_ctrl_name
1503 };
1504 
ashura_get_ctrl_name(int type)1505 const char *ashura_get_ctrl_name(int type)
1506 {
1507   switch(type)
1508   {
1509     case IPT_BUTTON1: return BTN1 "Fire";
1510     case IPT_BUTTON2: return BTN2 "Bomb";
1511   } /* end of switch */
1512 
1513   return joy4way_labels(type);
1514 }
1515 
1516 const struct ControlInfo aso_ctrl =
1517 {
1518   false, /* 45_degree_rotation for joystick(s) */
1519   true, /* alternating_controls */
1520   true, /* mirrored_controls */
1521   "", /* control_details */
1522   &aso_get_ctrl_name
1523 };
1524 
aso_get_ctrl_name(int type)1525 const char *aso_get_ctrl_name(int type)
1526 {
1527   switch(type)
1528   {
1529     case IPT_BUTTON1: return BTN1 "Laser";
1530     case IPT_BUTTON2: return BTN2 "Missile";
1531     case IPT_BUTTON3: return BTN3 "Power Up";
1532   } /* end of switch */
1533 
1534   return joy4way_labels(type);
1535 }
1536 
1537 const struct ControlInfo assault_ctrl =
1538 {
1539   false, /* 45_degree_rotation for joystick(s) */
1540   false, /* alternating_controls */
1541   false, /* mirrored_controls */
1542   "Mame-wise, this game is really odd. The original game uses dual 4-way trigger sticks. However the author of the mame driver also hacked in an optional 1 stick control scheme so you can play the game with a regular single stick. Unfortunately, this hack interferes with the real inputs so you have to clear one or the other to play properly. It should also be noted that you can not rapid roll with the hack as the game requires you to press both sticks left or right at once to do a roll. Also there is a phantom button defined that is useless. Gameplay Tips:  To rapid roll push both sticks in the same direction. (Left or right only)  To launch a grenade push both sticks to the outside and fire when ready.", /* control_details */
1543   &assault_get_ctrl_name
1544 };
1545 
assault_get_ctrl_name(int type)1546 const char *assault_get_ctrl_name(int type)
1547 {
1548   switch(type)
1549   {
1550     case IPT_BUTTON1: return BTN1 "Fire";
1551     case IPT_JOYSTICKRIGHT_RIGHT: return "Rapid Roll Right";
1552   } /* end of switch */
1553 
1554   return "";
1555 }
1556 
1557 const struct ControlInfo asterix_ctrl =
1558 {
1559   false, /* 45_degree_rotation for joystick(s) */
1560   false, /* alternating_controls */
1561   true, /* mirrored_controls */
1562   "Watch the attract screen to view general and special moves", /* control_details */
1563   &asterix_get_ctrl_name
1564 };
1565 
asterix_get_ctrl_name(int type)1566 const char *asterix_get_ctrl_name(int type)
1567 {
1568   switch(type)
1569   {
1570     case IPT_BUTTON1: return BTN1 "Attack";
1571     case IPT_BUTTON2: return BTN2 "Jump";
1572   } /* end of switch */
1573 
1574   return joy4way_labels(type);
1575 }
1576 
1577 const struct ControlInfo asteroid_ctrl =
1578 {
1579   false, /* 45_degree_rotation for joystick(s) */
1580   true, /* alternating_controls */
1581   true, /* mirrored_controls */
1582   "", /* control_details */
1583   &asteroid_get_ctrl_name
1584 };
1585 
asteroid_get_ctrl_name(int type)1586 const char *asteroid_get_ctrl_name(int type)
1587 {
1588   switch(type)
1589   {
1590     case IPT_BUTTON1: return BTN1 "FIRE";
1591     case IPT_BUTTON2: return BTN2 "THRUST";
1592     case IPT_BUTTON3: return BTN3 "HYPER SPACE";
1593     case IPT_JOYSTICK_LEFT: return "Rotate Left";
1594     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
1595   } /* end of switch */
1596 
1597   return "";
1598 }
1599 
1600 const struct ControlInfo astdelux_ctrl =
1601 {
1602   false, /* 45_degree_rotation for joystick(s) */
1603   true, /* alternating_controls */
1604   true, /* mirrored_controls */
1605   "", /* control_details */
1606   &astdelux_get_ctrl_name
1607 };
1608 
astdelux_get_ctrl_name(int type)1609 const char *astdelux_get_ctrl_name(int type)
1610 {
1611   switch(type)
1612   {
1613     case IPT_BUTTON1: return BTN1 "FIRE";
1614     case IPT_BUTTON2: return BTN2 "THRUST";
1615     case IPT_BUTTON3: return BTN3 "SHIELDS";
1616     case IPT_JOYSTICK_RIGHT: return "ROTATE RIGHT";
1617     case IPT_JOYSTICK_LEFT: return "ROTATE LEFT";
1618   } /* end of switch */
1619 
1620   return "";
1621 }
1622 
1623 const struct ControlInfo astrob_ctrl =
1624 {
1625   false, /* 45_degree_rotation for joystick(s) */
1626   true, /* alternating_controls */
1627   true, /* mirrored_controls */
1628   "Don't think Star Trek when you see the warp button. It activates a 10 second time warp which slows the enemies down. So who ever said that Binx was innovative was about 20 years too late.", /* control_details */
1629   &astrob_get_ctrl_name
1630 };
1631 
astrob_get_ctrl_name(int type)1632 const char *astrob_get_ctrl_name(int type)
1633 {
1634   switch(type)
1635   {
1636     case IPT_BUTTON1: return BTN1 "Fire";
1637     case IPT_BUTTON2: return BTN2 "Warp";
1638   } /* end of switch */
1639 
1640   return joy2way_labels(type);
1641 }
1642 
1643 const struct ControlInfo astrof_ctrl =
1644 {
1645   false, /* 45_degree_rotation for joystick(s) */
1646   true, /* alternating_controls */
1647   true, /* mirrored_controls */
1648   "", /* control_details */
1649   &astrof_get_ctrl_name
1650 };
1651 
astrof_get_ctrl_name(int type)1652 const char *astrof_get_ctrl_name(int type)
1653 {
1654   switch(type)
1655   {
1656     case IPT_BUTTON1: return BTN1 "Missile";
1657   } /* end of switch */
1658 
1659   return joy2way_labels(type);
1660 }
1661 
1662 const struct ControlInfo astinvad_ctrl =
1663 {
1664   false, /* 45_degree_rotation for joystick(s) */
1665   true, /* alternating_controls */
1666   true, /* mirrored_controls */
1667   "", /* control_details */
1668   &astinvad_get_ctrl_name
1669 };
1670 
astinvad_get_ctrl_name(int type)1671 const char *astinvad_get_ctrl_name(int type)
1672 {
1673   switch(type)
1674   {
1675     case IPT_BUTTON1: return BTN1 "FIRE";
1676   } /* end of switch */
1677 
1678   return joy2way_labels(type);
1679 }
1680 
1681 const struct ControlInfo asuka_ctrl =
1682 {
1683   false, /* 45_degree_rotation for joystick(s) */
1684   false, /* alternating_controls */
1685   true, /* mirrored_controls */
1686   "", /* control_details */
1687   &asuka_get_ctrl_name
1688 };
1689 
asuka_get_ctrl_name(int type)1690 const char *asuka_get_ctrl_name(int type)
1691 {
1692   switch(type)
1693   {
1694     case IPT_BUTTON1: return BTN1 "Fire";
1695     case IPT_BUTTON2: return BTN2 "Bomb";
1696   } /* end of switch */
1697 
1698   return joy4way_labels(type);
1699 }
1700 
1701 const struct ControlInfo asylum_ctrl =
1702 {
1703   false, /* 45_degree_rotation for joystick(s) */
1704   false, /* alternating_controls */
1705   true, /* mirrored_controls */
1706   "", /* control_details */
1707   &asylum_get_ctrl_name
1708 };
1709 
asylum_get_ctrl_name(int type)1710 const char *asylum_get_ctrl_name(int type)
1711 {
1712   switch(type)
1713   {
1714     case IPT_BUTTON1: return BTN1 "Attack";
1715     case IPT_BUTTON2: return BTN2 "Jump";
1716   } /* end of switch */
1717 
1718   return joy4way_labels(type);
1719 }
1720 
1721 const struct ControlInfo abaseb_ctrl =
1722 {
1723   false, /* 45_degree_rotation for joystick(s) */
1724   false, /* alternating_controls */
1725   true, /* mirrored_controls */
1726   "Action button depends if batting or fielding - selects hit, swings bat, selects pitch, throws etc", /* control_details */
1727   &abaseb_get_ctrl_name
1728 };
1729 
abaseb_get_ctrl_name(int type)1730 const char *abaseb_get_ctrl_name(int type)
1731 {
1732   switch(type)
1733   {
1734     case IPT_BUTTON1: return BTN1 "Action";
1735     case IPT_TRACKBALL_X: return "Left";
1736     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
1737     case IPT_TRACKBALL_Y: return "Up";
1738     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
1739   } /* end of switch */
1740 
1741   return "";
1742 }
1743 
1744 const struct ControlInfo atarifb_ctrl =
1745 {
1746   false, /* 45_degree_rotation for joystick(s) */
1747   false, /* alternating_controls */
1748   true, /* mirrored_controls */
1749   "There are 4 plays (well, four offense, four defense) per player displayed as part of the control panel with an LED for each play and selected with the action button. You cannot play against the computer: this game has to be played with two players. There is a four player version with four trackballs /* control_details */ that version has to be played with 4 players. **Update**  I looked in the mame cpo pack and found a pic to fill in the button label. Rebel, if you need a copy of the cpo pack please contact me, it's very helpful.", /* control_details */
1750   &atarifb_get_ctrl_name
1751 };
1752 
atarifb_get_ctrl_name(int type)1753 const char *atarifb_get_ctrl_name(int type)
1754 {
1755   switch(type)
1756   {
1757     case IPT_BUTTON1: return BTN1 "Play Select:  Press to Pass / Kick";
1758     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
1759     case IPT_TRACKBALL_Y: return "Up";
1760     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
1761     case IPT_TRACKBALL_X: return "Left";
1762   } /* end of switch */
1763 
1764   return "";
1765 }
1766 
1767 const struct ControlInfo ataxx_ctrl =
1768 {
1769   false, /* 45_degree_rotation for joystick(s) */
1770   false, /* alternating_controls */
1771   true, /* mirrored_controls */
1772   "", /* control_details */
1773   &ataxx_get_ctrl_name
1774 };
1775 
ataxx_get_ctrl_name(int type)1776 const char *ataxx_get_ctrl_name(int type)
1777 {
1778   switch(type)
1779   {
1780     case IPT_BUTTON1: return BTN1 "Select";
1781     case IPT_TRACKBALL_X: return "Left";
1782     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
1783     case IPT_TRACKBALL_Y: return "Up";
1784     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
1785   } /* end of switch */
1786 
1787   return "";
1788 }
1789 
1790 const struct ControlInfo athena_ctrl =
1791 {
1792   false, /* 45_degree_rotation for joystick(s) */
1793   true, /* alternating_controls */
1794   true, /* mirrored_controls */
1795   "", /* control_details */
1796   &athena_get_ctrl_name
1797 };
1798 
athena_get_ctrl_name(int type)1799 const char *athena_get_ctrl_name(int type)
1800 {
1801   switch(type)
1802   {
1803     case IPT_BUTTON1: return BTN1 "Jump";
1804     case IPT_BUTTON2: return BTN2 "Attack";
1805   } /* end of switch */
1806 
1807   return joy4way_labels(type);
1808 }
1809 
1810 const struct ControlInfo atehate_ctrl =
1811 {
1812   false, /* 45_degree_rotation for joystick(s) */
1813   false, /* alternating_controls */
1814   true, /* mirrored_controls */
1815   "", /* control_details */
1816   &atehate_get_ctrl_name
1817 };
1818 
atehate_get_ctrl_name(int type)1819 const char *atehate_get_ctrl_name(int type)
1820 {
1821   switch(type)
1822   {
1823     case IPT_BUTTON1: return BTN1 "1";
1824     case IPT_BUTTON2: return BTN2 "2";
1825     case IPT_BUTTON3: return BTN3 "3";
1826     case IPT_BUTTON4: return BTN4 "4";
1827   } /* end of switch */
1828 
1829   return "";
1830 }
1831 
1832 const struct ControlInfo atomicp_ctrl =
1833 {
1834   false, /* 45_degree_rotation for joystick(s) */
1835   false, /* alternating_controls */
1836   true, /* mirrored_controls */
1837   "If a falling block has one block flashing you can press the second button and you get four choices. One of these it to get to select what the next shape will be. Mame has this as a 8-way in the system16.c driver but while playing acts like a 4-way", /* control_details */
1838   &atomicp_get_ctrl_name
1839 };
1840 
atomicp_get_ctrl_name(int type)1841 const char *atomicp_get_ctrl_name(int type)
1842 {
1843   switch(type)
1844   {
1845     case IPT_BUTTON1: return BTN1 "Rotate";
1846     case IPT_BUTTON2: return BTN2 "Special";
1847   } /* end of switch */
1848 
1849   return joy4way_labels(type);
1850 }
1851 
1852 const struct ControlInfo robokid_ctrl =
1853 {
1854   false, /* 45_degree_rotation for joystick(s) */
1855   true, /* alternating_controls */
1856   true, /* mirrored_controls */
1857   "", /* control_details */
1858   &robokid_get_ctrl_name
1859 };
1860 
robokid_get_ctrl_name(int type)1861 const char *robokid_get_ctrl_name(int type)
1862 {
1863   switch(type)
1864   {
1865     case IPT_BUTTON1: return BTN1 "Fire";
1866     case IPT_BUTTON2: return BTN2 "Weapon Select";
1867   } /* end of switch */
1868 
1869   return joy4way_labels(type);
1870 }
1871 
1872 const struct ControlInfo aurail_ctrl =
1873 {
1874   false, /* 45_degree_rotation for joystick(s) */
1875   true, /* alternating_controls */
1876   true, /* mirrored_controls */
1877   "Special sends out remote attack drones", /* control_details */
1878   &aurail_get_ctrl_name
1879 };
1880 
aurail_get_ctrl_name(int type)1881 const char *aurail_get_ctrl_name(int type)
1882 {
1883   switch(type)
1884   {
1885     case IPT_BUTTON1: return BTN1 "Fire";
1886     case IPT_BUTTON2: return BTN2 "Sepcial";
1887     case IPT_BUTTON3: return BTN3 "Shield";
1888   } /* end of switch */
1889 
1890   return joy4way_labels(type);
1891 }
1892 
1893 const struct ControlInfo avalnche_ctrl =
1894 {
1895   false, /* 45_degree_rotation for joystick(s) */
1896   true, /* alternating_controls */
1897   true, /* mirrored_controls */
1898   "", /* control_details */
1899   &avalnche_get_ctrl_name
1900 };
1901 
avalnche_get_ctrl_name(int type)1902 const char *avalnche_get_ctrl_name(int type)
1903 {
1904   switch(type)
1905   {
1906     case IPT_BUTTON1: return BTN1 "Serve";
1907     case IPT_PADDLE: return "Left";
1908     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
1909   } /* end of switch */
1910 
1911   return "";
1912 }
1913 
1914 const struct ControlInfo avengers_ctrl =
1915 {
1916   false, /* 45_degree_rotation for joystick(s) */
1917   false, /* alternating_controls */
1918   true, /* mirrored_controls */
1919   "", /* control_details */
1920   &avengers_get_ctrl_name
1921 };
1922 
avengers_get_ctrl_name(int type)1923 const char *avengers_get_ctrl_name(int type)
1924 {
1925   switch(type)
1926   {
1927     case IPT_BUTTON1: return BTN1 "Punch";
1928     case IPT_BUTTON2: return BTN2 "Punch";
1929     case IPT_BUTTON3: return BTN3 "Kick";
1930     case IPT_BUTTON4: return BTN4 "Kick";
1931 
1932   } /* end of switch */
1933 
1934   return joy4way_labels(type);
1935 }
1936 
1937 const struct ControlInfo avspirit_ctrl =
1938 {
1939   false, /* 45_degree_rotation for joystick(s) */
1940   true, /* alternating_controls */
1941   true, /* mirrored_controls */
1942   "Button A - Fire Button B - Jump", /* control_details */
1943   &avspirit_get_ctrl_name
1944 };
1945 
avspirit_get_ctrl_name(int type)1946 const char *avspirit_get_ctrl_name(int type)
1947 {
1948   switch(type)
1949   {
1950     case IPT_BUTTON1: return BTN1 "A";
1951     case IPT_BUTTON2: return BTN2 "B";
1952   } /* end of switch */
1953 
1954   return joy4way_labels(type);
1955 }
1956 
1957 const struct ControlInfo aztarac_ctrl =
1958 {
1959   false, /* 45_degree_rotation for joystick(s) */
1960   true, /* alternating_controls */
1961   true, /* mirrored_controls */
1962   "", /* control_details */
1963   &aztarac_get_ctrl_name
1964 };
1965 
aztarac_get_ctrl_name(int type)1966 const char *aztarac_get_ctrl_name(int type)
1967 {
1968   switch(type)
1969   {
1970     case IPT_BUTTON1: return BTN1 "Fire";
1971     case IPT_BUTTON2: return BTN2 "Radar";
1972     case IPT_AD_STICK_X: return "Left";
1973     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
1974     case IPT_AD_STICK_Y: return "Up";
1975     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
1976     case IPT_DIAL: return "Aim Left";
1977     case (IPT_DIAL + IPT_EXTENSION): return "Aim Right";
1978   } /* end of switch */
1979 
1980   return "";
1981 }
1982 
1983 const struct ControlInfo azurian_ctrl =
1984 {
1985   false, /* 45_degree_rotation for joystick(s) */
1986   true, /* alternating_controls */
1987   true, /* mirrored_controls */
1988   "", /* control_details */
1989   &azurian_get_ctrl_name
1990 };
1991 
azurian_get_ctrl_name(int type)1992 const char *azurian_get_ctrl_name(int type)
1993 {
1994   switch(type)
1995   {
1996     case IPT_BUTTON1: return BTN1 "Fire";
1997   } /* end of switch */
1998 
1999   return joy4way_labels(type);
2000 }
2001 
2002 const struct ControlInfo baddudes_ctrl =
2003 {
2004   false, /* 45_degree_rotation for joystick(s) */
2005   false, /* alternating_controls */
2006   true, /* mirrored_controls */
2007   "Holding down attack while standing still will charge up a super punch. Pressing jump and attack at once will do a super kick at the expense of some of your energy.", /* control_details */
2008   &baddudes_get_ctrl_name
2009 };
2010 
baddudes_get_ctrl_name(int type)2011 const char *baddudes_get_ctrl_name(int type)
2012 {
2013   switch(type)
2014   {
2015     case IPT_BUTTON1: return BTN1 "Attack";
2016     case IPT_BUTTON2: return BTN2 "Jump";
2017   } /* end of switch */
2018 
2019   return joy4way_labels(type);
2020 }
2021 
2022 const struct ControlInfo badlands_ctrl =
2023 {
2024   false, /* 45_degree_rotation for joystick(s) */
2025   false, /* alternating_controls */
2026   true, /* mirrored_controls */
2027   "", /* control_details */
2028   &badlands_get_ctrl_name
2029 };
2030 
badlands_get_ctrl_name(int type)2031 const char *badlands_get_ctrl_name(int type)
2032 {
2033   switch(type)
2034   {
2035     case IPT_BUTTON1: return BTN1 "Gas";
2036     case IPT_BUTTON2: return BTN2 "Fire";
2037     case IPT_DIAL: return "Left";
2038     case (IPT_DIAL + IPT_EXTENSION): return "Right";
2039   } /* end of switch */
2040 
2041   return "";
2042 }
2043 
2044 const struct ControlInfo bagman_ctrl =
2045 {
2046   false, /* 45_degree_rotation for joystick(s) */
2047   true, /* alternating_controls */
2048   true, /* mirrored_controls */
2049   "", /* control_details */
2050   &bagman_get_ctrl_name
2051 };
2052 
bagman_get_ctrl_name(int type)2053 const char *bagman_get_ctrl_name(int type)
2054 {
2055   switch(type)
2056   {
2057     case IPT_BUTTON1: return BTN1 "Action";
2058   } /* end of switch */
2059 
2060   return joy4way_labels(type);
2061 }
2062 
2063 const struct ControlInfo bkrtmaq_ctrl =
2064 {
2065   false, /* 45_degree_rotation for joystick(s) */
2066   false, /* alternating_controls */
2067   true, /* mirrored_controls */
2068   "This will display in mame as a 4 player even though it is only 2 player.", /* control_details */
2069   &bkrtmaq_get_ctrl_name
2070 };
2071 
bkrtmaq_get_ctrl_name(int type)2072 const char *bkrtmaq_get_ctrl_name(int type)
2073 {
2074   switch(type)
2075   {
2076     case IPT_BUTTON1: return BTN1 "1";
2077     case IPT_BUTTON2: return BTN2 "2";
2078     case IPT_BUTTON3: return BTN3 "3";
2079     case IPT_BUTTON4: return BTN4 "4";
2080   } /* end of switch */
2081 
2082   return "";
2083 }
2084 
2085 const struct ControlInfo bakutotu_ctrl =
2086 {
2087   false, /* 45_degree_rotation for joystick(s) */
2088   true, /* alternating_controls */
2089   true, /* mirrored_controls */
2090   "All buttons do the same thing", /* control_details */
2091   &bakutotu_get_ctrl_name
2092 };
2093 
bakutotu_get_ctrl_name(int type)2094 const char *bakutotu_get_ctrl_name(int type)
2095 {
2096   switch(type)
2097   {
2098     case IPT_BUTTON1: return BTN1 "Fire";
2099     case IPT_BUTTON2: return BTN2 "Fire";
2100     case IPT_BUTTON3: return BTN3 "Fire";
2101   } /* end of switch */
2102 
2103   return joy4way_labels(type);
2104 }
2105 
2106 const struct ControlInfo ballbomb_ctrl =
2107 {
2108   false, /* 45_degree_rotation for joystick(s) */
2109   true, /* alternating_controls */
2110   true, /* mirrored_controls */
2111   "", /* control_details */
2112   &ballbomb_get_ctrl_name
2113 };
2114 
ballbomb_get_ctrl_name(int type)2115 const char *ballbomb_get_ctrl_name(int type)
2116 {
2117   switch(type)
2118   {
2119     case IPT_BUTTON1: return BTN1 "Fire";
2120   } /* end of switch */
2121 
2122   return joy2way_labels(type);
2123 }
2124 
2125 const struct ControlInfo ballbros_ctrl =
2126 {
2127   false, /* 45_degree_rotation for joystick(s) */
2128   false, /* alternating_controls */
2129   true, /* mirrored_controls */
2130   "Mame has 3 buttons mapped but the game only has 1.", /* control_details */
2131   &ballbros_get_ctrl_name
2132 };
2133 
ballbros_get_ctrl_name(int type)2134 const char *ballbros_get_ctrl_name(int type)
2135 {
2136   switch(type)
2137   {
2138     case IPT_BUTTON1: return BTN1 "Rotate";
2139     case IPT_BUTTON2: return BTN2 "Unknown";
2140     case IPT_BUTTON3: return BTN3 "Unknown";
2141     case IPT_JOYSTICK_LEFT: return "Left";
2142     case IPT_JOYSTICK_UP: return "Up";
2143     case IPT_JOYSTICK_RIGHT: return "Right";
2144   } /* end of switch */
2145 
2146   return "";
2147 }
2148 
2149 const struct ControlInfo baluba_ctrl =
2150 {
2151   false, /* 45_degree_rotation for joystick(s) */
2152   true, /* alternating_controls */
2153   true, /* mirrored_controls */
2154   "", /* control_details */
2155   &baluba_get_ctrl_name
2156 };
2157 
baluba_get_ctrl_name(int type)2158 const char *baluba_get_ctrl_name(int type)
2159 {
2160   switch(type)
2161   {
2162     case IPT_BUTTON1: return BTN1 "Jump";
2163   } /* end of switch */
2164 
2165   return joy4way_labels(type);
2166 }
2167 
2168 const struct ControlInfo bangball_ctrl =
2169 {
2170   false, /* 45_degree_rotation for joystick(s) */
2171   false, /* alternating_controls */
2172   true, /* mirrored_controls */
2173   "", /* control_details */
2174   &bangball_get_ctrl_name
2175 };
2176 
bangball_get_ctrl_name(int type)2177 const char *bangball_get_ctrl_name(int type)
2178 {
2179   switch(type)
2180   {
2181     case IPT_BUTTON1: return BTN1 "Throw";
2182   } /* end of switch */
2183 
2184   return joy4way_labels(type);
2185 }
2186 
2187 const struct ControlInfo bang_ctrl =
2188 {
2189   false, /* 45_degree_rotation for joystick(s) */
2190   false, /* alternating_controls */
2191   true, /* mirrored_controls */
2192   "", /* control_details */
2193   &bang_get_ctrl_name
2194 };
2195 
bang_get_ctrl_name(int type)2196 const char *bang_get_ctrl_name(int type)
2197 {
2198   switch(type)
2199   {
2200     case IPT_BUTTON1: return BTN1 "Fire";
2201     case IPT_LIGHTGUN_X: return "Left";
2202     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
2203     case IPT_LIGHTGUN_Y: return "Up";
2204     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
2205   } /* end of switch */
2206 
2207   return "";
2208 }
2209 
2210 const struct ControlInfo bankp_ctrl =
2211 {
2212   false, /* 45_degree_rotation for joystick(s) */
2213   true, /* alternating_controls */
2214   true, /* mirrored_controls */
2215   "", /* control_details */
2216   &bankp_get_ctrl_name
2217 };
2218 
bankp_get_ctrl_name(int type)2219 const char *bankp_get_ctrl_name(int type)
2220 {
2221   switch(type)
2222   {
2223     case IPT_BUTTON1: return BTN1 "Shoot Door 1";
2224     case IPT_BUTTON2: return BTN2 "Shoot Door 2";
2225     case IPT_BUTTON3: return BTN3 "Shoot Door 3";
2226   } /* end of switch */
2227 
2228   return joy2way_labels(type);
2229 }
2230 
2231 const struct ControlInfo baraduke_ctrl =
2232 {
2233   false, /* 45_degree_rotation for joystick(s) */
2234   true, /* alternating_controls */
2235   true, /* mirrored_controls */
2236   "", /* control_details */
2237   &baraduke_get_ctrl_name
2238 };
2239 
baraduke_get_ctrl_name(int type)2240 const char *baraduke_get_ctrl_name(int type)
2241 {
2242   switch(type)
2243   {
2244     case IPT_BUTTON1: return BTN1 "Fire";
2245   } /* end of switch */
2246 
2247   return joy4way_labels(type);
2248 }
2249 
2250 const struct ControlInfo barricad_ctrl =
2251 {
2252   false, /* 45_degree_rotation for joystick(s) */
2253   false, /* alternating_controls */
2254   true, /* mirrored_controls */
2255   "Panel had directional buttons but of course mame is mapped to the normal joystick inputs", /* control_details */
2256   &barricad_get_ctrl_name
2257 };
2258 
barricad_get_ctrl_name(int type)2259 const char *barricad_get_ctrl_name(int type)
2260 {
2261   return joy4way_labels(type);
2262 }
2263 
2264 const struct ControlInfo barrier_ctrl =
2265 {
2266   false, /* 45_degree_rotation for joystick(s) */
2267   true, /* alternating_controls */
2268   true, /* mirrored_controls */
2269   "Mame has the original directional buttons mapped to the normal mame movement buttons  Buttons are used to select skill level", /* control_details */
2270   &barrier_get_ctrl_name
2271 };
2272 
barrier_get_ctrl_name(int type)2273 const char *barrier_get_ctrl_name(int type)
2274 {
2275   switch(type)
2276   {
2277     case IPT_BUTTON1: return BTN1 "Beginner";
2278     case IPT_BUTTON2: return BTN2 "Intermediate";
2279     case IPT_BUTTON3: return BTN3 "Expert";
2280   } /* end of switch */
2281 
2282   return joy4way_labels(type);
2283 }
2284 
2285 const struct ControlInfo bsktball_ctrl =
2286 {
2287   false, /* 45_degree_rotation for joystick(s) */
2288   false, /* alternating_controls */
2289   true, /* mirrored_controls */
2290   "On the real machine this game had the start button wired onto the action button and the true caption reads 'Start, Shoot  & Jump'  However it appears that the start button has been split out in mame.", /* control_details */
2291   &bsktball_get_ctrl_name
2292 };
2293 
bsktball_get_ctrl_name(int type)2294 const char *bsktball_get_ctrl_name(int type)
2295 {
2296   switch(type)
2297   {
2298     case IPT_BUTTON1: return BTN1 "Shoot & Jump";
2299     case IPT_TRACKBALL_X: return "Left";
2300     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
2301     case IPT_TRACKBALL_Y: return "Up";
2302     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
2303   } /* end of switch */
2304 
2305   return "";
2306 }
2307 
2308 const struct ControlInfo batman_ctrl =
2309 {
2310   false, /* 45_degree_rotation for joystick(s) */
2311   true, /* alternating_controls */
2312   true, /* mirrored_controls */
2313   "", /* control_details */
2314   &batman_get_ctrl_name
2315 };
2316 
batman_get_ctrl_name(int type)2317 const char *batman_get_ctrl_name(int type)
2318 {
2319   switch(type)
2320   {
2321     case IPT_BUTTON1: return BTN1 "Action";
2322     case IPT_BUTTON2: return BTN2 "Jump";
2323   } /* end of switch */
2324 
2325   return joy4way_labels(type);
2326 }
2327 
2328 const struct ControlInfo batsugun_ctrl =
2329 {
2330   false, /* 45_degree_rotation for joystick(s) */
2331   false, /* alternating_controls */
2332   true, /* mirrored_controls */
2333   "", /* control_details */
2334   &batsugun_get_ctrl_name
2335 };
2336 
batsugun_get_ctrl_name(int type)2337 const char *batsugun_get_ctrl_name(int type)
2338 {
2339   switch(type)
2340   {
2341     case IPT_BUTTON1: return BTN1 "Shoot";
2342     case IPT_BUTTON2: return BTN2 "Bomb";
2343   } /* end of switch */
2344 
2345   return joy4way_labels(type);
2346 }
2347 
2348 const struct ControlInfo battlnts_ctrl =
2349 {
2350   false, /* 45_degree_rotation for joystick(s) */
2351   true, /* alternating_controls */
2352   true, /* mirrored_controls */
2353   "", /* control_details */
2354   &battlnts_get_ctrl_name
2355 };
2356 
battlnts_get_ctrl_name(int type)2357 const char *battlnts_get_ctrl_name(int type)
2358 {
2359   switch(type)
2360   {
2361     case IPT_BUTTON1: return BTN1 "Shoot";
2362   } /* end of switch */
2363 
2364   return joy4way_labels(type);
2365 }
2366 
2367 const struct ControlInfo bkraidj_ctrl =
2368 {
2369   false, /* 45_degree_rotation for joystick(s) */
2370   false, /* alternating_controls */
2371   true, /* mirrored_controls */
2372   "At the ship select screen: To select a 'main shot power type' fighter, select your ship with A button, To select a 'Bomber power type', select your ship with B button, To select a 'Side shot power type', select your ship with C button, To select a 'Speed up type', select your ship with Start button. During game A - Shoot, B - Bomb", /* control_details */
2373   &bkraidj_get_ctrl_name
2374 };
2375 
bkraidj_get_ctrl_name(int type)2376 const char *bkraidj_get_ctrl_name(int type)
2377 {
2378   switch(type)
2379   {
2380     case IPT_BUTTON1: return BTN1 "A";
2381     case IPT_BUTTON2: return BTN2 "B";
2382     case IPT_BUTTON3: return BTN3 "C";
2383   } /* end of switch */
2384 
2385   return joy4way_labels(type);
2386 }
2387 
2388 const struct ControlInfo battlex_ctrl =
2389 {
2390   false, /* 45_degree_rotation for joystick(s) */
2391   true, /* alternating_controls */
2392   true, /* mirrored_controls */
2393   "", /* control_details */
2394   &battlex_get_ctrl_name
2395 };
2396 
battlex_get_ctrl_name(int type)2397 const char *battlex_get_ctrl_name(int type)
2398 {
2399   switch(type)
2400   {
2401     case IPT_BUTTON1: return BTN1 "Fire";
2402   } /* end of switch */
2403 
2404   return joy4way_labels(type);
2405 }
2406 
2407 const struct ControlInfo bcruzm12_ctrl =
2408 {
2409   false, /* 45_degree_rotation for joystick(s) */
2410   true, /* alternating_controls */
2411   true, /* mirrored_controls */
2412   "Should be just a horizontal 2-way joystick as shown on the coinop link. However mame driver marineb.c has as 8-way", /* control_details */
2413   &bcruzm12_get_ctrl_name
2414 };
2415 
bcruzm12_get_ctrl_name(int type)2416 const char *bcruzm12_get_ctrl_name(int type)
2417 {
2418   switch(type)
2419   {
2420     case IPT_BUTTON1: return BTN1 "Fire";
2421   } /* end of switch */
2422 
2423   return joy2way_labels(type);
2424 }
2425 
2426 const struct ControlInfo btlkroad_ctrl =
2427 {
2428   false, /* 45_degree_rotation for joystick(s) */
2429   false, /* alternating_controls */
2430   true, /* mirrored_controls */
2431   "", /* control_details */
2432   &btlkroad_get_ctrl_name
2433 };
2434 
btlkroad_get_ctrl_name(int type)2435 const char *btlkroad_get_ctrl_name(int type)
2436 {
2437   switch(type)
2438   {
2439     case IPT_BUTTON1: return BTN1 "Light Punch";
2440     case IPT_BUTTON2: return BTN2 "Middle Punch";
2441     case IPT_BUTTON3: return BTN3 "Heavy Punch";
2442     case IPT_BUTTON4: return BTN4 "Light Kick";
2443     case IPT_BUTTON5: return BTN5 "Middle Kick";
2444     case IPT_BUTTON6: return BTN6 "Heavy Kick";
2445     case IPT_JOYSTICK_UP: return "Jump";
2446     case IPT_JOYSTICK_DOWN: return "Duck";
2447     case IPT_JOYSTICK_LEFT: return "Left";
2448     case IPT_JOYSTICK_RIGHT: return "Right";
2449   } /* end of switch */
2450 
2451   return "";
2452 }
2453 
2454 const struct ControlInfo battlane_ctrl =
2455 {
2456   false, /* 45_degree_rotation for joystick(s) */
2457   true, /* alternating_controls */
2458   true, /* mirrored_controls */
2459   "", /* control_details */
2460   &battlane_get_ctrl_name
2461 };
2462 
battlane_get_ctrl_name(int type)2463 const char *battlane_get_ctrl_name(int type)
2464 {
2465   switch(type)
2466   {
2467     case IPT_BUTTON1: return BTN1 "Fire";
2468     case IPT_BUTTON2: return BTN2 "Missile";
2469   } /* end of switch */
2470 
2471   return joy4way_labels(type);
2472 }
2473 
2474 const struct ControlInfo atlantis_ctrl =
2475 {
2476   false, /* 45_degree_rotation for joystick(s) */
2477   true, /* alternating_controls */
2478   true, /* mirrored_controls */
2479   "", /* control_details */
2480   &atlantis_get_ctrl_name
2481 };
2482 
atlantis_get_ctrl_name(int type)2483 const char *atlantis_get_ctrl_name(int type)
2484 {
2485   switch(type)
2486   {
2487     case IPT_BUTTON1: return BTN1 "Fire";
2488     case IPT_BUTTON2: return BTN2 "Bomb";
2489   } /* end of switch */
2490 
2491   return joy4way_labels(type);
2492 }
2493 
2494 const struct ControlInfo battlera_ctrl =
2495 {
2496   false, /* 45_degree_rotation for joystick(s) */
2497   false, /* alternating_controls */
2498   true, /* mirrored_controls */
2499   "", /* control_details */
2500   &battlera_get_ctrl_name
2501 };
2502 
battlera_get_ctrl_name(int type)2503 const char *battlera_get_ctrl_name(int type)
2504 {
2505   switch(type)
2506   {
2507     case IPT_BUTTON1: return BTN1 "Fire";
2508     case IPT_BUTTON2: return BTN2 "Jump";
2509     case IPT_BUTTON3: return BTN3 "Grenade";
2510   } /* end of switch */
2511 
2512   return joy4way_labels(type);
2513 }
2514 
2515 const struct ControlInfo bshark_ctrl =
2516 {
2517   false, /* 45_degree_rotation for joystick(s) */
2518   false, /* alternating_controls */
2519   false, /* mirrored_controls */
2520   "This game uses a one of a kind periscope control and you look into the periscope to see the screen similar to battlezone. For all intensive purposes it's a glorified star wars yoke though.", /* control_details */
2521   &bshark_get_ctrl_name
2522 };
2523 
bshark_get_ctrl_name(int type)2524 const char *bshark_get_ctrl_name(int type)
2525 {
2526   switch(type)
2527   {
2528     case IPT_BUTTON1: return BTN1 "Fire";
2529     case IPT_AD_STICK_X: return "Left";
2530     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
2531     case IPT_AD_STICK_Y: return "Up";
2532     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
2533   } /* end of switch */
2534 
2535   return "";
2536 }
2537 
2538 const struct ControlInfo btoads_ctrl =
2539 {
2540   false, /* 45_degree_rotation for joystick(s) */
2541   false, /* alternating_controls */
2542   true, /* mirrored_controls */
2543   "This game is either set to 2 player, where you can select your toad, or 3 player, where the toads are hard-wired to the panel. You can adjust this setting in the dipswitches.", /* control_details */
2544   &btoads_get_ctrl_name
2545 };
2546 
btoads_get_ctrl_name(int type)2547 const char *btoads_get_ctrl_name(int type)
2548 {
2549   switch(type)
2550   {
2551     case IPT_BUTTON1: return BTN1 "Start / Attack";
2552     case IPT_BUTTON2: return BTN2 "Jump";
2553   } /* end of switch */
2554 
2555   return joy4way_labels(type);
2556 }
2557 
2558 const struct ControlInfo bzone_ctrl =
2559 {
2560   false, /* 45_degree_rotation for joystick(s) */
2561   false, /* alternating_controls */
2562   false, /* mirrored_controls */
2563   "Both handles have holes for a trigger switch, but generally only one has a button.", /* control_details */
2564   &bzone_get_ctrl_name
2565 };
2566 
bzone_get_ctrl_name(int type)2567 const char *bzone_get_ctrl_name(int type)
2568 {
2569   switch(type)
2570   {
2571     case IPT_BUTTON1: return BTN1 "Fire";
2572     case IPT_JOYSTICKLEFT_UP: return "Left Tread Forward";
2573     case IPT_JOYSTICKLEFT_DOWN: return "Left Tread Backward";
2574     case IPT_JOYSTICKRIGHT_UP: return "Right Tread Forward";
2575     case IPT_JOYSTICKRIGHT_DOWN: return "Right Tread Backward";
2576   } /* end of switch */
2577 
2578   return "";
2579 }
2580 
2581 const struct ControlInfo bayroute_ctrl =
2582 {
2583   false, /* 45_degree_rotation for joystick(s) */
2584   false, /* alternating_controls */
2585   true, /* mirrored_controls */
2586   "", /* control_details */
2587   &bayroute_get_ctrl_name
2588 };
2589 
bayroute_get_ctrl_name(int type)2590 const char *bayroute_get_ctrl_name(int type)
2591 {
2592   switch(type)
2593   {
2594     case IPT_BUTTON1: return BTN1 "Fire";
2595     case IPT_BUTTON2: return BTN2 "Jump";
2596   } /* end of switch */
2597 
2598   return joy4way_labels(type);
2599 }
2600 
2601 const struct ControlInfo beaminv_ctrl =
2602 {
2603   false, /* 45_degree_rotation for joystick(s) */
2604   true, /* alternating_controls */
2605   true, /* mirrored_controls */
2606   "", /* control_details */
2607   &beaminv_get_ctrl_name
2608 };
2609 
beaminv_get_ctrl_name(int type)2610 const char *beaminv_get_ctrl_name(int type)
2611 {
2612   switch(type)
2613   {
2614     case IPT_BUTTON1: return BTN1 "Fire";
2615     case IPT_PADDLE: return "Left";
2616     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
2617   } /* end of switch */
2618 
2619   return "";
2620 }
2621 
2622 const struct ControlInfo bbusters_ctrl =
2623 {
2624   false, /* 45_degree_rotation for joystick(s) */
2625   false, /* alternating_controls */
2626   true, /* mirrored_controls */
2627   "", /* control_details */
2628   &bbusters_get_ctrl_name
2629 };
2630 
bbusters_get_ctrl_name(int type)2631 const char *bbusters_get_ctrl_name(int type)
2632 {
2633   switch(type)
2634   {
2635     case IPT_BUTTON1: return BTN1 "Fire";
2636     case IPT_BUTTON2: return BTN2 "Grenade";
2637     case IPT_LIGHTGUN_Y: return "Up";
2638     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
2639     case IPT_LIGHTGUN_X: return "Left";
2640     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
2641   } /* end of switch */
2642 
2643   return "";
2644 }
2645 
2646 const struct ControlInfo beathead_ctrl =
2647 {
2648   false, /* 45_degree_rotation for joystick(s) */
2649   false, /* alternating_controls */
2650   true, /* mirrored_controls */
2651   "Jump - player jumps to the adjacent block in the desired direction Big Jump - plyers jumps over the adjacent block and lands on the next", /* control_details */
2652   &beathead_get_ctrl_name
2653 };
2654 
beathead_get_ctrl_name(int type)2655 const char *beathead_get_ctrl_name(int type)
2656 {
2657   switch(type)
2658   {
2659     case IPT_BUTTON1: return BTN1 "Jump";
2660     case IPT_BUTTON2: return BTN2 "Big Jump";
2661   } /* end of switch */
2662 
2663   return joy4way_labels(type);
2664 }
2665 
2666 const struct ControlInfo bm1stmix_ctrl =
2667 {
2668   false, /* 45_degree_rotation for joystick(s) */
2669   false, /* alternating_controls */
2670   true, /* mirrored_controls */
2671   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2672   &bm1stmix_get_ctrl_name
2673 };
2674 
bm1stmix_get_ctrl_name(int type)2675 const char *bm1stmix_get_ctrl_name(int type)
2676 {
2677   switch(type)
2678   {
2679     case IPT_BUTTON1: return BTN1 "White 1";
2680     case IPT_BUTTON2: return BTN2 "Black 1";
2681     case IPT_BUTTON3: return BTN3 "White 2";
2682     case IPT_BUTTON4: return BTN4 "Black 2";
2683     case IPT_BUTTON5: return BTN5 "White 3";
2684     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2685     case IPT_DIAL: return "Scratch";
2686   } /* end of switch */
2687 
2688   return "";
2689 }
2690 
2691 const struct ControlInfo bm2ndmix_ctrl =
2692 {
2693   false, /* 45_degree_rotation for joystick(s) */
2694   false, /* alternating_controls */
2695   true, /* mirrored_controls */
2696   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2697   &bm2ndmix_get_ctrl_name
2698 };
2699 
bm2ndmix_get_ctrl_name(int type)2700 const char *bm2ndmix_get_ctrl_name(int type)
2701 {
2702   switch(type)
2703   {
2704     case IPT_BUTTON1: return BTN1 "White 1";
2705     case IPT_BUTTON2: return BTN2 "Black 1";
2706     case IPT_BUTTON3: return BTN3 "White 2";
2707     case IPT_BUTTON4: return BTN4 "Black 2";
2708     case IPT_BUTTON5: return BTN5 "White 3";
2709     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2710     case IPT_DIAL: return "Scratch";
2711   } /* end of switch */
2712 
2713   return "";
2714 }
2715 
2716 const struct ControlInfo bm4thmix_ctrl =
2717 {
2718   false, /* 45_degree_rotation for joystick(s) */
2719   false, /* alternating_controls */
2720   true, /* mirrored_controls */
2721   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2722   &bm4thmix_get_ctrl_name
2723 };
2724 
bm4thmix_get_ctrl_name(int type)2725 const char *bm4thmix_get_ctrl_name(int type)
2726 {
2727   switch(type)
2728   {
2729     case IPT_BUTTON1: return BTN1 "White 1";
2730     case IPT_BUTTON2: return BTN2 "Black 1";
2731     case IPT_BUTTON3: return BTN3 "White 2";
2732     case IPT_BUTTON4: return BTN4 "Black 2";
2733     case IPT_BUTTON5: return BTN5 "White 3";
2734     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2735     case IPT_DIAL: return "Scratch";
2736   } /* end of switch */
2737 
2738   return "";
2739 }
2740 
2741 const struct ControlInfo bm5thmix_ctrl =
2742 {
2743   false, /* 45_degree_rotation for joystick(s) */
2744   false, /* alternating_controls */
2745   true, /* mirrored_controls */
2746   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2747   &bm5thmix_get_ctrl_name
2748 };
2749 
bm5thmix_get_ctrl_name(int type)2750 const char *bm5thmix_get_ctrl_name(int type)
2751 {
2752   switch(type)
2753   {
2754     case IPT_BUTTON1: return BTN1 "White 1";
2755     case IPT_BUTTON2: return BTN2 "Black 1";
2756     case IPT_BUTTON3: return BTN3 "White 2";
2757     case IPT_BUTTON4: return BTN4 "Black 2";
2758     case IPT_BUTTON5: return BTN5 "White 3";
2759     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2760     case IPT_DIAL: return "Scratch";
2761   } /* end of switch */
2762 
2763   return "";
2764 }
2765 
2766 const struct ControlInfo bm6thmix_ctrl =
2767 {
2768   false, /* 45_degree_rotation for joystick(s) */
2769   false, /* alternating_controls */
2770   true, /* mirrored_controls */
2771   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2772   &bm6thmix_get_ctrl_name
2773 };
2774 
bm6thmix_get_ctrl_name(int type)2775 const char *bm6thmix_get_ctrl_name(int type)
2776 {
2777   switch(type)
2778   {
2779     case IPT_BUTTON1: return BTN1 "White 1";
2780     case IPT_BUTTON2: return BTN2 "Black 1";
2781     case IPT_BUTTON3: return BTN3 "White 2";
2782     case IPT_BUTTON4: return BTN4 "Black 2";
2783     case IPT_BUTTON5: return BTN5 "White 3";
2784     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2785     case IPT_DIAL: return "Scratch";
2786   } /* end of switch */
2787 
2788   return "";
2789 }
2790 
2791 const struct ControlInfo bmcompmx_ctrl =
2792 {
2793   false, /* 45_degree_rotation for joystick(s) */
2794   false, /* alternating_controls */
2795   true, /* mirrored_controls */
2796   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2797   &bmcompmx_get_ctrl_name
2798 };
2799 
bmcompmx_get_ctrl_name(int type)2800 const char *bmcompmx_get_ctrl_name(int type)
2801 {
2802   switch(type)
2803   {
2804     case IPT_BUTTON1: return BTN1 "White 1";
2805     case IPT_BUTTON2: return BTN2 "Black 1";
2806     case IPT_BUTTON3: return BTN3 "White 2";
2807     case IPT_BUTTON4: return BTN4 "Black 2";
2808     case IPT_BUTTON5: return BTN5 "White 3";
2809     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2810     case IPT_DIAL: return "Scratch";
2811   } /* end of switch */
2812 
2813   return "";
2814 }
2815 
2816 const struct ControlInfo bmcompm2_ctrl =
2817 {
2818   false, /* 45_degree_rotation for joystick(s) */
2819   false, /* alternating_controls */
2820   true, /* mirrored_controls */
2821   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2822   &bmcompm2_get_ctrl_name
2823 };
2824 
bmcompm2_get_ctrl_name(int type)2825 const char *bmcompm2_get_ctrl_name(int type)
2826 {
2827   switch(type)
2828   {
2829     case IPT_BUTTON1: return BTN1 "White 1";
2830     case IPT_BUTTON2: return BTN2 "Black 1";
2831     case IPT_BUTTON3: return BTN3 "White 2";
2832     case IPT_BUTTON4: return BTN4 "Black 2";
2833     case IPT_BUTTON5: return BTN5 "White 3";
2834     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2835     case IPT_DIAL: return "Scratch";
2836   } /* end of switch */
2837 
2838   return "";
2839 }
2840 
2841 const struct ControlInfo bmcorerm_ctrl =
2842 {
2843   false, /* 45_degree_rotation for joystick(s) */
2844   false, /* alternating_controls */
2845   true, /* mirrored_controls */
2846   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2847   &bmcorerm_get_ctrl_name
2848 };
2849 
bmcorerm_get_ctrl_name(int type)2850 const char *bmcorerm_get_ctrl_name(int type)
2851 {
2852   switch(type)
2853   {
2854     case IPT_BUTTON1: return BTN1 "White 1";
2855     case IPT_BUTTON2: return BTN2 "Black 1";
2856     case IPT_BUTTON3: return BTN3 "White 2";
2857     case IPT_BUTTON4: return BTN4 "Black 2";
2858     case IPT_BUTTON5: return BTN5 "White 3";
2859     case IPT_DIAL: return "Scratch";
2860     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2861   } /* end of switch */
2862 
2863   return "";
2864 }
2865 
2866 const struct ControlInfo bmdct_ctrl =
2867 {
2868   false, /* 45_degree_rotation for joystick(s) */
2869   false, /* alternating_controls */
2870   true, /* mirrored_controls */
2871   "This game uses a musical 'keyboard' and Turntable. The keyboard is actually 5 trivia buttons rotated 90 degrees, arranged like a section of a piano.    This game has a 6th button next to the start buttons on the control panel labeled 'Effector'. The button is mapped to start3 in mame because of it's physical position and this seems to make the most sense. As the button doesn't really impact gameplay, we'll simply ignore it for now.", /* control_details */
2872   &bmdct_get_ctrl_name
2873 };
2874 
bmdct_get_ctrl_name(int type)2875 const char *bmdct_get_ctrl_name(int type)
2876 {
2877   switch(type)
2878   {
2879     case IPT_BUTTON1: return BTN1 "White 1";
2880     case IPT_BUTTON2: return BTN2 "Black 1";
2881     case IPT_BUTTON3: return BTN3 "White 2";
2882     case IPT_BUTTON4: return BTN4 "Black 2";
2883     case IPT_BUTTON5: return BTN5 "White 3";
2884     case IPT_DIAL: return "Scratch";
2885     case (IPT_DIAL + IPT_EXTENSION): return "Scratch";
2886   } /* end of switch */
2887 
2888   return "";
2889 }
2890 
2891 const struct ControlInfo beezer_ctrl =
2892 {
2893   false, /* 45_degree_rotation for joystick(s) */
2894   true, /* alternating_controls */
2895   true, /* mirrored_controls */
2896   "", /* control_details */
2897   &beezer_get_ctrl_name
2898 };
2899 
beezer_get_ctrl_name(int type)2900 const char *beezer_get_ctrl_name(int type)
2901 {
2902   switch(type)
2903   {
2904     case IPT_TRACKBALL_X: return "Left";
2905     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
2906     case IPT_TRACKBALL_Y: return "Up";
2907     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
2908   } /* end of switch */
2909 
2910   return "";
2911 }
2912 
2913 const struct ControlInfo bel_ctrl =
2914 {
2915   false, /* 45_degree_rotation for joystick(s) */
2916   false, /* alternating_controls */
2917   true, /* mirrored_controls */
2918   "Mame has 4 buttons for this game, but it's leftover from the generic model 2 driver. Only the trigger button and grenade button, both monunted on the gun, exist.", /* control_details */
2919   &bel_get_ctrl_name
2920 };
2921 
bel_get_ctrl_name(int type)2922 const char *bel_get_ctrl_name(int type)
2923 {
2924   switch(type)
2925   {
2926     case IPT_BUTTON1: return BTN1 "Fire";
2927     case IPT_BUTTON2: return BTN2 "Grenade";
2928     case IPT_LIGHTGUN_X: return "Aim Left";
2929     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
2930     case IPT_LIGHTGUN_Y: return "Aim Up";
2931     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
2932   } /* end of switch */
2933 
2934   return "";
2935 }
2936 
2937 const struct ControlInfo blswhstl_ctrl =
2938 {
2939   false, /* 45_degree_rotation for joystick(s) */
2940   false, /* alternating_controls */
2941   true, /* mirrored_controls */
2942   "Both buttons do the same thing. The review on gamefaqs says there is only 1 button, but the game is using the tmnt.c driver which has 2 buttons as default for all games", /* control_details */
2943   &blswhstl_get_ctrl_name
2944 };
2945 
blswhstl_get_ctrl_name(int type)2946 const char *blswhstl_get_ctrl_name(int type)
2947 {
2948   switch(type)
2949   {
2950     case IPT_BUTTON1: return BTN1 "Fire";
2951     case IPT_BUTTON2: return BTN2 "Fire";
2952   } /* end of switch */
2953 
2954   return joy4way_labels(type);
2955 }
2956 
2957 const struct ControlInfo berabohm_ctrl =
2958 {
2959   false, /* 45_degree_rotation for joystick(s) */
2960   true, /* alternating_controls */
2961   true, /* mirrored_controls */
2962   "Original game has 2 pressure sensitive buttons but mame is hacked to 4 buttons. To do the hard attack, press buttons 1 and 2 together, for high jump, press buttons 3 and 4 together. Taken from the driver (namcos1.c)   Notes: The berabohm buttons don't work too well. The real thing has a special pressure sensitive button, with two switches. The harder you push the button, the faster the two switches are closed one after another. Due to MAME's limited input sample rate (once per frame) it is difficult to measure the time between the two. Buttons (pressure sensitive) each button has two switches: the first is closed as soon as the button is pressed, the second a little later, depending on how hard the button is pressed. 	bits 0-5 control strength (0x00 = max 0x3f = min) 	bit 6 indicates the button is pressed 	bit 7 is not actually read by the game but I use it to simulate the second switch", /* control_details */
2963   &berabohm_get_ctrl_name
2964 };
2965 
berabohm_get_ctrl_name(int type)2966 const char *berabohm_get_ctrl_name(int type)
2967 {
2968   switch(type)
2969   {
2970     case IPT_BUTTON1: return BTN1 "Attack";
2971     case IPT_BUTTON2: return BTN2 "Hard Attack";
2972     case IPT_BUTTON3: return BTN3 "Jump";
2973     case IPT_BUTTON4: return BTN4 "High Jump";
2974   } /* end of switch */
2975 
2976   return joy4way_labels(type);
2977 }
2978 
2979 const struct ControlInfo bermudat_ctrl =
2980 {
2981   false, /* 45_degree_rotation for joystick(s) */
2982   false, /* alternating_controls */
2983   true, /* mirrored_controls */
2984   "Button two changes the formation of the picked up small shield airplanes.", /* control_details */
2985   &bermudat_get_ctrl_name
2986 };
2987 
bermudat_get_ctrl_name(int type)2988 const char *bermudat_get_ctrl_name(int type)
2989 {
2990   switch(type)
2991   {
2992     case IPT_BUTTON1: return BTN1 "Fire";
2993     case IPT_BUTTON2: return BTN2 "??";
2994     case IPT_DIAL: return "Left";
2995     case (IPT_DIAL + IPT_EXTENSION): return "Right";
2996   } /* end of switch */
2997 
2998   return joy4way_labels(type);
2999 }
3000 
3001 const struct ControlInfo berzerk_ctrl =
3002 {
3003   false, /* 45_degree_rotation for joystick(s) */
3004   true, /* alternating_controls */
3005   true, /* mirrored_controls */
3006   "This game was shipped out the door with a 8 way optical joystick. The joystick behaved exactly like a regular 8 way joystick except it was constantly failing. It was so bad that Stern recalled the orignal joystick and offered free leaf replacments to all the owners. So for the history books this game didn't use a regular 8 way, but in actuality it did 99 percent of the time.", /* control_details */
3007   &berzerk_get_ctrl_name
3008 };
3009 
berzerk_get_ctrl_name(int type)3010 const char *berzerk_get_ctrl_name(int type)
3011 {
3012   switch(type)
3013   {
3014     case IPT_BUTTON1: return BTN1 "Fire";
3015   } /* end of switch */
3016 
3017   return joy4way_labels(type);
3018 }
3019 
3020 const struct ControlInfo bigevglf_ctrl =
3021 {
3022   false, /* 45_degree_rotation for joystick(s) */
3023   true, /* alternating_controls */
3024   true, /* mirrored_controls */
3025   "Button is on either side of the trackball. Button 2 is only used in cocktail mode.", /* control_details */
3026   &bigevglf_get_ctrl_name
3027 };
3028 
bigevglf_get_ctrl_name(int type)3029 const char *bigevglf_get_ctrl_name(int type)
3030 {
3031   switch(type)
3032   {
3033     case IPT_BUTTON1: return BTN1 "Club Select";
3034     case IPT_BUTTON2: return BTN2 "Club Select (2P)";
3035     case IPT_TRACKBALL_Y: return "Up";
3036     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3037     case IPT_TRACKBALL_X: return "Left";
3038     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3039   } /* end of switch */
3040 
3041   return "";
3042 }
3043 
3044 const struct ControlInfo bigkarnk_ctrl =
3045 {
3046   false, /* 45_degree_rotation for joystick(s) */
3047   false, /* alternating_controls */
3048   true, /* mirrored_controls */
3049   "", /* control_details */
3050   &bigkarnk_get_ctrl_name
3051 };
3052 
bigkarnk_get_ctrl_name(int type)3053 const char *bigkarnk_get_ctrl_name(int type)
3054 {
3055   switch(type)
3056   {
3057     case IPT_BUTTON1: return BTN1 "Shot";
3058     case IPT_BUTTON2: return BTN2 "Jump";
3059   } /* end of switch */
3060 
3061   return joy4way_labels(type);
3062 }
3063 
3064 const struct ControlInfo bigrun_ctrl =
3065 {
3066   false, /* 45_degree_rotation for joystick(s) */
3067   false, /* alternating_controls */
3068   false, /* mirrored_controls */
3069   "Obviously the horn button isn't labeled, but is the horn on the wheel.", /* control_details */
3070   &bigrun_get_ctrl_name
3071 };
3072 
bigrun_get_ctrl_name(int type)3073 const char *bigrun_get_ctrl_name(int type)
3074 {
3075   switch(type)
3076   {
3077     case IPT_BUTTON1: return BTN1 "Accelerate";
3078     case IPT_BUTTON2: return BTN2 "Brake";
3079     case IPT_BUTTON3: return BTN3 "Low";
3080     case IPT_BUTTON4: return BTN4 "High";
3081     case IPT_BUTTON5: return BTN5 "Horn";
3082     case IPT_PADDLE: return "Left";
3083     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
3084   } /* end of switch */
3085 
3086   return "";
3087 }
3088 
3089 const struct ControlInfo bigstrik_ctrl =
3090 {
3091   false, /* 45_degree_rotation for joystick(s) */
3092   false, /* alternating_controls */
3093   true, /* mirrored_controls */
3094   "In offense A-Short Pass, B-Long Pass/Shoot, C-Fake Play In defense A-Sliding Tackle, B-Steal", /* control_details */
3095   &bigstrik_get_ctrl_name
3096 };
3097 
bigstrik_get_ctrl_name(int type)3098 const char *bigstrik_get_ctrl_name(int type)
3099 {
3100   switch(type)
3101   {
3102     case IPT_BUTTON1: return BTN1 "A";
3103     case IPT_BUTTON2: return BTN2 "B";
3104     case IPT_BUTTON3: return BTN3 "C";
3105   } /* end of switch */
3106 
3107   return joy4way_labels(type);
3108 }
3109 
3110 const struct ControlInfo bigtwin_ctrl =
3111 {
3112   false, /* 45_degree_rotation for joystick(s) */
3113   false, /* alternating_controls */
3114   true, /* mirrored_controls */
3115   "Couldn?t find what the actually button is called on the panel but by pressing it you cause the hand on the screen to grab a ball", /* control_details */
3116   &bigtwin_get_ctrl_name
3117 };
3118 
bigtwin_get_ctrl_name(int type)3119 const char *bigtwin_get_ctrl_name(int type)
3120 {
3121   switch(type)
3122   {
3123     case IPT_BUTTON1: return BTN1 "Grab";
3124   } /* end of switch */
3125 
3126   return joy4way_labels(type);
3127 }
3128 
3129 const struct ControlInfo bbonk_ctrl =
3130 {
3131   false, /* 45_degree_rotation for joystick(s) */
3132   false, /* alternating_controls */
3133   true, /* mirrored_controls */
3134   "Driver(lazercmd.c) has the controls as joystick while Klov states directional buttons - couldn't find any CPO pics", /* control_details */
3135   &bbonk_get_ctrl_name
3136 };
3137 
bbonk_get_ctrl_name(int type)3138 const char *bbonk_get_ctrl_name(int type)
3139 {
3140   return joy4way_labels(type);
3141 }
3142 
3143 const struct ControlInfo bioatack_ctrl =
3144 {
3145   false, /* 45_degree_rotation for joystick(s) */
3146   true, /* alternating_controls */
3147   true, /* mirrored_controls */
3148   "", /* control_details */
3149   &bioatack_get_ctrl_name
3150 };
3151 
bioatack_get_ctrl_name(int type)3152 const char *bioatack_get_ctrl_name(int type)
3153 {
3154   switch(type)
3155   {
3156     case IPT_BUTTON1: return BTN1 "Fire";
3157   } /* end of switch */
3158 
3159   return joy4way_labels(type);
3160 }
3161 
3162 const struct ControlInfo bioship_ctrl =
3163 {
3164   false, /* 45_degree_rotation for joystick(s) */
3165   false, /* alternating_controls */
3166   true, /* mirrored_controls */
3167   "Super-Fire is achived by holding down the Fire button until the meter at the lower end of the screen reads full. Holding the Cursor button down causes the Paladin to remain stationary and the cursor can be moved around the screen using the joystick", /* control_details */
3168   &bioship_get_ctrl_name
3169 };
3170 
bioship_get_ctrl_name(int type)3171 const char *bioship_get_ctrl_name(int type)
3172 {
3173   switch(type)
3174   {
3175     case IPT_BUTTON1: return BTN1 "Fire";
3176     case IPT_BUTTON2: return BTN2 "Cursor";
3177   } /* end of switch */
3178 
3179   return joy4way_labels(type);
3180 }
3181 
3182 const struct ControlInfo biofreak_ctrl =
3183 {
3184   false, /* 45_degree_rotation for joystick(s) */
3185   false, /* alternating_controls */
3186   true, /* mirrored_controls */
3187   "", /* control_details */
3188   &biofreak_get_ctrl_name
3189 };
3190 
biofreak_get_ctrl_name(int type)3191 const char *biofreak_get_ctrl_name(int type)
3192 {
3193   switch(type)
3194   {
3195     case IPT_BUTTON1: return BTN1 "Left Punch";
3196     case IPT_BUTTON2: return BTN2 "Right Punch";
3197     case IPT_BUTTON3: return BTN3 "Fire/Shield";
3198     case IPT_BUTTON4: return BTN4 "Left Kick";
3199     case IPT_BUTTON5: return BTN5 "Right Kick";
3200     case IPT_BUTTON6: return BTN6 "Hover";
3201   } /* end of switch */
3202 
3203   return joy4way_labels(type);
3204 }
3205 
3206 const struct ControlInfo biomtoy_ctrl =
3207 {
3208   false, /* 45_degree_rotation for joystick(s) */
3209   false, /* alternating_controls */
3210   false, /* mirrored_controls */
3211   "Game is only 1 player while the driver (gaelco.c) has 2.", /* control_details */
3212   &biomtoy_get_ctrl_name
3213 };
3214 
biomtoy_get_ctrl_name(int type)3215 const char *biomtoy_get_ctrl_name(int type)
3216 {
3217   switch(type)
3218   {
3219     case IPT_BUTTON1: return BTN1 "Fire";
3220     case IPT_BUTTON2: return BTN2 "Jump";
3221   } /* end of switch */
3222 
3223   return joy4way_labels(type);
3224 }
3225 
3226 const struct ControlInfo bionicc_ctrl =
3227 {
3228   false, /* 45_degree_rotation for joystick(s) */
3229   true, /* alternating_controls */
3230   true, /* mirrored_controls */
3231   "", /* control_details */
3232   &bionicc_get_ctrl_name
3233 };
3234 
bionicc_get_ctrl_name(int type)3235 const char *bionicc_get_ctrl_name(int type)
3236 {
3237   switch(type)
3238   {
3239     case IPT_BUTTON1: return BTN1 "Fire";
3240     case IPT_BUTTON2: return BTN2 "Bionic Reach";
3241   } /* end of switch */
3242 
3243   return joy4way_labels(type);
3244 }
3245 
3246 const struct ControlInfo bking_ctrl =
3247 {
3248   false, /* 45_degree_rotation for joystick(s) */
3249   true, /* alternating_controls */
3250   true, /* mirrored_controls */
3251   "", /* control_details */
3252   &bking_get_ctrl_name
3253 };
3254 
bking_get_ctrl_name(int type)3255 const char *bking_get_ctrl_name(int type)
3256 {
3257   switch(type)
3258   {
3259     case IPT_TRACKBALL_X: return "Left";
3260     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3261     case IPT_TRACKBALL_Y: return "Up";
3262     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3263   } /* end of switch */
3264 
3265   return "";
3266 }
3267 
3268 const struct ControlInfo bking2_ctrl =
3269 {
3270   false, /* 45_degree_rotation for joystick(s) */
3271   true, /* alternating_controls */
3272   true, /* mirrored_controls */
3273   "", /* control_details */
3274   &bking2_get_ctrl_name
3275 };
3276 
bking2_get_ctrl_name(int type)3277 const char *bking2_get_ctrl_name(int type)
3278 {
3279   switch(type)
3280   {
3281     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3282     case IPT_TRACKBALL_Y: return "Up";
3283     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3284     case IPT_TRACKBALL_X: return "Left";
3285   } /* end of switch */
3286 
3287   return "";
3288 }
3289 
3290 const struct ControlInfo bking3_ctrl =
3291 {
3292   false, /* 45_degree_rotation for joystick(s) */
3293   true, /* alternating_controls */
3294   true, /* mirrored_controls */
3295   "", /* control_details */
3296   &bking3_get_ctrl_name
3297 };
3298 
bking3_get_ctrl_name(int type)3299 const char *bking3_get_ctrl_name(int type)
3300 {
3301   switch(type)
3302   {
3303     case IPT_TRACKBALL_X: return "Left";
3304     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3305     case IPT_TRACKBALL_Y: return "Up";
3306     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3307   } /* end of switch */
3308 
3309   return "";
3310 }
3311 
3312 const struct ControlInfo birdtry_ctrl =
3313 {
3314   false, /* 45_degree_rotation for joystick(s) */
3315   true, /* alternating_controls */
3316   true, /* mirrored_controls */
3317   "In game controls lists dial input for both players. I think this is taken from hbarrel which is from the same driver (dec0.c). Shouldn?t be in there. Gameplay - press the options button to change club, swing type and ball spin. Press the swing button to start swing. When red bar on right side of screen reaches desired power press swing again.", /* control_details */
3318   &birdtry_get_ctrl_name
3319 };
3320 
birdtry_get_ctrl_name(int type)3321 const char *birdtry_get_ctrl_name(int type)
3322 {
3323   switch(type)
3324   {
3325     case IPT_BUTTON1: return BTN1 "Swing";
3326     case IPT_BUTTON2: return BTN2 "Options";
3327   } /* end of switch */
3328 
3329   return joy4way_labels(type);
3330 }
3331 
3332 const struct ControlInfo blkheart_ctrl =
3333 {
3334   false, /* 45_degree_rotation for joystick(s) */
3335   false, /* alternating_controls */
3336   true, /* mirrored_controls */
3337   "", /* control_details */
3338   &blkheart_get_ctrl_name
3339 };
3340 
blkheart_get_ctrl_name(int type)3341 const char *blkheart_get_ctrl_name(int type)
3342 {
3343   switch(type)
3344   {
3345     case IPT_BUTTON1: return BTN1 "Fire A";
3346     case IPT_BUTTON2: return BTN2 "Fire B";
3347   } /* end of switch */
3348 
3349   return joy4way_labels(type);
3350 }
3351 
3352 const struct ControlInfo blkhole_ctrl =
3353 {
3354   false, /* 45_degree_rotation for joystick(s) */
3355   true, /* alternating_controls */
3356   true, /* mirrored_controls */
3357   "", /* control_details */
3358   &blkhole_get_ctrl_name
3359 };
3360 
blkhole_get_ctrl_name(int type)3361 const char *blkhole_get_ctrl_name(int type)
3362 {
3363   switch(type)
3364   {
3365     case IPT_BUTTON1: return BTN1 "Shoot";
3366   } /* end of switch */
3367 
3368   return joy2way_labels(type);
3369 }
3370 
3371 const struct ControlInfo blkpnthr_ctrl =
3372 {
3373   false, /* 45_degree_rotation for joystick(s) */
3374   true, /* alternating_controls */
3375   true, /* mirrored_controls */
3376   "No panel pics but that's what the buttons do.", /* control_details */
3377   &blkpnthr_get_ctrl_name
3378 };
3379 
blkpnthr_get_ctrl_name(int type)3380 const char *blkpnthr_get_ctrl_name(int type)
3381 {
3382   switch(type)
3383   {
3384     case IPT_BUTTON1: return BTN1 "Attack";
3385     case IPT_BUTTON2: return BTN2 "Jump";
3386   } /* end of switch */
3387 
3388   return joy4way_labels(type);
3389 }
3390 
3391 const struct ControlInfo blktiger_ctrl =
3392 {
3393   false, /* 45_degree_rotation for joystick(s) */
3394   true, /* alternating_controls */
3395   true, /* mirrored_controls */
3396   "", /* control_details */
3397   &blktiger_get_ctrl_name
3398 };
3399 
blktiger_get_ctrl_name(int type)3400 const char *blktiger_get_ctrl_name(int type)
3401 {
3402   switch(type)
3403   {
3404     case IPT_BUTTON1: return BTN1 "Mace";
3405     case IPT_BUTTON2: return BTN2 "Jump";
3406   } /* end of switch */
3407 
3408   return joy4way_labels(type);
3409 }
3410 
3411 const struct ControlInfo bwidow_ctrl =
3412 {
3413   false, /* 45_degree_rotation for joystick(s) */
3414   true, /* alternating_controls */
3415   true, /* mirrored_controls */
3416   "", /* control_details */
3417   &bwidow_get_ctrl_name
3418 };
3419 
bwidow_get_ctrl_name(int type)3420 const char *bwidow_get_ctrl_name(int type)
3421 {
3422   switch(type)
3423   {
3424     case IPT_JOYSTICKRIGHT_UP: return "Aim Up";
3425     case IPT_JOYSTICKRIGHT_DOWN: return "Aim Down";
3426     case IPT_JOYSTICKRIGHT_LEFT: return "Aim Left";
3427     case IPT_JOYSTICKRIGHT_RIGHT: return "Aim Right";
3428   } /* end of switch */
3429 
3430   return joy4way_labels(type);
3431 }
3432 
3433 const struct ControlInfo bmaster_ctrl =
3434 {
3435   false, /* 45_degree_rotation for joystick(s) */
3436   false, /* alternating_controls */
3437   true, /* mirrored_controls */
3438   "", /* control_details */
3439   &bmaster_get_ctrl_name
3440 };
3441 
bmaster_get_ctrl_name(int type)3442 const char *bmaster_get_ctrl_name(int type)
3443 {
3444   switch(type)
3445   {
3446     case IPT_BUTTON1: return BTN1 "Attack";
3447     case IPT_BUTTON2: return BTN2 "Jump";
3448   } /* end of switch */
3449 
3450   return joy4way_labels(type);
3451 }
3452 
3453 const struct ControlInfo bladestl_ctrl =
3454 {
3455   false, /* 45_degree_rotation for joystick(s) */
3456   false, /* alternating_controls */
3457   true, /* mirrored_controls */
3458   "The Mame driver has inputs for a 8 way joystick as well, but I've yet to find a machine that uses those inputs. It's unknown if this is a hack.", /* control_details */
3459   &bladestl_get_ctrl_name
3460 };
3461 
bladestl_get_ctrl_name(int type)3462 const char *bladestl_get_ctrl_name(int type)
3463 {
3464   switch(type)
3465   {
3466     case IPT_BUTTON1: return BTN1 "Shoot";
3467     case IPT_BUTTON2: return BTN2 "Pass / Face-Off";
3468     case IPT_BUTTON3: return BTN3 "FIGHT!";
3469     case IPT_TRACKBALL_X: return "Left";
3470     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3471     case IPT_TRACKBALL_Y: return "Up";
3472     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3473   } /* end of switch */
3474 
3475   return "";
3476 }
3477 
3478 const struct ControlInfo blandia_ctrl =
3479 {
3480   false, /* 45_degree_rotation for joystick(s) */
3481   false, /* alternating_controls */
3482   true, /* mirrored_controls */
3483   "", /* control_details */
3484   &blandia_get_ctrl_name
3485 };
3486 
blandia_get_ctrl_name(int type)3487 const char *blandia_get_ctrl_name(int type)
3488 {
3489   switch(type)
3490   {
3491     case IPT_BUTTON1: return BTN1 "Attack High";
3492     case IPT_BUTTON2: return BTN2 "Attack Middle";
3493     case IPT_BUTTON3: return BTN3 "Attack Low";
3494   } /* end of switch */
3495 
3496   return joy4way_labels(type);
3497 }
3498 
3499 const struct ControlInfo blastoff_ctrl =
3500 {
3501   false, /* 45_degree_rotation for joystick(s) */
3502   true, /* alternating_controls */
3503   true, /* mirrored_controls */
3504   "Driver (namcos1.c) has standard 3 button layout although only 2 are required", /* control_details */
3505   &blastoff_get_ctrl_name
3506 };
3507 
blastoff_get_ctrl_name(int type)3508 const char *blastoff_get_ctrl_name(int type)
3509 {
3510   switch(type)
3511   {
3512     case IPT_BUTTON1: return BTN1 "Fire";
3513     case IPT_BUTTON2: return BTN2 "Change Weapon";
3514     case IPT_BUTTON3: return BTN3 "NA";
3515   } /* end of switch */
3516 
3517   return joy4way_labels(type);
3518 }
3519 
3520 const struct ControlInfo blasted_ctrl =
3521 {
3522   false, /* 45_degree_rotation for joystick(s) */
3523   false, /* alternating_controls */
3524   true, /* mirrored_controls */
3525   "", /* control_details */
3526   &blasted_get_ctrl_name
3527 };
3528 
blasted_get_ctrl_name(int type)3529 const char *blasted_get_ctrl_name(int type)
3530 {
3531   switch(type)
3532   {
3533     case IPT_BUTTON1: return BTN1 "Fire";
3534     case IPT_JOYSTICK_UP: return "Aim Up";
3535     case IPT_JOYSTICK_DOWN: return "Aim Down";
3536     case IPT_JOYSTICK_LEFT: return "Aim Left";
3537     case IPT_JOYSTICK_RIGHT: return "Aim Right";
3538   } /* end of switch */
3539 
3540   return "";
3541 }
3542 
3543 const struct ControlInfo blaster_ctrl =
3544 {
3545   false, /* 45_degree_rotation for joystick(s) */
3546   true, /* alternating_controls */
3547   true, /* mirrored_controls */
3548   "This game uses a 49-way optical triggerstick with thumb button. The buttons are repeated on the control panel. The game uses aircraft style controls - Pull back on the stick to climb.", /* control_details */
3549   &blaster_get_ctrl_name
3550 };
3551 
blaster_get_ctrl_name(int type)3552 const char *blaster_get_ctrl_name(int type)
3553 {
3554   switch(type)
3555   {
3556     case IPT_BUTTON1: return BTN1 "Blast";
3557     case IPT_BUTTON2: return BTN2 "Thrust";
3558     case IPT_BUTTON3: return BTN3 "Unknown";
3559     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
3560     case IPT_AD_STICK_Y: return "Up";
3561     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
3562     case IPT_AD_STICK_X: return "Left";
3563   } /* end of switch */
3564 
3565   return "";
3566 }
3567 
3568 const struct ControlInfo blstroid_ctrl =
3569 {
3570   false, /* 45_degree_rotation for joystick(s) */
3571   false, /* alternating_controls */
3572   true, /* mirrored_controls */
3573   "", /* control_details */
3574   &blstroid_get_ctrl_name
3575 };
3576 
blstroid_get_ctrl_name(int type)3577 const char *blstroid_get_ctrl_name(int type)
3578 {
3579   switch(type)
3580   {
3581     case IPT_BUTTON1: return BTN1 "Fire";
3582     case IPT_BUTTON2: return BTN2 "Thrust";
3583     case IPT_BUTTON3: return BTN3 "Transform:  Armor, Shots, Speed";
3584     case IPT_DIAL: return "Rotate Ship Left";
3585     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Ship Right";
3586   } /* end of switch */
3587 
3588   return "";
3589 }
3590 
3591 const struct ControlInfo blasto_ctrl =
3592 {
3593   false, /* 45_degree_rotation for joystick(s) */
3594   false, /* alternating_controls */
3595   true, /* mirrored_controls */
3596   "Cocktail cabinet had directional buttons (up/down/left/right) while upright had joysticks. Clearly seen on the arcadeflyer link", /* control_details */
3597   &blasto_get_ctrl_name
3598 };
3599 
blasto_get_ctrl_name(int type)3600 const char *blasto_get_ctrl_name(int type)
3601 {
3602   switch(type)
3603   {
3604     case IPT_BUTTON1: return BTN1 "Fire";
3605   } /* end of switch */
3606 
3607   return joy4way_labels(type);
3608 }
3609 
3610 const struct ControlInfo blazeon_ctrl =
3611 {
3612   false, /* 45_degree_rotation for joystick(s) */
3613   false, /* alternating_controls */
3614   true, /* mirrored_controls */
3615   "Editor's note:  The control panel on this gmae labels the buttons simply as 'A' and 'B' but I felt it would be ok to simply put the actual functions as described in the flyer. As this game was often sold as a conversion kit, we can assume that the flyer used the labels 'A' and 'B' because that is the 'jamma standard' labeling scheme. A = Normal shot, B = Special Weapon / Attack", /* control_details */
3616   &blazeon_get_ctrl_name
3617 };
3618 
blazeon_get_ctrl_name(int type)3619 const char *blazeon_get_ctrl_name(int type)
3620 {
3621   switch(type)
3622   {
3623     case IPT_BUTTON1: return BTN1 "Normal Shot";
3624     case IPT_BUTTON2: return BTN2 "Special Weapon / Attack";
3625   } /* end of switch */
3626 
3627   return joy4way_labels(type);
3628 }
3629 
3630 const struct ControlInfo blockout_ctrl =
3631 {
3632   false, /* 45_degree_rotation for joystick(s) */
3633   false, /* alternating_controls */
3634   true, /* mirrored_controls */
3635   "Note that oddly enough, the drop button, which is on the top-fire is the 4th button, not the first. Button A rotates on the Z axis, B on the Y axis, and C on the Ry. If you can't follow that just try the game an you will cath on.", /* control_details */
3636   &blockout_get_ctrl_name
3637 };
3638 
blockout_get_ctrl_name(int type)3639 const char *blockout_get_ctrl_name(int type)
3640 {
3641   switch(type)
3642   {
3643     case IPT_BUTTON1: return BTN1 "A Button";
3644     case IPT_BUTTON2: return BTN2 "B Button";
3645     case IPT_BUTTON3: return BTN3 "C Button";
3646     case IPT_BUTTON4: return BTN4 "Drop";
3647   } /* end of switch */
3648 
3649   return joy4way_labels(type);
3650 }
3651 
3652 const struct ControlInfo blockade_ctrl =
3653 {
3654   false, /* 45_degree_rotation for joystick(s) */
3655   false, /* alternating_controls */
3656   true, /* mirrored_controls */
3657   "", /* control_details */
3658   &blockade_get_ctrl_name
3659 };
3660 
blockade_get_ctrl_name(int type)3661 const char *blockade_get_ctrl_name(int type)
3662 {
3663   return joy4way_labels(type);
3664 }
3665 
3666 const struct ControlInfo bloodbro_ctrl =
3667 {
3668   false, /* 45_degree_rotation for joystick(s) */
3669   false, /* alternating_controls */
3670   true, /* mirrored_controls */
3671   "", /* control_details */
3672   &bloodbro_get_ctrl_name
3673 };
3674 
bloodbro_get_ctrl_name(int type)3675 const char *bloodbro_get_ctrl_name(int type)
3676 {
3677   switch(type)
3678   {
3679     case IPT_BUTTON1: return BTN1 "Fire";
3680     case IPT_BUTTON2: return BTN2 "Roll";
3681     case IPT_BUTTON3: return BTN3 "Dynamite";
3682   } /* end of switch */
3683 
3684   return joy4way_labels(type);
3685 }
3686 
3687 const struct ControlInfo bloxeed_ctrl =
3688 {
3689   false, /* 45_degree_rotation for joystick(s) */
3690   false, /* alternating_controls */
3691   true, /* mirrored_controls */
3692   "", /* control_details */
3693   &bloxeed_get_ctrl_name
3694 };
3695 
bloxeed_get_ctrl_name(int type)3696 const char *bloxeed_get_ctrl_name(int type)
3697 {
3698   switch(type)
3699   {
3700     case IPT_BUTTON1: return BTN1 "Rotate";
3701   } /* end of switch */
3702 
3703   return joy4way_labels(type);
3704 }
3705 
3706 const struct ControlInfo blueprnt_ctrl =
3707 {
3708   false, /* 45_degree_rotation for joystick(s) */
3709   true, /* alternating_controls */
3710   true, /* mirrored_controls */
3711   "", /* control_details */
3712   &blueprnt_get_ctrl_name
3713 };
3714 
blueprnt_get_ctrl_name(int type)3715 const char *blueprnt_get_ctrl_name(int type)
3716 {
3717   switch(type)
3718   {
3719     case IPT_BUTTON1: return BTN1 "Run";
3720     case IPT_JOYSTICK_UP: return "Walk Up";
3721     case IPT_JOYSTICK_DOWN: return "Walk Down";
3722     case IPT_JOYSTICK_LEFT: return "Walk Left";
3723     case IPT_JOYSTICK_RIGHT: return "Walk Right";
3724   } /* end of switch */
3725 
3726   return "";
3727 }
3728 
3729 const struct ControlInfo blueshrk_ctrl =
3730 {
3731   false, /* 45_degree_rotation for joystick(s) */
3732   false, /* alternating_controls */
3733   false, /* mirrored_controls */
3734   "This game actually used a one axis positional gun shaped to look like a spear gun. The spear shoots from the bottom of the screen and travels all the way to the top so just one axis is needed.", /* control_details */
3735   &blueshrk_get_ctrl_name
3736 };
3737 
blueshrk_get_ctrl_name(int type)3738 const char *blueshrk_get_ctrl_name(int type)
3739 {
3740   switch(type)
3741   {
3742     case IPT_PADDLE: return "Aim Left";
3743     case (IPT_PADDLE + IPT_EXTENSION): return "Aim Right";
3744   } /* end of switch */
3745 
3746   return "";
3747 }
3748 
3749 const struct ControlInfo bodyslam_ctrl =
3750 {
3751   false, /* 45_degree_rotation for joystick(s) */
3752   false, /* alternating_controls */
3753   true, /* mirrored_controls */
3754   "Press help when near team mate to tag Press punch + kick and a direction to run Press punch when opponent on ground to pick them up Press kick to pin Press help to get up off the ground", /* control_details */
3755   &bodyslam_get_ctrl_name
3756 };
3757 
bodyslam_get_ctrl_name(int type)3758 const char *bodyslam_get_ctrl_name(int type)
3759 {
3760   switch(type)
3761   {
3762     case IPT_BUTTON1: return BTN1 "Punch";
3763     case IPT_BUTTON2: return BTN2 "Kick";
3764     case IPT_BUTTON3: return BTN3 "Help";
3765   } /* end of switch */
3766 
3767   return joy4way_labels(type);
3768 }
3769 
3770 const struct ControlInfo bogeyman_ctrl =
3771 {
3772   false, /* 45_degree_rotation for joystick(s) */
3773   true, /* alternating_controls */
3774   true, /* mirrored_controls */
3775   "Button A to swing the rod Button B Trick button (this can be used to jump when the player changes shape)or to trick the ghosts", /* control_details */
3776   &bogeyman_get_ctrl_name
3777 };
3778 
bogeyman_get_ctrl_name(int type)3779 const char *bogeyman_get_ctrl_name(int type)
3780 {
3781   switch(type)
3782   {
3783     case IPT_BUTTON1: return BTN1 "A";
3784     case IPT_BUTTON2: return BTN2 "B";
3785   } /* end of switch */
3786 
3787   return joy4way_labels(type);
3788 }
3789 
3790 const struct ControlInfo bombjack_ctrl =
3791 {
3792   false, /* 45_degree_rotation for joystick(s) */
3793   true, /* alternating_controls */
3794   true, /* mirrored_controls */
3795   "", /* control_details */
3796   &bombjack_get_ctrl_name
3797 };
3798 
bombjack_get_ctrl_name(int type)3799 const char *bombjack_get_ctrl_name(int type)
3800 {
3801   switch(type)
3802   {
3803     case IPT_BUTTON1: return BTN1 "Jump";
3804   } /* end of switch */
3805 
3806   return joy4way_labels(type);
3807 }
3808 
3809 const struct ControlInfo boogwing_ctrl =
3810 {
3811   false, /* 45_degree_rotation for joystick(s) */
3812   false, /* alternating_controls */
3813   true, /* mirrored_controls */
3814   "Each player starts with a single bomb attached to their plane by a hook. Once dropped the hook can be used to pick up any land-based objects and drop them at will with the bomb button. Once the player's plane is shot down, they can run on land and fire with a pistol until hit.", /* control_details */
3815   &boogwing_get_ctrl_name
3816 };
3817 
boogwing_get_ctrl_name(int type)3818 const char *boogwing_get_ctrl_name(int type)
3819 {
3820   switch(type)
3821   {
3822     case IPT_BUTTON1: return BTN1 "Fire";
3823     case IPT_BUTTON2: return BTN2 "Bomb";
3824   } /* end of switch */
3825 
3826   return joy4way_labels(type);
3827 }
3828 
3829 const struct ControlInfo boothill_ctrl =
3830 {
3831   false, /* 45_degree_rotation for joystick(s) */
3832   false, /* alternating_controls */
3833   true, /* mirrored_controls */
3834   "This game did NOT have a paddle but something, that for lack of a better description, is a 'paddle gun'. It's similar to the T2 analog guns but with a single axis.", /* control_details */
3835   &boothill_get_ctrl_name
3836 };
3837 
boothill_get_ctrl_name(int type)3838 const char *boothill_get_ctrl_name(int type)
3839 {
3840   switch(type)
3841   {
3842     case IPT_BUTTON1: return BTN1 "Fire";
3843     case IPT_PADDLE: return "Aim Left";
3844     case (IPT_PADDLE + IPT_EXTENSION): return "Aim Right";
3845   } /* end of switch */
3846 
3847   return joy4way_labels(type);
3848 }
3849 
3850 const struct ControlInfo bosco_ctrl =
3851 {
3852   false, /* 45_degree_rotation for joystick(s) */
3853   true, /* alternating_controls */
3854   true, /* mirrored_controls */
3855   "", /* control_details */
3856   &bosco_get_ctrl_name
3857 };
3858 
bosco_get_ctrl_name(int type)3859 const char *bosco_get_ctrl_name(int type)
3860 {
3861   switch(type)
3862   {
3863     case IPT_BUTTON1:        return BTN1 "Fire";
3864   } /* end of switch */
3865 
3866   return joy4way_labels(type);
3867 }
3868 
3869 const struct ControlInfo bottom9_ctrl =
3870 {
3871   false, /* 45_degree_rotation for joystick(s) */
3872   false, /* alternating_controls */
3873   true, /* mirrored_controls */
3874   "Buttons A and B do various things. According to the manual, A= 'Throw/Swing/Go' and B = 'Select/Bunt/Back'", /* control_details */
3875   &bottom9_get_ctrl_name
3876 };
3877 
bottom9_get_ctrl_name(int type)3878 const char *bottom9_get_ctrl_name(int type)
3879 {
3880   switch(type)
3881   {
3882     case IPT_BUTTON1: return BTN1 "A";
3883     case IPT_BUTTON2: return BTN2 "B";
3884   } /* end of switch */
3885 
3886   return joy4way_labels(type);
3887 }
3888 
3889 const struct ControlInfo bouldash_ctrl =
3890 {
3891   false, /* 45_degree_rotation for joystick(s) */
3892   true, /* alternating_controls */
3893   true, /* mirrored_controls */
3894   "", /* control_details */
3895   &bouldash_get_ctrl_name
3896 };
3897 
bouldash_get_ctrl_name(int type)3898 const char *bouldash_get_ctrl_name(int type)
3899 {
3900   return joy4way_labels(type);
3901 }
3902 
3903 const struct ControlInfo bowler_ctrl =
3904 {
3905   false, /* 45_degree_rotation for joystick(s) */
3906   true, /* alternating_controls */
3907   true, /* mirrored_controls */
3908   "4 players alternate with the same trackball in the upright cab. Mame doesn't have cocktail mode, but KLOV shows a two trackball cocktail.", /* control_details */
3909   &bowler_get_ctrl_name
3910 };
3911 
bowler_get_ctrl_name(int type)3912 const char *bowler_get_ctrl_name(int type)
3913 {
3914   switch(type)
3915   {
3916     case IPT_BUTTON1: return BTN1 "Straight/Hook";
3917     case IPT_BUTTON2: return BTN2 "??";
3918     case IPT_TRACKBALL_Y: return "Up";
3919     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
3920     case IPT_TRACKBALL_X: return "Left";
3921     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
3922   } /* end of switch */
3923 
3924   return "";
3925 }
3926 
3927 const struct ControlInfo boxingb_ctrl =
3928 {
3929   false, /* 45_degree_rotation for joystick(s) */
3930   true, /* alternating_controls */
3931   true, /* mirrored_controls */
3932   "The dial is actually labeled rotation control. The buttons don't have labels, rather they have pictures of a rocket and a boxing glove respectively.", /* control_details */
3933   &boxingb_get_ctrl_name
3934 };
3935 
boxingb_get_ctrl_name(int type)3936 const char *boxingb_get_ctrl_name(int type)
3937 {
3938   switch(type)
3939   {
3940     case IPT_BUTTON1: return BTN1 "Rocket";
3941     case IPT_BUTTON2: return BTN2 "Punch";
3942     case IPT_DIAL: return "Rotate Left";
3943     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
3944   } /* end of switch */
3945 
3946   return "";
3947 }
3948 
3949 const struct ControlInfo bradley_ctrl =
3950 {
3951   false, /* 45_degree_rotation for joystick(s) */
3952   false, /* alternating_controls */
3953   false, /* mirrored_controls */
3954   "I've made an executive decision on this one. Since it's a prototype and there aren't any good pics of the control panel, I've decided to list the labels given in mame (which are not correct) and describe how the actual machine worked. First off we have a yoke designed for this military conversion. If not for this game, there wouldn't be a star wars yoke. The range of the shot was controlled by an analog dial on the bezel. Next to that was a digital knob that controlled the magnification. The game originally had a toggle switch that doesn't seem to be included in mame. My guess is that it was never hooked up to anything (this prototype was a mess and was never finished). Please note that all buttons save the first hae hard-coded mappings.", /* control_details */
3955   &bradley_get_ctrl_name
3956 };
3957 
bradley_get_ctrl_name(int type)3958 const char *bradley_get_ctrl_name(int type)
3959 {
3960   switch(type)
3961   {
3962 /* P1NumButtons=10 */
3963     case IPT_BUTTON1: return BTN1 "Fire";
3964     case IPT_BUTTON10: return "Magnification Toggle";
3965     case IPT_BUTTON2: return BTN2 "Armor Piercing (Single Shot)";
3966     case IPT_BUTTON3: return BTN3 "High Explosive (Single Shot)";
3967     case IPT_BUTTON4: return BTN4 "Armor Piercing (Low Rate)";
3968     case IPT_BUTTON5: return BTN5 "High Explosive (Low Rate)";
3969     case IPT_BUTTON6: return BTN6 "Armor Piercing (High Rate)";
3970     case IPT_BUTTON7: return BTN7 "High Explosive (High Rate)";
3971     case IPT_BUTTON8: return BTN7 "Select Tow Missiles";
3972     case IPT_BUTTON9: return "7.62 mm Machine Gun";
3973     case (IPT_AD_STICK_Z + IPT_EXTENSION): return "Decrease Range";
3974     case IPT_AD_STICK_Z: return "Increase Range";
3975     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Aim Right";
3976     case IPT_AD_STICK_X: return "Aim Left";
3977     case IPT_AD_STICK_Y: return "Aim Up";
3978     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Aim Down";
3979   } /* end of switch */
3980 
3981   return "";
3982 }
3983 
3984 const struct ControlInfo brkthru_ctrl =
3985 {
3986   false, /* 45_degree_rotation for joystick(s) */
3987   true, /* alternating_controls */
3988   true, /* mirrored_controls */
3989   "This game's official overlay didn't have any labels. These are labels.", /* control_details */
3990   &brkthru_get_ctrl_name
3991 };
3992 
brkthru_get_ctrl_name(int type)3993 const char *brkthru_get_ctrl_name(int type)
3994 {
3995   switch(type)
3996   {
3997     case IPT_BUTTON1: return BTN1 "Attack";
3998     case IPT_BUTTON2: return BTN2 "Fire";
3999   } /* end of switch */
4000 
4001   return joy4way_labels(type);
4002 }
4003 
4004 const struct ControlInfo bublbobl_ctrl =
4005 {
4006   false, /* 45_degree_rotation for joystick(s) */
4007   false, /* alternating_controls */
4008   true, /* mirrored_controls */
4009   "", /* control_details */
4010   &bublbobl_get_ctrl_name
4011 };
4012 
bublbobl_get_ctrl_name(int type)4013 const char *bublbobl_get_ctrl_name(int type)
4014 {
4015   switch(type)
4016   {
4017     case IPT_BUTTON1: return BTN1 "Bubble";
4018     case IPT_BUTTON2: return BTN2 "Jump";
4019   } /* end of switch */
4020 
4021   return joy2way_labels(type);
4022 }
4023 
4024 const struct ControlInfo bubbles_ctrl =
4025 {
4026   false, /* 45_degree_rotation for joystick(s) */
4027   true, /* alternating_controls */
4028   true, /* mirrored_controls */
4029   "", /* control_details */
4030   &bubbles_get_ctrl_name
4031 };
4032 
bubbles_get_ctrl_name(int type)4033 const char *bubbles_get_ctrl_name(int type)
4034 {
4035   return joy4way_labels(type);
4036 }
4037 
4038 const struct ControlInfo buckrog_ctrl =
4039 {
4040   false, /* 45_degree_rotation for joystick(s) */
4041   true, /* alternating_controls */
4042   true, /* mirrored_controls */
4043   "The trigger stick button is mirrored on the control panel.", /* control_details */
4044   &buckrog_get_ctrl_name
4045 };
4046 
buckrog_get_ctrl_name(int type)4047 const char *buckrog_get_ctrl_name(int type)
4048 {
4049   switch(type)
4050   {
4051     case IPT_BUTTON1: return BTN1 "Fire";
4052     case IPT_BUTTON2: return BTN2 "Slow";
4053     case IPT_BUTTON3: return BTN3 "Fast";
4054   } /* end of switch */
4055 
4056   return joy4way_labels(type);
4057 }
4058 
4059 const struct ControlInfo buggychl_ctrl =
4060 {
4061   false, /* 45_degree_rotation for joystick(s) */
4062   false, /* alternating_controls */
4063   false, /* mirrored_controls */
4064   "As it's mapped in mame, holidng down the shifter button keeps the car in high gear.", /* control_details */
4065   &buggychl_get_ctrl_name
4066 };
4067 
buggychl_get_ctrl_name(int type)4068 const char *buggychl_get_ctrl_name(int type)
4069 {
4070   switch(type)
4071   {
4072     case IPT_BUTTON1: return BTN1 "Accelerate";
4073     case IPT_BUTTON2: return BTN2 "H / L";
4074     case IPT_DIAL: return "Left";
4075     case (IPT_DIAL + IPT_EXTENSION): return "Right";
4076   } /* end of switch */
4077 
4078   return "";
4079 }
4080 
4081 const struct ControlInfo btime_ctrl =
4082 {
4083   false, /* 45_degree_rotation for joystick(s) */
4084   true, /* alternating_controls */
4085   true, /* mirrored_controls */
4086   "", /* control_details */
4087   &btime_get_ctrl_name
4088 };
4089 
btime_get_ctrl_name(int type)4090 const char *btime_get_ctrl_name(int type)
4091 {
4092   switch(type)
4093   {
4094     case IPT_BUTTON1: return BTN1 "Pepper";
4095   } /* end of switch */
4096 
4097   return joy4way_labels(type);
4098 }
4099 
4100 const struct ControlInfo brubber_ctrl =
4101 {
4102   false, /* 45_degree_rotation for joystick(s) */
4103   true, /* alternating_controls */
4104   true, /* mirrored_controls */
4105   "Up and Down act essentially as a gear shift, you don\'t have to hold up or down to go fast or slow. Also note that you can only jump when going fast.", /* control_details */
4106   &brubber_get_ctrl_name
4107 };
4108 
brubber_get_ctrl_name(int type)4109 const char *brubber_get_ctrl_name(int type)
4110 {
4111   switch(type)
4112   {
4113     case IPT_BUTTON1: return BTN1 "Jump";
4114     case IPT_JOYSTICK_UP: return "Fast";
4115     case IPT_JOYSTICK_DOWN: return "Slow";
4116     case IPT_JOYSTICK_LEFT: return "Left";
4117     case IPT_JOYSTICK_RIGHT: return "Right";
4118   } /* end of switch */
4119 
4120   return "";
4121 }
4122 
4123 const struct ControlInfo cabal_ctrl =
4124 {
4125   false, /* 45_degree_rotation for joystick(s) */
4126   false, /* alternating_controls */
4127   true, /* mirrored_controls */
4128   "There is a bootleg version that used 8-way sticks and 3 buttons instead of the official trackball and 2 buttons. The third button in the bootleg version is the roll button.", /* control_details */
4129   &cabal_get_ctrl_name
4130 };
4131 
cabal_get_ctrl_name(int type)4132 const char *cabal_get_ctrl_name(int type)
4133 {
4134   switch(type)
4135   {
4136     case IPT_BUTTON1: return BTN1 "Fire";
4137     case IPT_BUTTON2: return BTN2 "Grenade";
4138     case IPT_TRACKBALL_X: return "Left";
4139     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
4140     case IPT_TRACKBALL_Y: return "Up";
4141     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
4142   } /* end of switch */
4143 
4144   return "";
4145 }
4146 
4147 const struct ControlInfo cadash_ctrl =
4148 {
4149   false, /* 45_degree_rotation for joystick(s) */
4150   false, /* alternating_controls */
4151   true, /* mirrored_controls */
4152   "", /* control_details */
4153   &cadash_get_ctrl_name
4154 };
4155 
cadash_get_ctrl_name(int type)4156 const char *cadash_get_ctrl_name(int type)
4157 {
4158   switch(type)
4159   {
4160     case IPT_BUTTON1: return BTN1 "Attack";
4161     case IPT_BUTTON2: return BTN2 "Jump";
4162   } /* end of switch */
4163 
4164   return joy4way_labels(type);
4165 }
4166 
4167 const struct ControlInfo dino_ctrl =
4168 {
4169   false, /* 45_degree_rotation for joystick(s) */
4170   false, /* alternating_controls */
4171   true, /* mirrored_controls */
4172   "", /* control_details */
4173   &dino_get_ctrl_name
4174 };
4175 
dino_get_ctrl_name(int type)4176 const char *dino_get_ctrl_name(int type)
4177 {
4178   switch(type)
4179   {
4180     case IPT_BUTTON1: return BTN1 "Attack";
4181     case IPT_BUTTON2: return BTN2 "Jump";
4182   } /* end of switch */
4183 
4184   return joy4way_labels(type);
4185 }
4186 
4187 const struct ControlInfo calibr50_ctrl =
4188 {
4189   false, /* 45_degree_rotation for joystick(s) */
4190   false, /* alternating_controls */
4191   true, /* mirrored_controls */
4192   "The joysticks were 'Loop 24' joysticks, which look like the yellow mechanical 'LS-30', except are optical instead of mechanical. They also had green handles and clicked 24 times to complete a full rotation, hence the 'Loop 24' name.", /* control_details */
4193   &calibr50_get_ctrl_name
4194 };
4195 
calibr50_get_ctrl_name(int type)4196 const char *calibr50_get_ctrl_name(int type)
4197 {
4198   switch(type)
4199   {
4200     case IPT_BUTTON1: return BTN1 "Rapid Fire";
4201     case IPT_BUTTON2: return BTN2 "Grenade";
4202     case IPT_DIAL: return "Rotate Left";
4203     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
4204   } /* end of switch */
4205 
4206   return joy4way_labels(type);
4207 }
4208 
4209 const struct ControlInfo cameltry_ctrl =
4210 {
4211   false, /* 45_degree_rotation for joystick(s) */
4212   true, /* alternating_controls */
4213   true, /* mirrored_controls */
4214   "This game seems to use a tetris cpo. The button isn't actually labeled, and the labels it were given are explained during gameplay. Pressing the button jumps while holding it down speeds up your decent.", /* control_details */
4215   &cameltry_get_ctrl_name
4216 };
4217 
cameltry_get_ctrl_name(int type)4218 const char *cameltry_get_ctrl_name(int type)
4219 {
4220   switch(type)
4221   {
4222     case IPT_BUTTON1: return BTN1 "Jump / Speedup";
4223     case IPT_DIAL: return "Rotate Left";
4224     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
4225   } /* end of switch */
4226 
4227   return "";
4228 }
4229 
4230 const struct ControlInfo canyon_ctrl =
4231 {
4232   false, /* 45_degree_rotation for joystick(s) */
4233   false, /* alternating_controls */
4234   true, /* mirrored_controls */
4235   "The panel had buttons labelled Black Start, Black Fire, White Start, White Fire. Black is the first player and White is the second, so we don't add that part onto the label here. It also had a button for Hi Score Reset (yes, on the panel itself), MAME oddly emulates this as p1 button 7, but the driver overrides the default key to an 'H' (for 'high' score reset). The driver will eventually be fixed to put this button in the service buttons, where it bleongs.", /* control_details */
4236   &canyon_get_ctrl_name
4237 };
4238 
canyon_get_ctrl_name(int type)4239 const char *canyon_get_ctrl_name(int type)
4240 {
4241   switch(type)
4242   {
4243     case IPT_BUTTON1: return BTN1 "Fire";
4244   } /* end of switch */
4245 
4246   return "";
4247 }
4248 
4249 const struct ControlInfo capbowl_ctrl =
4250 {
4251   false, /* 45_degree_rotation for joystick(s) */
4252   true, /* alternating_controls */
4253   true, /* mirrored_controls */
4254   "", /* control_details */
4255   &capbowl_get_ctrl_name
4256 };
4257 
capbowl_get_ctrl_name(int type)4258 const char *capbowl_get_ctrl_name(int type)
4259 {
4260   switch(type)
4261   {
4262     case IPT_BUTTON1: return BTN1 "Hook Left";
4263     case IPT_BUTTON2: return BTN2 "Hook Right";
4264     case IPT_TRACKBALL_X: return "Left";
4265     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
4266     case IPT_TRACKBALL_Y: return "Up";
4267     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
4268   } /* end of switch */
4269 
4270   return "";
4271 }
4272 
4273 const struct ControlInfo captaven_ctrl =
4274 {
4275   false, /* 45_degree_rotation for joystick(s) */
4276   false, /* alternating_controls */
4277   true, /* mirrored_controls */
4278   "", /* control_details */
4279   &captaven_get_ctrl_name
4280 };
4281 
captaven_get_ctrl_name(int type)4282 const char *captaven_get_ctrl_name(int type)
4283 {
4284   switch(type)
4285   {
4286     case IPT_BUTTON1: return BTN1 "Start / Attack";
4287     case IPT_BUTTON2: return BTN2 "Jump";
4288   } /* end of switch */
4289 
4290   return joy4way_labels(type);
4291 }
4292 
4293 const struct ControlInfo captcomm_ctrl =
4294 {
4295   false, /* 45_degree_rotation for joystick(s) */
4296   false, /* alternating_controls */
4297   true, /* mirrored_controls */
4298   "Pressing attack and jump performs a special. This game is basically a capcom ripoff of tmnt and the controls are similar. The only difference is the use of a very rare two-sided, circular, 2-in-1 button (unlabeled btw) instead of two regular buttons. It should also be noted that this game can be changed from 2 player up to 4 player in the dipswitches and just like tmnt when you have it in 4 player mode players can't select their characters.", /* control_details */
4299   &captcomm_get_ctrl_name
4300 };
4301 
captcomm_get_ctrl_name(int type)4302 const char *captcomm_get_ctrl_name(int type)
4303 {
4304   switch(type)
4305   {
4306     case IPT_BUTTON1: return BTN1 "Attack";
4307     case IPT_BUTTON2: return BTN2 "Jump";
4308   } /* end of switch */
4309 
4310   return joy4way_labels(type);
4311 }
4312 
4313 const struct ControlInfo carnevil_ctrl =
4314 {
4315   false, /* 45_degree_rotation for joystick(s) */
4316   false, /* alternating_controls */
4317   true, /* mirrored_controls */
4318   "The lightgun is shaped like a small, piston grip, pump action shotgun. You can also reload by shooting off screen.", /* control_details */
4319   &carnevil_get_ctrl_name
4320 };
4321 
carnevil_get_ctrl_name(int type)4322 const char *carnevil_get_ctrl_name(int type)
4323 {
4324   switch(type)
4325   {
4326     case IPT_BUTTON1: return BTN1 "Trigger";
4327     case IPT_BUTTON2: return BTN2 "Reload";
4328     case IPT_LIGHTGUN_X: return "Left";
4329     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
4330     case IPT_LIGHTGUN_Y: return "Up";
4331     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
4332   } /* end of switch */
4333 
4334   return "";
4335 }
4336 
4337 const struct ControlInfo carnival_ctrl =
4338 {
4339   false, /* 45_degree_rotation for joystick(s) */
4340   true, /* alternating_controls */
4341   true, /* mirrored_controls */
4342   "", /* control_details */
4343   &carnival_get_ctrl_name
4344 };
4345 
carnival_get_ctrl_name(int type)4346 const char *carnival_get_ctrl_name(int type)
4347 {
4348   switch(type)
4349   {
4350     case IPT_BUTTON1: return BTN1 "Shoot";
4351   } /* end of switch */
4352 
4353   return joy2way_labels(type);
4354 }
4355 
4356 const struct ControlInfo cawing_ctrl =
4357 {
4358   false, /* 45_degree_rotation for joystick(s) */
4359   false, /* alternating_controls */
4360   true, /* mirrored_controls */
4361   "", /* control_details */
4362   &cawing_get_ctrl_name
4363 };
4364 
cawing_get_ctrl_name(int type)4365 const char *cawing_get_ctrl_name(int type)
4366 {
4367   switch(type)
4368   {
4369     case IPT_BUTTON1: return BTN1 "Fire";
4370     case IPT_BUTTON2: return BTN2 "Special Weapon";
4371   } /* end of switch */
4372 
4373   return joy4way_labels(type);
4374 }
4375 
4376 const struct ControlInfo cavelon_ctrl =
4377 {
4378   false, /* 45_degree_rotation for joystick(s) */
4379   true, /* alternating_controls */
4380   true, /* mirrored_controls */
4381   "", /* control_details */
4382   &cavelon_get_ctrl_name
4383 };
4384 
cavelon_get_ctrl_name(int type)4385 const char *cavelon_get_ctrl_name(int type)
4386 {
4387   switch(type)
4388   {
4389     case IPT_BUTTON1: return BTN1 "Shoot";
4390     case IPT_BUTTON2: return BTN2 "Magic Sword";
4391   } /* end of switch */
4392 
4393   return joy4way_labels(type);
4394 }
4395 
4396 const struct ControlInfo cninja_ctrl =
4397 {
4398   false, /* 45_degree_rotation for joystick(s) */
4399   false, /* alternating_controls */
4400   true, /* mirrored_controls */
4401   "", /* control_details */
4402   &cninja_get_ctrl_name
4403 };
4404 
cninja_get_ctrl_name(int type)4405 const char *cninja_get_ctrl_name(int type)
4406 {
4407   switch(type)
4408   {
4409     case IPT_BUTTON1: return BTN1 "Attack";
4410     case IPT_BUTTON2: return BTN2 "Jump";
4411     case IPT_JOYSTICK_UP: return "Aim Up";
4412     case IPT_JOYSTICK_DOWN: return "Duck";
4413     case IPT_JOYSTICK_LEFT: return "Left";
4414     case IPT_JOYSTICK_RIGHT: return "Right";
4415   } /* end of switch */
4416 
4417   return "";
4418 }
4419 
4420 const struct ControlInfo centiped_ctrl =
4421 {
4422   false, /* 45_degree_rotation for joystick(s) */
4423   true, /* alternating_controls */
4424   true, /* mirrored_controls */
4425   "", /* control_details */
4426   &centiped_get_ctrl_name
4427 };
4428 
centiped_get_ctrl_name(int type)4429 const char *centiped_get_ctrl_name(int type)
4430 {
4431   switch(type)
4432   {
4433     case IPT_BUTTON1: return BTN1 "Fire";
4434     case IPT_TRACKBALL_X: return "Left";
4435     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
4436     case IPT_TRACKBALL_Y: return "Up";
4437     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
4438   } /* end of switch */
4439 
4440   return "";
4441 }
4442 
4443 const struct ControlInfo challeng_ctrl =
4444 {
4445   false, /* 45_degree_rotation for joystick(s) */
4446   true, /* alternating_controls */
4447   true, /* mirrored_controls */
4448   "", /* control_details */
4449   &challeng_get_ctrl_name
4450 };
4451 
challeng_get_ctrl_name(int type)4452 const char *challeng_get_ctrl_name(int type)
4453 {
4454   switch(type)
4455   {
4456     case IPT_BUTTON1: return BTN1 "Fire";
4457     case IPT_BUTTON2: return BTN2 "Bomb";
4458     case IPT_BUTTON3: return BTN3 "Warp";
4459   } /* end of switch */
4460 
4461   return joy2way_labels(type);
4462 }
4463 
4464 const struct ControlInfo champbas_ctrl =
4465 {
4466   false, /* 45_degree_rotation for joystick(s) */
4467   false, /* alternating_controls */
4468   false, /* mirrored_controls */
4469   "The actual cpo labels simply read A, B, and C respectively. The bezel, however, tells you the functions. Since part of this projects goal is to aid in figuring out how to play, I improvised and combined the two.", /* control_details */
4470   &champbas_get_ctrl_name
4471 };
4472 
champbas_get_ctrl_name(int type)4473 const char *champbas_get_ctrl_name(int type)
4474 {
4475   switch(type)
4476   {
4477     case IPT_BUTTON1: return BTN1 "A: Change Batter, Pitcher";
4478     case IPT_BUTTON2: return BTN2 "B: Bat, Extra Bases - Pitch, Throw Ball";
4479     case IPT_BUTTON3: return BTN3 "C: Steal, Run Back";
4480   } /* end of switch */
4481 
4482   return joy4way_labels(type);
4483 }
4484 
4485 const struct ControlInfo csprint_ctrl =
4486 {
4487   false, /* 45_degree_rotation for joystick(s) */
4488   false, /* alternating_controls */
4489   true, /* mirrored_controls */
4490   "", /* control_details */
4491   &csprint_get_ctrl_name
4492 };
4493 
csprint_get_ctrl_name(int type)4494 const char *csprint_get_ctrl_name(int type)
4495 {
4496   switch(type)
4497   {
4498     case IPT_DIAL: return "Left";
4499     case (IPT_DIAL + IPT_EXTENSION): return "Right";
4500     case IPT_PEDAL: return "Accelerate ";
4501   } /* end of switch */
4502 
4503   return "";
4504 }
4505 
4506 const struct ControlInfo checkman_ctrl =
4507 {
4508   false, /* 45_degree_rotation for joystick(s) */
4509   true, /* alternating_controls */
4510   true, /* mirrored_controls */
4511   "The original Japanese version of Check Man (checkmaj) uses two fire buttons to slide the rows of blocks left and right. The fire buttons were removed for the world release and the player select buttons are used to slide the blocks.", /* control_details */
4512   &checkman_get_ctrl_name
4513 };
4514 
checkman_get_ctrl_name(int type)4515 const char *checkman_get_ctrl_name(int type)
4516 {
4517   switch(type)
4518   {
4519     case IPT_BUTTON1: return BTN1 "Slide left";
4520     case IPT_BUTTON2: return BTN2 "Slide right";
4521   } /* end of switch */
4522 
4523   return joy4way_labels(type);
4524 }
4525 
4526 const struct ControlInfo checkmat_ctrl =
4527 {
4528   false, /* 45_degree_rotation for joystick(s) */
4529   false, /* alternating_controls */
4530   true, /* mirrored_controls */
4531   "", /* control_details */
4532   &checkmat_get_ctrl_name
4533 };
4534 
checkmat_get_ctrl_name(int type)4535 const char *checkmat_get_ctrl_name(int type)
4536 {
4537   return joy4way_labels(type);
4538 }
4539 
4540 const struct ControlInfo cheekyms_ctrl =
4541 {
4542   false, /* 45_degree_rotation for joystick(s) */
4543   true, /* alternating_controls */
4544   true, /* mirrored_controls */
4545   "", /* control_details */
4546   &cheekyms_get_ctrl_name
4547 };
4548 
cheekyms_get_ctrl_name(int type)4549 const char *cheekyms_get_ctrl_name(int type)
4550 {
4551   switch(type)
4552   {
4553     case IPT_BUTTON1: return BTN1 "Hammer";
4554     case IPT_JOYSTICK_LEFT: return "L";
4555     case IPT_JOYSTICK_RIGHT: return "R";
4556   } /* end of switch */
4557 
4558   return "";
4559 }
4560 
4561 const struct ControlInfo cheyenne_ctrl =
4562 {
4563   false, /* 45_degree_rotation for joystick(s) */
4564   false, /* alternating_controls */
4565   true, /* mirrored_controls */
4566   "Game used a rifle style lightgun on a pedestal mount.", /* control_details */
4567   &cheyenne_get_ctrl_name
4568 };
4569 
cheyenne_get_ctrl_name(int type)4570 const char *cheyenne_get_ctrl_name(int type)
4571 {
4572   switch(type)
4573   {
4574     case IPT_BUTTON1: return BTN1 "Fire";
4575     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
4576     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
4577     case IPT_LIGHTGUN_Y: return "Up";
4578     case IPT_LIGHTGUN_X: return "Left";
4579   } /* end of switch */
4580 
4581   return "";
4582 }
4583 
4584 const struct ControlInfo cshift_ctrl =
4585 {
4586   false, /* 45_degree_rotation for joystick(s) */
4587   true, /* alternating_controls */
4588   true, /* mirrored_controls */
4589   "", /* control_details */
4590   &cshift_get_ctrl_name
4591 };
4592 
cshift_get_ctrl_name(int type)4593 const char *cshift_get_ctrl_name(int type)
4594 {
4595   switch(type)
4596   {
4597     case IPT_BUTTON1: return BTN1 "Blue Things";
4598     case IPT_BUTTON2: return BTN2 "Red Things";
4599   } /* end of switch */
4600 
4601   return "";
4602 }
4603 
4604 const struct ControlInfo chiller_ctrl =
4605 {
4606   false, /* 45_degree_rotation for joystick(s) */
4607   true, /* alternating_controls */
4608   true, /* mirrored_controls */
4609   "This game is one of only a handful that uses a mounted lightgun instead of a regular analog mounted gun. You would think that mame-wize it would be more autehntic to use an analog gun, but as the game doesn't have any calibration (since it's optical) it is reccomended that you use a standard lightgun for this game.", /* control_details */
4610   &chiller_get_ctrl_name
4611 };
4612 
chiller_get_ctrl_name(int type)4613 const char *chiller_get_ctrl_name(int type)
4614 {
4615   switch(type)
4616   {
4617     case IPT_BUTTON1: return BTN1 "Fire";
4618     case IPT_LIGHTGUN_X: return "Left";
4619     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
4620     case IPT_LIGHTGUN_Y: return "Up";
4621     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
4622   } /* end of switch */
4623 
4624   return "";
4625 }
4626 
4627 const struct ControlInfo ccasino_ctrl =
4628 {
4629   false, /* 45_degree_rotation for joystick(s) */
4630   true, /* alternating_controls */
4631   true, /* mirrored_controls */
4632   "Mahjong games are NOT compatable with ctrlr files. As a matter of fact they pretty much all have the same layout and all have the same controls. The controls are hardcoded, so remapping isn't reccomended, especially considering the fact that a full keyboard of buttons are required to play.", /* control_details */
4633   &ccasino_get_ctrl_name
4634 };
4635 
ccasino_get_ctrl_name(int type)4636 const char *ccasino_get_ctrl_name(int type)
4637 {
4638   return "";
4639 }
4640 
4641 const struct ControlInfo chopper_ctrl =
4642 {
4643   false, /* 45_degree_rotation for joystick(s) */
4644   true, /* alternating_controls */
4645   true, /* mirrored_controls */
4646   "This game's official cpo is unlabeled. If anyone has the manual to this game please feel free to verify these labels.", /* control_details */
4647   &chopper_get_ctrl_name
4648 };
4649 
chopper_get_ctrl_name(int type)4650 const char *chopper_get_ctrl_name(int type)
4651 {
4652   switch(type)
4653   {
4654     case IPT_BUTTON1: return BTN1 "Shoot";
4655     case IPT_BUTTON2: return BTN2 "Special Weapon";
4656   } /* end of switch */
4657 
4658   return joy4way_labels(type);
4659 }
4660 
4661 const struct ControlInfo circus_ctrl =
4662 {
4663   false, /* 45_degree_rotation for joystick(s) */
4664   true, /* alternating_controls */
4665   true, /* mirrored_controls */
4666   "The original cpo didn't have any labels for the paddle, but rather the instructions:  'Bounce Man From Board. Pop Balloons For Points'  The game also listed the scoring chart on the cpo.", /* control_details */
4667   &circus_get_ctrl_name
4668 };
4669 
circus_get_ctrl_name(int type)4670 const char *circus_get_ctrl_name(int type)
4671 {
4672   switch(type)
4673   {
4674     case IPT_PADDLE: return "Left";
4675     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
4676   } /* end of switch */
4677 
4678   return "";
4679 }
4680 
4681 const struct ControlInfo circusc_ctrl =
4682 {
4683   false, /* 45_degree_rotation for joystick(s) */
4684   true, /* alternating_controls */
4685   true, /* mirrored_controls */
4686   "One neat feature of the game is that Player 1 and Player 2 can select different levels of difficulty.", /* control_details */
4687   &circusc_get_ctrl_name
4688 };
4689 
circusc_get_ctrl_name(int type)4690 const char *circusc_get_ctrl_name(int type)
4691 {
4692   switch(type)
4693   {
4694     case IPT_BUTTON1: return BTN1 "Jump";
4695   } /* end of switch */
4696 
4697   return joy2way_labels(type);
4698 }
4699 
4700 const struct ControlInfo cischeat_ctrl =
4701 {
4702   false, /* 45_degree_rotation for joystick(s) */
4703   true, /* alternating_controls */
4704   true, /* mirrored_controls */
4705   "The 'Horn' button has a picture of a horn on it rather than actual text.", /* control_details */
4706   &cischeat_get_ctrl_name
4707 };
4708 
cischeat_get_ctrl_name(int type)4709 const char *cischeat_get_ctrl_name(int type)
4710 {
4711   switch(type)
4712   {
4713     case IPT_BUTTON1: return BTN1 "Accelerate";
4714     case IPT_BUTTON2: return BTN2 "Brake";
4715     case IPT_BUTTON3: return BTN3 "Low";
4716     case IPT_BUTTON4: return BTN4 "Hi";
4717     case IPT_BUTTON5: return BTN5 "Horn";
4718     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
4719     case IPT_PADDLE: return "Left";
4720   } /* end of switch */
4721 
4722   return "";
4723 }
4724 
4725 const struct ControlInfo citycon_ctrl =
4726 {
4727   false, /* 45_degree_rotation for joystick(s) */
4728   true, /* alternating_controls */
4729   true, /* mirrored_controls */
4730   "", /* control_details */
4731   &citycon_get_ctrl_name
4732 };
4733 
citycon_get_ctrl_name(int type)4734 const char *citycon_get_ctrl_name(int type)
4735 {
4736   switch(type)
4737   {
4738     case IPT_BUTTON1: return BTN1 "Shoot";
4739     case IPT_BUTTON2: return BTN2 "Jump";
4740   } /* end of switch */
4741 
4742   return joy4way_labels(type);
4743 }
4744 
4745 const struct ControlInfo citylove_ctrl =
4746 {
4747   false, /* 45_degree_rotation for joystick(s) */
4748   true, /* alternating_controls */
4749   true, /* mirrored_controls */
4750   "Mahjong games are NOT compatable with ctrlr files. As a matter of fact they pretty much all have the same layout and all have the same controls. The controls are hardcoded, so remapping isn't reccomended, especially considering the fact that a full keyboard of buttons are required to play.", /* control_details */
4751   &citylove_get_ctrl_name
4752 };
4753 
citylove_get_ctrl_name(int type)4754 const char *citylove_get_ctrl_name(int type)
4755 {
4756   return "";
4757 }
4758 
4759 const struct ControlInfo cloak_ctrl =
4760 {
4761   false, /* 45_degree_rotation for joystick(s) */
4762   true, /* alternating_controls */
4763   true, /* mirrored_controls */
4764   "", /* control_details */
4765   &cloak_get_ctrl_name
4766 };
4767 
cloak_get_ctrl_name(int type)4768 const char *cloak_get_ctrl_name(int type)
4769 {
4770   switch(type)
4771   {
4772     case IPT_BUTTON1: return BTN1 "Light Fuse";
4773     case IPT_JOYSTICKLEFT_UP: return "Up";
4774     case IPT_JOYSTICKLEFT_DOWN: return "Down";
4775     case IPT_JOYSTICKLEFT_LEFT: return "Left";
4776     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
4777     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
4778     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
4779     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
4780     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
4781   } /* end of switch */
4782 
4783   return "";
4784 }
4785 
4786 const struct ControlInfo clowns_ctrl =
4787 {
4788   false, /* 45_degree_rotation for joystick(s) */
4789   true, /* alternating_controls */
4790   true, /* mirrored_controls */
4791   "This game definately has a unique layout. Although players take turns, each player has his own controls, even on the upright version. Even stranger is the fact that the second players controls are on the left and player one is on the right.", /* control_details */
4792   &clowns_get_ctrl_name
4793 };
4794 
clowns_get_ctrl_name(int type)4795 const char *clowns_get_ctrl_name(int type)
4796 {
4797   switch(type)
4798   {
4799     case IPT_PADDLE: return "Move Left";
4800     case (IPT_PADDLE + IPT_EXTENSION): return "Move Right";
4801   } /* end of switch */
4802 
4803   return "";
4804 }
4805 
4806 const struct ControlInfo cltchitr_ctrl =
4807 {
4808   false, /* 45_degree_rotation for joystick(s) */
4809   false, /* alternating_controls */
4810   true, /* mirrored_controls */
4811   "The A, B, and C buttons actually have a series of actions listed for each one on the cpo, but it's far too long to document here.", /* control_details */
4812   &cltchitr_get_ctrl_name
4813 };
4814 
cltchitr_get_ctrl_name(int type)4815 const char *cltchitr_get_ctrl_name(int type)
4816 {
4817   switch(type)
4818   {
4819     case IPT_BUTTON1: return BTN1 "A";
4820     case IPT_BUTTON2: return BTN2 "B";
4821     case IPT_BUTTON3: return BTN3 "C";
4822   } /* end of switch */
4823 
4824   return joy4way_labels(type);
4825 }
4826 
4827 const struct ControlInfo colony7_ctrl =
4828 {
4829   false, /* 45_degree_rotation for joystick(s) */
4830   true, /* alternating_controls */
4831   true, /* mirrored_controls */
4832   "", /* control_details */
4833   &colony7_get_ctrl_name
4834 };
4835 
colony7_get_ctrl_name(int type)4836 const char *colony7_get_ctrl_name(int type)
4837 {
4838   switch(type)
4839   {
4840     case IPT_BUTTON1: return BTN1 "Fire";
4841     case IPT_BUTTON2: return BTN2 "Mega - Blaster";
4842     case IPT_BUTTON3: return BTN3 "Eradicator";
4843     case IPT_JOYSTICK_UP: return "Control Up";
4844     case IPT_JOYSTICK_DOWN: return "Control Down";
4845     case IPT_JOYSTICK_LEFT: return "Control Left";
4846     case IPT_JOYSTICK_RIGHT: return "Control Right";
4847   } /* end of switch */
4848 
4849   return "";
4850 }
4851 
4852 const struct ControlInfo columns_ctrl =
4853 {
4854   false, /* 45_degree_rotation for joystick(s) */
4855   false, /* alternating_controls */
4856   true, /* mirrored_controls */
4857   "The button is actually unlabed on the cpo and in the manual.", /* control_details */
4858   &columns_get_ctrl_name
4859 };
4860 
columns_get_ctrl_name(int type)4861 const char *columns_get_ctrl_name(int type)
4862 {
4863   switch(type)
4864   {
4865     case IPT_BUTTON1: return BTN1 "Switch Pieces";
4866     case IPT_JOYSTICK_DOWN: return "Drop";
4867     case IPT_JOYSTICK_LEFT: return "Left";
4868     case IPT_JOYSTICK_RIGHT: return "Right";
4869   } /* end of switch */
4870 
4871   return "";
4872 }
4873 
4874 const struct ControlInfo combat_ctrl =
4875 {
4876   false, /* 45_degree_rotation for joystick(s) */
4877   false, /* alternating_controls */
4878   false, /* mirrored_controls */
4879   "This game uses a lightgun, but it's mounted to the control panel like an analog gun.", /* control_details */
4880   &combat_get_ctrl_name
4881 };
4882 
combat_get_ctrl_name(int type)4883 const char *combat_get_ctrl_name(int type)
4884 {
4885   switch(type)
4886   {
4887     case IPT_BUTTON1: return BTN1 "Fire";
4888     case IPT_LIGHTGUN_X: return "Aim Left";
4889     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
4890     case IPT_LIGHTGUN_Y: return "Aim Up";
4891     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
4892   } /* end of switch */
4893 
4894   return "";
4895 }
4896 
4897 const struct ControlInfo commsega_ctrl =
4898 {
4899   false, /* 45_degree_rotation for joystick(s) */
4900   true, /* alternating_controls */
4901   true, /* mirrored_controls */
4902   "", /* control_details */
4903   &commsega_get_ctrl_name
4904 };
4905 
commsega_get_ctrl_name(int type)4906 const char *commsega_get_ctrl_name(int type)
4907 {
4908   switch(type)
4909   {
4910     case IPT_BUTTON1: return BTN1 "Machine Gun";
4911     case IPT_BUTTON2: return BTN2 "Grenade";
4912   } /* end of switch */
4913 
4914   return joy4way_labels(type);
4915 }
4916 
4917 const struct ControlInfo commando_ctrl =
4918 {
4919   false, /* 45_degree_rotation for joystick(s) */
4920   true, /* alternating_controls */
4921   true, /* mirrored_controls */
4922   "", /* control_details */
4923   &commando_get_ctrl_name
4924 };
4925 
commando_get_ctrl_name(int type)4926 const char *commando_get_ctrl_name(int type)
4927 {
4928   switch(type)
4929   {
4930     case IPT_BUTTON1: return BTN1 "Machine Gun";
4931     case IPT_BUTTON2: return BTN2 "Grenade";
4932   } /* end of switch */
4933 
4934   return joy4way_labels(type);
4935 }
4936 
4937 const struct ControlInfo comotion_ctrl =
4938 {
4939   false, /* 45_degree_rotation for joystick(s) */
4940   false, /* alternating_controls */
4941   true, /* mirrored_controls */
4942   "", /* control_details */
4943   &comotion_get_ctrl_name
4944 };
4945 
comotion_get_ctrl_name(int type)4946 const char *comotion_get_ctrl_name(int type)
4947 {
4948   return joy4way_labels(type);
4949 }
4950 
4951 const struct ControlInfo congo_ctrl =
4952 {
4953   true,  /* 45_degree_rotation for joystick(s) */
4954   true,   /* alternating_controls */
4955   true,   /* mirrored_controls */
4956   "",     /* control_details */
4957   &congo_get_ctrl_name
4958 };
4959 
congo_get_ctrl_name(int type)4960 const char *congo_get_ctrl_name(int type)
4961 {
4962   switch(type)
4963   {
4964     case IPT_BUTTON1:         return BTN1 "Jump";
4965   }
4966   if(!options.restrict_4_way)
4967   {
4968     switch(type)
4969     {
4970       case IPT_JOYSTICK_UP:     return "Up-Right";
4971       case IPT_JOYSTICK_DOWN:   return "Down-Left";
4972       case IPT_JOYSTICK_LEFT:   return "Left-Up";
4973       case IPT_JOYSTICK_RIGHT:  return "Right-Down";
4974     } /* end of switch */
4975   }
4976 
4977   /* otherwise, controls are effectively rotated, so using the diagonal names would be confusing. */
4978   /* just use the generic function                                                                */
4979   return joy4way_labels(type);
4980 }
4981 
4982 const struct ControlInfo contra_ctrl =
4983 {
4984   false, /* 45_degree_rotation for joystick(s) */
4985   false, /* alternating_controls */
4986   true, /* mirrored_controls */
4987   "", /* control_details */
4988   &contra_get_ctrl_name
4989 };
4990 
contra_get_ctrl_name(int type)4991 const char *contra_get_ctrl_name(int type)
4992 {
4993   switch(type)
4994   {
4995     case IPT_BUTTON1: return BTN1 "Shoot";
4996     case IPT_BUTTON2: return BTN2 "Jump";
4997   } /* end of switch */
4998 
4999   return joy4way_labels(type);
5000 }
5001 
5002 const struct ControlInfo cosmica_ctrl =
5003 {
5004   false, /* 45_degree_rotation for joystick(s) */
5005   true, /* alternating_controls */
5006   true, /* mirrored_controls */
5007   "This game used odd buttons, that are essentially regular buttons with a translucent core.", /* control_details */
5008   &cosmica_get_ctrl_name
5009 };
5010 
cosmica_get_ctrl_name(int type)5011 const char *cosmica_get_ctrl_name(int type)
5012 {
5013   switch(type)
5014   {
5015     case IPT_BUTTON1: return BTN1 "Fire";
5016   } /* end of switch */
5017 
5018   return joy2way_labels(type);
5019 }
5020 
5021 const struct ControlInfo cavenger_ctrl =
5022 {
5023   false, /* 45_degree_rotation for joystick(s) */
5024   true, /* alternating_controls */
5025   true, /* mirrored_controls */
5026   "", /* control_details */
5027   &cavenger_get_ctrl_name
5028 };
5029 
cavenger_get_ctrl_name(int type)5030 const char *cavenger_get_ctrl_name(int type)
5031 {
5032   switch(type)
5033   {
5034     case IPT_BUTTON1: return BTN1 "Fire";
5035     case IPT_BUTTON2: return BTN2 "Bomb";
5036   } /* end of switch */
5037 
5038   return joy4way_labels(type);
5039 }
5040 
5041 const struct ControlInfo cchasm_ctrl =
5042 {
5043   false, /* 45_degree_rotation for joystick(s) */
5044   true, /* alternating_controls */
5045   true, /* mirrored_controls */
5046   "", /* control_details */
5047   &cchasm_get_ctrl_name
5048 };
5049 
cchasm_get_ctrl_name(int type)5050 const char *cchasm_get_ctrl_name(int type)
5051 {
5052   switch(type)
5053   {
5054     case IPT_BUTTON1: return BTN1 "Fire";
5055     case IPT_BUTTON2: return BTN2 "Thrust";
5056     case IPT_BUTTON3: return BTN3 "Shields";
5057     case IPT_DIAL: return "Rotate Left";
5058     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
5059   } /* end of switch */
5060 
5061   return "";
5062 }
5063 
5064 const struct ControlInfo cosmicg_ctrl =
5065 {
5066   false, /* 45_degree_rotation for joystick(s) */
5067   true, /* alternating_controls */
5068   true, /* mirrored_controls */
5069   "", /* control_details */
5070   &cosmicg_get_ctrl_name
5071 };
5072 
cosmicg_get_ctrl_name(int type)5073 const char *cosmicg_get_ctrl_name(int type)
5074 {
5075   switch(type)
5076   {
5077     case IPT_BUTTON1: return BTN1 "Fire";
5078   } /* end of switch */
5079 
5080   return joy2way_labels(type);
5081 }
5082 
5083 const struct ControlInfo cracksht_ctrl =
5084 {
5085   false, /* 45_degree_rotation for joystick(s) */
5086   true, /* alternating_controls */
5087   true, /* mirrored_controls */
5088   "This game used a mounted lightgun as opposed to a free one.", /* control_details */
5089   &cracksht_get_ctrl_name
5090 };
5091 
cracksht_get_ctrl_name(int type)5092 const char *cracksht_get_ctrl_name(int type)
5093 {
5094   switch(type)
5095   {
5096     case IPT_BUTTON1: return BTN1 "Fire";
5097     case IPT_LIGHTGUN_X: return "Left";
5098     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
5099     case IPT_LIGHTGUN_Y: return "Up";
5100     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
5101   } /* end of switch */
5102 
5103   return "";
5104 }
5105 
5106 const struct ControlInfo crash_ctrl =
5107 {
5108   false, /* 45_degree_rotation for joystick(s) */
5109   true, /* alternating_controls */
5110   true, /* mirrored_controls */
5111   "", /* control_details */
5112   &crash_get_ctrl_name
5113 };
5114 
crash_get_ctrl_name(int type)5115 const char *crash_get_ctrl_name(int type)
5116 {
5117   switch(type)
5118   {
5119     case IPT_BUTTON1: return BTN1 "Fast";
5120   } /* end of switch */
5121 
5122   return joy4way_labels(type);
5123 }
5124 
5125 const struct ControlInfo crater_ctrl =
5126 {
5127   false, /* 45_degree_rotation for joystick(s) */
5128   true, /* alternating_controls */
5129   true, /* mirrored_controls */
5130   "The shield button is the thumb button on the joystick.", /* control_details */
5131   &crater_get_ctrl_name
5132 };
5133 
crater_get_ctrl_name(int type)5134 const char *crater_get_ctrl_name(int type)
5135 {
5136   switch(type)
5137   {
5138     case IPT_BUTTON1: return BTN1 "Fire (Trigger)";
5139     case IPT_BUTTON2: return BTN2 "Shield";
5140     case IPT_BUTTON3: return BTN3 "??";
5141     case IPT_JOYSTICK_DOWN: return "Reverse";
5142     case IPT_JOYSTICK_UP: return "Forward";
5143     case IPT_DIAL: return "Turn Left";
5144     case (IPT_DIAL + IPT_EXTENSION): return "Turn Right";
5145   } /* end of switch */
5146 
5147   return "";
5148 }
5149 
5150 const struct ControlInfo cclimber_ctrl =
5151 {
5152   false, /* 45_degree_rotation for joystick(s) */
5153   true, /* alternating_controls */
5154   true, /* mirrored_controls */
5155   "", /* control_details */
5156   &cclimber_get_ctrl_name
5157 };
5158 
cclimber_get_ctrl_name(int type)5159 const char *cclimber_get_ctrl_name(int type)
5160 {
5161   switch(type)
5162   {
5163     case IPT_JOYSTICKLEFT_UP: return "Left Up";
5164     case IPT_JOYSTICKLEFT_DOWN: return "Left Down";
5165     case IPT_JOYSTICKLEFT_LEFT: return "Left Left";
5166     case IPT_JOYSTICKLEFT_RIGHT: return "Left Right";
5167     case IPT_JOYSTICKRIGHT_UP: return "Right Up";
5168     case IPT_JOYSTICKRIGHT_DOWN: return "Right Down";
5169     case IPT_JOYSTICKRIGHT_LEFT: return "Right Left";
5170     case IPT_JOYSTICKRIGHT_RIGHT: return "Right Right";
5171   } /* end of switch */
5172 
5173   return "";
5174 }
5175 
5176 const struct ControlInfo cclimbr2_ctrl =
5177 {
5178   false, /* 45_degree_rotation for joystick(s) */
5179   true, /* alternating_controls */
5180   true, /* mirrored_controls */
5181   "", /* control_details */
5182   &cclimbr2_get_ctrl_name
5183 };
5184 
cclimbr2_get_ctrl_name(int type)5185 const char *cclimbr2_get_ctrl_name(int type)
5186 {
5187   switch(type)
5188   {
5189     case IPT_JOYSTICKLEFT_UP: return "Left Up";
5190     case IPT_JOYSTICKLEFT_DOWN: return "Left Down";
5191     case IPT_JOYSTICKLEFT_LEFT: return "Left Left";
5192     case IPT_JOYSTICKLEFT_RIGHT: return "Left Right";
5193     case IPT_JOYSTICKRIGHT_UP: return "Right Up";
5194     case IPT_JOYSTICKRIGHT_DOWN: return "Right Down";
5195     case IPT_JOYSTICKRIGHT_LEFT: return "Right Left";
5196     case IPT_JOYSTICKRIGHT_RIGHT: return "Right Right";
5197   } /* end of switch */
5198 
5199   return "";
5200 }
5201 
5202 const struct ControlInfo ckong_ctrl =
5203 {
5204   false, /* 45_degree_rotation for joystick(s) */
5205   true, /* alternating_controls */
5206   true, /* mirrored_controls */
5207   "", /* control_details */
5208   &ckong_get_ctrl_name
5209 };
5210 
ckong_get_ctrl_name(int type)5211 const char *ckong_get_ctrl_name(int type)
5212 {
5213   switch(type)
5214   {
5215     case IPT_BUTTON1: return BTN1 "Jump";
5216   } /* end of switch */
5217 
5218   return joy4way_labels(type);
5219 }
5220 
5221 const struct ControlInfo crimec_ctrl =
5222 {
5223   false, /* 45_degree_rotation for joystick(s) */
5224   false, /* alternating_controls */
5225   true, /* mirrored_controls */
5226   "", /* control_details */
5227   &crimec_get_ctrl_name
5228 };
5229 
crimec_get_ctrl_name(int type)5230 const char *crimec_get_ctrl_name(int type)
5231 {
5232   switch(type)
5233   {
5234     case IPT_BUTTON1: return BTN1 "Shoot";
5235     case IPT_BUTTON2: return BTN2 "Jump";
5236   } /* end of switch */
5237 
5238   return joy4way_labels(type);
5239 }
5240 
5241 const struct ControlInfo crimfght_ctrl =
5242 {
5243   false, /* 45_degree_rotation for joystick(s) */
5244   false, /* alternating_controls */
5245   true, /* mirrored_controls */
5246   "Even though the screen will tell you to press start, you press the punch button to start the game. Oddly enough, this beat-em-up doesn't have a jump button.", /* control_details */
5247   &crimfght_get_ctrl_name
5248 };
5249 
crimfght_get_ctrl_name(int type)5250 const char *crimfght_get_ctrl_name(int type)
5251 {
5252   switch(type)
5253   {
5254     case IPT_BUTTON1: return BTN1 "Punch";
5255     case IPT_BUTTON2: return BTN2 "Kick ";
5256   } /* end of switch */
5257 
5258   return joy4way_labels(type);
5259 }
5260 
5261 const struct ControlInfo crossbow_ctrl =
5262 {
5263   false, /* 45_degree_rotation for joystick(s) */
5264   false, /* alternating_controls */
5265   false, /* mirrored_controls */
5266   "This game uses a mounted optical crossbow instead of a regular lightgun.", /* control_details */
5267   &crossbow_get_ctrl_name
5268 };
5269 
crossbow_get_ctrl_name(int type)5270 const char *crossbow_get_ctrl_name(int type)
5271 {
5272   switch(type)
5273   {
5274     case IPT_BUTTON1: return BTN1 "Fire";
5275     case IPT_LIGHTGUN_X: return "Left";
5276     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
5277     case IPT_LIGHTGUN_Y: return "Up";
5278     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
5279   } /* end of switch */
5280 
5281   return "";
5282 }
5283 
5284 const struct ControlInfo crgolf_ctrl =
5285 {
5286   false, /* 45_degree_rotation for joystick(s) */
5287   true, /* alternating_controls */
5288   true, /* mirrored_controls */
5289   "This game used a slew of small, red, chicklet, looking buttons. Along with a strang lever for the swing. Oddly enough the lever only adjusted the angle, and a button has to be pressed to actually hit the ball.", /* control_details */
5290   &crgolf_get_ctrl_name
5291 };
5292 
crgolf_get_ctrl_name(int type)5293 const char *crgolf_get_ctrl_name(int type)
5294 {
5295   switch(type)
5296   {
5297     case IPT_BUTTON1: return BTN1 "Swing";
5298     case IPT_BUTTON2: return BTN2 "Address Up";
5299     case IPT_BUTTON3: return BTN3 "Address Down";
5300     case IPT_BUTTON4: return BTN4 "Address Left";
5301     case IPT_BUTTON5: return BTN5 "Address Right";
5302     case IPT_BUTTON6: return BTN6 "Club Select";
5303     case IPT_AD_STICK_X: return "";
5304     case (IPT_AD_STICK_X + IPT_EXTENSION): return "";
5305     case IPT_AD_STICK_Y: return "Decrease Swing Angle";
5306     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Increase Swing Angle";
5307   } /* end of switch */
5308 
5309   return joy2way_labels(type);
5310 }
5311 
5312 const struct ControlInfo cbuster_ctrl =
5313 {
5314   false, /* 45_degree_rotation for joystick(s) */
5315   false, /* alternating_controls */
5316   true, /* mirrored_controls */
5317   "", /* control_details */
5318   &cbuster_get_ctrl_name
5319 };
5320 
cbuster_get_ctrl_name(int type)5321 const char *cbuster_get_ctrl_name(int type)
5322 {
5323   switch(type)
5324   {
5325     case IPT_BUTTON1: return BTN1 "Fight";
5326     case IPT_BUTTON2: return BTN2 "Jump";
5327     case IPT_BUTTON3: return BTN3 "Pick Up";
5328   } /* end of switch */
5329 
5330   return joy4way_labels(type);
5331 }
5332 
5333 const struct ControlInfo crush_ctrl =
5334 {
5335   false, /* 45_degree_rotation for joystick(s) */
5336   true, /* alternating_controls */
5337   true, /* mirrored_controls */
5338   "", /* control_details */
5339   &crush_get_ctrl_name
5340 };
5341 
crush_get_ctrl_name(int type)5342 const char *crush_get_ctrl_name(int type)
5343 {
5344   return joy4way_labels(type);
5345 }
5346 
5347 const struct ControlInfo cryptklr_ctrl =
5348 {
5349   false, /* 45_degree_rotation for joystick(s) */
5350   false, /* alternating_controls */
5351   true, /* mirrored_controls */
5352   "Something of note is that this game uses a dedicated reload button that doesn't appear to be optional. The dedicated cabinet uses shotguns, in which the reload button is wired to the pump. Conversion kits often place the button on a control panel.", /* control_details */
5353   &cryptklr_get_ctrl_name
5354 };
5355 
cryptklr_get_ctrl_name(int type)5356 const char *cryptklr_get_ctrl_name(int type)
5357 {
5358   switch(type)
5359   {
5360     case IPT_BUTTON1: return BTN1 "Fire";
5361     case IPT_BUTTON2: return BTN2 "Reload";
5362     case IPT_LIGHTGUN_X: return "Left";
5363     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
5364     case IPT_LIGHTGUN_Y: return "Up";
5365     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
5366   } /* end of switch */
5367 
5368   return "";
5369 }
5370 
5371 const struct ControlInfo ccastles_ctrl =
5372 {
5373   false, /* 45_degree_rotation for joystick(s) */
5374   true, /* alternating_controls */
5375   true, /* mirrored_controls */
5376   "The jump button is also the start button.", /* control_details */
5377   &ccastles_get_ctrl_name
5378 };
5379 
ccastles_get_ctrl_name(int type)5380 const char *ccastles_get_ctrl_name(int type)
5381 {
5382   switch(type)
5383   {
5384     case IPT_BUTTON1: return BTN1 "Jump";
5385     case IPT_TRACKBALL_X: return "Left";
5386     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
5387     case IPT_TRACKBALL_Y: return "Up";
5388     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
5389   } /* end of switch */
5390 
5391   return "";
5392 }
5393 
5394 const struct ControlInfo curvebal_ctrl =
5395 {
5396   false, /* 45_degree_rotation for joystick(s) */
5397   false, /* alternating_controls */
5398   false, /* mirrored_controls */
5399   "Note that player 1 and player 2 share a set of controls. During an inning change, player 1 swaps places with player 2 and vice-versa. The batter buttons are globally labeled 'Bat Control and Runners Speed'  and the pitch controls are labeled 'Speed of Pitch and Curve'.", /* control_details */
5400   &curvebal_get_ctrl_name
5401 };
5402 
curvebal_get_ctrl_name(int type)5403 const char *curvebal_get_ctrl_name(int type)
5404 {
5405   switch(type)
5406   {
5407     case (IPT_BUTTON1 | IPF_PLAYER2): return "Left (Curve)";
5408     case (IPT_BUTTON2 | IPF_PLAYER2): return "Right (Curve)";
5409     case IPT_BUTTON1: return BTN1 "Swing";
5410     case IPT_BUTTON2: return BTN2 "Bunt";
5411   } /* end of switch */
5412 
5413   return "";
5414 }
5415 
5416 const struct ControlInfo cybsled_ctrl =
5417 {
5418   false, /* 45_degree_rotation for joystick(s) */
5419   false, /* alternating_controls */
5420   false, /* mirrored_controls */
5421   "This game used dual analog flight sticks. The Fire and Missile buttons are mirrored on both sticks, while the view point button is a lighted button on the control panel. It should be noted that this game was only sold as a dual cabinet with two boards linked together for head-2-head action, however due to limitations mame only emulates the first board and will probably never emulate the dual mode.", /* control_details */
5422   &cybsled_get_ctrl_name
5423 };
5424 
cybsled_get_ctrl_name(int type)5425 const char *cybsled_get_ctrl_name(int type)
5426 {
5427   switch(type)
5428   {
5429     case IPT_BUTTON1: return BTN1 "Fire";
5430     case IPT_BUTTON2: return BTN2 "Missile";
5431     case IPT_BUTTON3: return BTN3 "View Point";
5432     case IPT_BUTTON4: return BTN4 "unknown";
5433     case IPT_AD_STICK_X: return "Left Tread Left";
5434     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Left Tread Right";
5435     case IPT_AD_STICK_Y: return "Left Tread Forward";
5436     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Left Tread Backward";
5437   } /* end of switch */
5438 
5439   return "";
5440 }
5441 
5442 const struct ControlInfo cyberbal_ctrl =
5443 {
5444   false, /* 45_degree_rotation for joystick(s) */
5445   false, /* alternating_controls */
5446   true, /* mirrored_controls */
5447   "I can't make out the fine print on the cpo image I used as a reference. If you know the real label for the button let me know.", /* control_details */
5448   &cyberbal_get_ctrl_name
5449 };
5450 
cyberbal_get_ctrl_name(int type)5451 const char *cyberbal_get_ctrl_name(int type)
5452 {
5453   switch(type)
5454   {
5455     case IPT_BUTTON1: return BTN1 "Action";
5456   } /* end of switch */
5457 
5458   return joy4way_labels(type);
5459 }
5460 
5461 const struct ControlInfo cybots_ctrl =
5462 {
5463   false, /* 45_degree_rotation for joystick(s) */
5464   false, /* alternating_controls */
5465   false, /* mirrored_controls */
5466   "", /* control_details */
5467   &cybots_get_ctrl_name
5468 };
5469 
cybots_get_ctrl_name(int type)5470 const char *cybots_get_ctrl_name(int type)
5471 {
5472   switch(type)
5473   {
5474     case (IPT_BUTTON1 | IPF_PLAYER2): return "Attack 1";
5475     case (IPT_BUTTON2 | IPF_PLAYER2): return "Attack 2";
5476     case (IPT_BUTTON3 | IPF_PLAYER2): return "Boost";
5477     case (IPT_BUTTON4 | IPF_PLAYER2): return "Weapons";
5478     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Back / Defense";
5479     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Forward";
5480     case (IPT_JOYSTICK_DOWN | IPF_PLAYER2): return "Duck";
5481     case (IPT_JOYSTICK_UP | IPF_PLAYER2): return "Jump";
5482     case IPT_BUTTON1: return BTN1 "Attack 1";
5483     case IPT_BUTTON2: return BTN2 "Attack 2";
5484     case IPT_BUTTON3: return BTN3 "Boost";
5485     case IPT_BUTTON4: return BTN4 "Weapons";
5486     case IPT_JOYSTICK_LEFT: return "Back / Defense";
5487     case IPT_JOYSTICK_DOWN: return "Duck";
5488     case IPT_JOYSTICK_UP: return "Jump";
5489     case IPT_JOYSTICK_RIGHT: return "Forward";
5490   } /* end of switch */
5491 
5492   return "";
5493 }
5494 
5495 const struct ControlInfo daioh_ctrl =
5496 {
5497   false, /* 45_degree_rotation for joystick(s) */
5498   false, /* alternating_controls */
5499   true, /* mirrored_controls */
5500   "", /* control_details */
5501   &daioh_get_ctrl_name
5502 };
5503 
daioh_get_ctrl_name(int type)5504 const char *daioh_get_ctrl_name(int type)
5505 {
5506   switch(type)
5507   {
5508     case IPT_BUTTON1: return BTN1 "Laser Shot";
5509     case IPT_BUTTON2: return BTN2 "Ion Shot";
5510     case IPT_BUTTON3: return BTN3 "Missile Shot";
5511     case IPT_BUTTON4: return BTN4 "Fire Bomb";
5512     case IPT_BUTTON5: return BTN5 "Mega Beam";
5513     case IPT_BUTTON6: return BTN6 "Atomic Bomb";
5514   } /* end of switch */
5515 
5516   return joy4way_labels(type);
5517 }
5518 
5519 const struct ControlInfo dangar_ctrl =
5520 {
5521   false, /* 45_degree_rotation for joystick(s) */
5522   true, /* alternating_controls */
5523   true, /* mirrored_controls */
5524   "The transform button allows you to split the main ship into several smaller ships.", /* control_details */
5525   &dangar_get_ctrl_name
5526 };
5527 
dangar_get_ctrl_name(int type)5528 const char *dangar_get_ctrl_name(int type)
5529 {
5530   switch(type)
5531   {
5532     case IPT_BUTTON1: return BTN1 "Fire";
5533     case IPT_BUTTON2: return BTN2 "Transform";
5534     case IPT_BUTTON3: return BTN3 "??";
5535   } /* end of switch */
5536 
5537   return joy4way_labels(type);
5538 }
5539 
5540 const struct ControlInfo dangerz_ctrl =
5541 {
5542   false, /* 45_degree_rotation for joystick(s) */
5543   false, /* alternating_controls */
5544   false, /* mirrored_controls */
5545   "This game does NOT use a trackball in real life. Instead, it uses quite possibly the most unique control ever. Two immovable trigger sticks are mounted on a panel attached to the monitor. When you try to move the sticks, they remain rigid and actually tilt the monitor!  The gameplay screen then scrolls depending upon where you tilt the monitor to. This gives the illusion of the player looking through a window onto the battle field.", /* control_details */
5546   &dangerz_get_ctrl_name
5547 };
5548 
dangerz_get_ctrl_name(int type)5549 const char *dangerz_get_ctrl_name(int type)
5550 {
5551   switch(type)
5552   {
5553     case IPT_BUTTON1: return BTN1 "Machine Gun";
5554     case IPT_BUTTON2: return BTN2 "Heat - Seaking Missile";
5555     case IPT_TRACKBALL_X: return "Left";
5556     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
5557     case IPT_TRACKBALL_Y: return "Up";
5558     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
5559   } /* end of switch */
5560 
5561   return "";
5562 }
5563 
5564 const struct ControlInfo dbreed_ctrl =
5565 {
5566   false, /* 45_degree_rotation for joystick(s) */
5567   true, /* alternating_controls */
5568   true, /* mirrored_controls */
5569   "", /* control_details */
5570   &dbreed_get_ctrl_name
5571 };
5572 
dbreed_get_ctrl_name(int type)5573 const char *dbreed_get_ctrl_name(int type)
5574 {
5575   switch(type)
5576   {
5577     case IPT_BUTTON1: return BTN1 "Attack";
5578     case IPT_BUTTON2: return BTN2 "Jump";
5579   } /* end of switch */
5580 
5581   return joy4way_labels(type);
5582 }
5583 
5584 const struct ControlInfo indyheat_ctrl =
5585 {
5586   false, /* 45_degree_rotation for joystick(s) */
5587   false, /* alternating_controls */
5588   true, /* mirrored_controls */
5589   "Player 1 is the Red car, Player 2 is the White car (light grey-ish), Player 3 is the Blue car. Mame by default maps the pedal and the turbo button to the same button input (button 1). If you leave it this way, to use turbo, release the button and press it again. To enter service mode, hold down the blue turbo button and then press the service key (F2).", /* control_details */
5590   &indyheat_get_ctrl_name
5591 };
5592 
indyheat_get_ctrl_name(int type)5593 const char *indyheat_get_ctrl_name(int type)
5594 {
5595   switch(type)
5596   {
5597     case IPT_BUTTON1: return BTN1 "Turbo";
5598     case IPT_DIAL: return "Left";
5599     case (IPT_DIAL + IPT_EXTENSION): return "Right";
5600     case IPT_PEDAL: return "Gas";
5601   } /* end of switch */
5602 
5603   return "";
5604 }
5605 
5606 const struct ControlInfo darkplnt_ctrl =
5607 {
5608   false, /* 45_degree_rotation for joystick(s) */
5609   true, /* alternating_controls */
5610   true, /* mirrored_controls */
5611   "", /* control_details */
5612   &darkplnt_get_ctrl_name
5613 };
5614 
darkplnt_get_ctrl_name(int type)5615 const char *darkplnt_get_ctrl_name(int type)
5616 {
5617   switch(type)
5618   {
5619     case IPT_BUTTON1: return BTN1 "Fire";
5620     case IPT_BUTTON2: return BTN2 "Thrust";
5621     case IPT_BUTTON3: return BTN3 "Laser";
5622     case IPT_DIAL: return "Rotate Left";
5623     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
5624   } /* end of switch */
5625 
5626   return "";
5627 }
5628 
5629 const struct ControlInfo darkseal_ctrl =
5630 {
5631   false, /* 45_degree_rotation for joystick(s) */
5632   false, /* alternating_controls */
5633   true, /* mirrored_controls */
5634   "", /* control_details */
5635   &darkseal_get_ctrl_name
5636 };
5637 
darkseal_get_ctrl_name(int type)5638 const char *darkseal_get_ctrl_name(int type)
5639 {
5640   switch(type)
5641   {
5642     case IPT_BUTTON1: return BTN1 "Attack";
5643     case IPT_BUTTON2: return BTN2 "Magic";
5644   } /* end of switch */
5645 
5646   return joy4way_labels(type);
5647 }
5648 
5649 const struct ControlInfo dstlk_ctrl =
5650 {
5651   false, /* 45_degree_rotation for joystick(s) */
5652   false, /* alternating_controls */
5653   true, /* mirrored_controls */
5654   "", /* control_details */
5655   &dstlk_get_ctrl_name
5656 };
5657 
dstlk_get_ctrl_name(int type)5658 const char *dstlk_get_ctrl_name(int type)
5659 {
5660   switch(type)
5661   {
5662     case IPT_BUTTON1: return BTN1 "Light Punch";
5663     case IPT_BUTTON2: return BTN2 "Middle Punch";
5664     case IPT_BUTTON3: return BTN3 "Heavy Punch";
5665     case IPT_BUTTON4: return BTN4 "Light Kick";
5666     case IPT_BUTTON5: return BTN5 "Middle Kick";
5667     case IPT_BUTTON6: return BTN6 "Heavy Kick";
5668   } /* end of switch */
5669 
5670   return joy4way_labels(type);
5671 }
5672 
5673 const struct ControlInfo deadang_ctrl =
5674 {
5675   false, /* 45_degree_rotation for joystick(s) */
5676   true, /* alternating_controls */
5677   true, /* mirrored_controls */
5678   "", /* control_details */
5679   &deadang_get_ctrl_name
5680 };
5681 
deadang_get_ctrl_name(int type)5682 const char *deadang_get_ctrl_name(int type)
5683 {
5684   switch(type)
5685   {
5686     case IPT_BUTTON1: return BTN1 "Fire";
5687     case IPT_BUTTON2: return BTN2 "Grenade";
5688     case IPT_JOYSTICK_UP: return "Aim Up";
5689     case IPT_JOYSTICK_DOWN: return "Aim Down";
5690     case IPT_JOYSTICK_LEFT: return "Aim Left";
5691     case IPT_JOYSTICK_RIGHT: return "Aim Right";
5692   } /* end of switch */
5693 
5694   return "";
5695 }
5696 
5697 const struct ControlInfo redufo_ctrl =
5698 {
5699   false, /* 45_degree_rotation for joystick(s) */
5700   true, /* alternating_controls */
5701   true, /* mirrored_controls */
5702   "", /* control_details */
5703   &redufo_get_ctrl_name
5704 };
5705 
redufo_get_ctrl_name(int type)5706 const char *redufo_get_ctrl_name(int type)
5707 {
5708   switch(type)
5709   {
5710     case IPT_BUTTON1: return BTN1 "Shoot";
5711   } /* end of switch */
5712 
5713   return joy2way_labels(type);
5714 }
5715 
5716 const struct ControlInfo defender_ctrl =
5717 {
5718   false, /* 45_degree_rotation for joystick(s) */
5719   true, /* alternating_controls */
5720   true, /* mirrored_controls */
5721   "Joystick is on left side of control panel with reverse button the the right of it so it can be hit with thumb. Fire and thrust are on right side of control panel with smart bomb, and hyperspace to the left in a 45 degree angle. In mame you can turn on cheat mode and the controls are automatically re-mapped so that the game is quite playable on a standard 8way joystick.", /* control_details */
5722   &defender_get_ctrl_name
5723 };
5724 
defender_get_ctrl_name(int type)5725 const char *defender_get_ctrl_name(int type)
5726 {
5727   switch(type)
5728   {
5729     case IPT_BUTTON1: return BTN1 "FIRE";
5730     case IPT_BUTTON2: return BTN2 "THRUST";
5731     case IPT_BUTTON3: return BTN3 "SMART BOMB";
5732     case IPT_BUTTON4: return BTN4 "HYPERSPACE";
5733     case IPT_BUTTON5: return BTN5 "REVERSE";
5734     case IPT_JOYSTICK_DOWN: return "Down";
5735     case IPT_JOYSTICK_UP: return "Up";
5736   } /* end of switch */
5737 
5738   return "";
5739 }
5740 
5741 const struct ControlInfo demoderb_ctrl =
5742 {
5743   false, /* 45_degree_rotation for joystick(s) */
5744   false, /* alternating_controls */
5745   true, /* mirrored_controls */
5746   "OTHER: This game had a 2-way joystick as the forward/reverse shifter. Unlike Hi/Low shifters that have only two positions, the Demolition Derby shifter has a Forward, a Reverse, and a Neutral (centered, not labeled) like a 2-way (v) joystick. However, Mame emulates the shifter as buttons 1 & 2, and does not use the 2-way joystick. The start button is labeled 'Restart' on the CP. The game comes in 2 player standup and 4 player cocktail, and switches between the two with a dipswitch.", /* control_details */
5747   &demoderb_get_ctrl_name
5748 };
5749 
demoderb_get_ctrl_name(int type)5750 const char *demoderb_get_ctrl_name(int type)
5751 {
5752   switch(type)
5753   {
5754     case IPT_BUTTON1: return BTN1 "Forward";
5755     case IPT_BUTTON2: return BTN2 "Reverse";
5756     case IPT_DIAL: return "Left";
5757     case (IPT_DIAL + IPT_EXTENSION): return "Right";
5758   } /* end of switch */
5759 
5760   return "";
5761 }
5762 
5763 const struct ControlInfo depthch_ctrl =
5764 {
5765   false, /* 45_degree_rotation for joystick(s) */
5766   false, /* alternating_controls */
5767   false, /* mirrored_controls */
5768   "", /* control_details */
5769   &depthch_get_ctrl_name
5770 };
5771 
depthch_get_ctrl_name(int type)5772 const char *depthch_get_ctrl_name(int type)
5773 {
5774   switch(type)
5775   {
5776     case IPT_BUTTON1: return BTN1 "Fire Left Charge";
5777     case IPT_BUTTON2: return BTN2 "Fire Right Charge";
5778     case IPT_JOYSTICK_LEFT: return "Move Ship Left";
5779     case IPT_JOYSTICK_RIGHT: return "Move Ship Right";
5780   } /* end of switch */
5781 
5782   return "";
5783 }
5784 
5785 const struct ControlInfo desertgu_ctrl =
5786 {
5787   false, /* 45_degree_rotation for joystick(s) */
5788   true, /* alternating_controls */
5789   true, /* mirrored_controls */
5790   "It should be noted that this is the first game to my knowledge that uses an analog mounted gun. That would make it the great grandpa of future analog gun games like Terminator 2.", /* control_details */
5791   &desertgu_get_ctrl_name
5792 };
5793 
desertgu_get_ctrl_name(int type)5794 const char *desertgu_get_ctrl_name(int type)
5795 {
5796   switch(type)
5797   {
5798     case IPT_BUTTON1: return BTN1 "Fire";
5799     case IPT_LIGHTGUN_X: return "Left";
5800     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
5801     case IPT_LIGHTGUN_Y: return "Up";
5802     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
5803   } /* end of switch */
5804 
5805   return "";
5806 }
5807 
5808 const struct ControlInfo destroyr_ctrl =
5809 {
5810   false, /* 45_degree_rotation for joystick(s) */
5811   false, /* alternating_controls */
5812   true, /* mirrored_controls */
5813   "This game uses a throttle control to control the speed of the ship (fast or slow) and a rotary paddle with 'push to release' to control the depth of the charge. The charge will explode at the depth setting that the Release button was pressed at, regardless of the current depth setting.", /* control_details */
5814   &destroyr_get_ctrl_name
5815 };
5816 
destroyr_get_ctrl_name(int type)5817 const char *destroyr_get_ctrl_name(int type)
5818 {
5819   switch(type)
5820   {
5821     case IPT_BUTTON1: return BTN1 "Release Charge";
5822     case IPT_BUTTON2: return BTN2 "Slow";
5823     case (IPT_PADDLE_V + IPT_EXTENSION): return "Set Depth of Charge Down";
5824     case IPT_PADDLE_V: return "Set Depth of Charge Up";
5825   } /* end of switch */
5826 
5827   return "";
5828 }
5829 
5830 const struct ControlInfo devstors_ctrl =
5831 {
5832   false, /* 45_degree_rotation for joystick(s) */
5833   false, /* alternating_controls */
5834   true, /* mirrored_controls */
5835   "The men in tan uniforms leave guided missiles when shot. These can be picked up and when in range, a red crosshair will appear on a target and they will home on it.", /* control_details */
5836   &devstors_get_ctrl_name
5837 };
5838 
devstors_get_ctrl_name(int type)5839 const char *devstors_get_ctrl_name(int type)
5840 {
5841   switch(type)
5842   {
5843     case IPT_BUTTON1: return BTN1 "Shoot";
5844     case IPT_BUTTON2: return BTN2 "Weapon";
5845     case IPT_JOYSTICK_RIGHT: return "Right";
5846     case IPT_JOYSTICK_LEFT: return "Left";
5847     case IPT_JOYSTICK_DOWN: return "Backward";
5848     case IPT_JOYSTICK_UP: return "Forward";
5849   } /* end of switch */
5850 
5851   return "";
5852 }
5853 
5854 const struct ControlInfo devilfsh_ctrl =
5855 {
5856   false, /* 45_degree_rotation for joystick(s) */
5857   true, /* alternating_controls */
5858   true, /* mirrored_controls */
5859   "", /* control_details */
5860   &devilfsh_get_ctrl_name
5861 };
5862 
devilfsh_get_ctrl_name(int type)5863 const char *devilfsh_get_ctrl_name(int type)
5864 {
5865   switch(type)
5866   {
5867     case IPT_BUTTON1: return BTN1 "Drop bait";
5868   } /* end of switch */
5869 
5870   return joy4way_labels(type);
5871 }
5872 
5873 const struct ControlInfo devzone_ctrl =
5874 {
5875   false, /* 45_degree_rotation for joystick(s) */
5876   true, /* alternating_controls */
5877   true, /* mirrored_controls */
5878   "", /* control_details */
5879   &devzone_get_ctrl_name
5880 };
5881 
devzone_get_ctrl_name(int type)5882 const char *devzone_get_ctrl_name(int type)
5883 {
5884   switch(type)
5885   {
5886     case IPT_BUTTON1: return BTN1 "Fire";
5887     case IPT_JOYSTICK_LEFT: return "Movement Left";
5888     case IPT_JOYSTICK_RIGHT: return "Movement Right";
5889   } /* end of switch */
5890 
5891   return "";
5892 }
5893 
5894 const struct ControlInfo digdug_ctrl =
5895 {
5896   false, /* 45_degree_rotation for joystick(s) */
5897   true, /* alternating_controls */
5898   true, /* mirrored_controls */
5899   "", /* control_details */
5900   &digdug_get_ctrl_name
5901 };
5902 
digdug_get_ctrl_name(int type)5903 const char *digdug_get_ctrl_name(int type)
5904 {
5905   switch(type)
5906   {
5907     case IPT_BUTTON1:         return BTN1 "Pump";
5908   } /* end of switch */
5909 
5910   return joy4way_labels(type);
5911 }
5912 
5913 const struct ControlInfo digdug2_ctrl =
5914 {
5915   false, /* 45_degree_rotation for joystick(s) */
5916   true, /* alternating_controls */
5917   true, /* mirrored_controls */
5918   "", /* control_details */
5919   &digdug2_get_ctrl_name
5920 };
5921 
digdug2_get_ctrl_name(int type)5922 const char *digdug2_get_ctrl_name(int type)
5923 {
5924   switch(type)
5925   {
5926     case IPT_BUTTON1: return BTN1 "Pump";
5927     case IPT_BUTTON2: return BTN2 "Drill";
5928   } /* end of switch */
5929 
5930   return joy4way_labels(type);
5931 }
5932 
5933 const struct ControlInfo digger_ctrl =
5934 {
5935   false, /* 45_degree_rotation for joystick(s) */
5936   true, /* alternating_controls */
5937   true, /* mirrored_controls */
5938   "", /* control_details */
5939   &digger_get_ctrl_name
5940 };
5941 
digger_get_ctrl_name(int type)5942 const char *digger_get_ctrl_name(int type)
5943 {
5944   switch(type)
5945   {
5946     case IPT_BUTTON1: return BTN1 "Dig";
5947     case IPT_BUTTON2: return BTN2 "Fill";
5948   } /* end of switch */
5949 
5950   return joy4way_labels(type);
5951 }
5952 
5953 const struct ControlInfo dimahoo_ctrl =
5954 {
5955   false, /* 45_degree_rotation for joystick(s) */
5956   false, /* alternating_controls */
5957   true, /* mirrored_controls */
5958   "Although in mame the game has three buttons, and all 3 work, button 3 is redundant and mirrors button 1. On the actual game (sold in kit form only) only two buttons are used and this is confirmed on the instruction card for the game.", /* control_details */
5959   &dimahoo_get_ctrl_name
5960 };
5961 
dimahoo_get_ctrl_name(int type)5962 const char *dimahoo_get_ctrl_name(int type)
5963 {
5964   switch(type)
5965   {
5966     case IPT_BUTTON1: return BTN1 "Shoot";
5967     case IPT_BUTTON2: return BTN2 "Bomb";
5968   } /* end of switch */
5969 
5970   return joy4way_labels(type);
5971 }
5972 
5973 const struct ControlInfo dotron_ctrl =
5974 {
5975   false, /* 45_degree_rotation for joystick(s) */
5976   true, /* alternating_controls */
5977   true, /* mirrored_controls */
5978   "", /* control_details */
5979   &dotron_get_ctrl_name
5980 };
5981 
dotron_get_ctrl_name(int type)5982 const char *dotron_get_ctrl_name(int type)
5983 {
5984   switch(type)
5985   {
5986     case IPT_BUTTON1: return BTN1 "Throw";
5987     case IPT_BUTTON2: return BTN2 "Deflect";
5988     case IPT_BUTTON3: return BTN3 "Aim Up";
5989     case IPT_BUTTON4: return BTN4 "Aim Down";
5990     case IPT_JOYSTICK_UP: return "Move Tron";
5991     case IPT_JOYSTICK_DOWN: return "Move Tron";
5992     case IPT_JOYSTICK_LEFT: return "Move Tron";
5993     case IPT_JOYSTICK_RIGHT: return "Move Tron";
5994     case IPT_DIAL: return "Aim";
5995     case (IPT_DIAL + IPT_EXTENSION): return "Aim";
5996   } /* end of switch */
5997 
5998   return "";
5999 }
6000 
6001 const struct ControlInfo dorunrun_ctrl =
6002 {
6003   false, /* 45_degree_rotation for joystick(s) */
6004   true, /* alternating_controls */
6005   true, /* mirrored_controls */
6006   "Something of note is that this game actually has a second button and this button is emulated in mame. The reason it isn't included here is because it was a dead button left-over from development of the game and isn't found on the control panel. The manual explains installing the controls, but neglects to mention this button, however it does show up in the service menu as 'p1 jump'.", /* control_details */
6007   &dorunrun_get_ctrl_name
6008 };
6009 
dorunrun_get_ctrl_name(int type)6010 const char *dorunrun_get_ctrl_name(int type)
6011 {
6012   switch(type)
6013   {
6014     case IPT_BUTTON1: return BTN1 "Fire";
6015   } /* end of switch */
6016 
6017   return joy4way_labels(type);
6018 }
6019 
6020 const struct ControlInfo domino_ctrl =
6021 {
6022   false, /* 45_degree_rotation for joystick(s) */
6023   true, /* alternating_controls */
6024   true, /* mirrored_controls */
6025   "", /* control_details */
6026   &domino_get_ctrl_name
6027 };
6028 
domino_get_ctrl_name(int type)6029 const char *domino_get_ctrl_name(int type)
6030 {
6031   switch(type)
6032   {
6033     case IPT_BUTTON1: return BTN1 "Swat";
6034   } /* end of switch */
6035 
6036   return joy4way_labels(type);
6037 }
6038 
6039 const struct ControlInfo dkong_ctrl =
6040 {
6041   false, /* 45_degree_rotation for joystick(s) */
6042   true, /* alternating_controls */
6043   true, /* mirrored_controls */
6044   "", /* control_details */
6045   &dkong_get_ctrl_name
6046 };
6047 
dkong_get_ctrl_name(int type)6048 const char *dkong_get_ctrl_name(int type)
6049 {
6050   switch(type)
6051   {
6052     case IPT_BUTTON1: return BTN1 "Jump";
6053     case IPT_JOYSTICK_LEFT: return "Run Left";
6054     case IPT_JOYSTICK_DOWN: return "Climb Down Ladder";
6055     case IPT_JOYSTICK_UP: return "Climb Up Ladder";
6056     case IPT_JOYSTICK_RIGHT: return "Run Right";
6057   } /* end of switch */
6058 
6059   return "";
6060 }
6061 
6062 const struct ControlInfo dkong3_ctrl =
6063 {
6064   false, /* 45_degree_rotation for joystick(s) */
6065   true, /* alternating_controls */
6066   true, /* mirrored_controls */
6067   "", /* control_details */
6068   &dkong3_get_ctrl_name
6069 };
6070 
dkong3_get_ctrl_name(int type)6071 const char *dkong3_get_ctrl_name(int type)
6072 {
6073   switch(type)
6074   {
6075     case IPT_BUTTON1: return BTN1 "SPRAY";
6076   } /* end of switch */
6077 
6078   return joy4way_labels(type);
6079 }
6080 
6081 const struct ControlInfo dkongjr_ctrl =
6082 {
6083   false, /* 45_degree_rotation for joystick(s) */
6084   true, /* alternating_controls */
6085   true, /* mirrored_controls */
6086   "", /* control_details */
6087   &dkongjr_get_ctrl_name
6088 };
6089 
dkongjr_get_ctrl_name(int type)6090 const char *dkongjr_get_ctrl_name(int type)
6091 {
6092   switch(type)
6093   {
6094     case IPT_BUTTON1: return BTN1 "JUMP";
6095   } /* end of switch */
6096 
6097   return joy4way_labels(type);
6098 }
6099 
6100 const struct ControlInfo ddragon_ctrl =
6101 {
6102   false, /* 45_degree_rotation for joystick(s) */
6103   false, /* alternating_controls */
6104   true, /* mirrored_controls */
6105   "From manual: JUMP KICK:  Joystick in the direction. Push jump then kick. ELBOW: Joystick in the direction. Push jump and punch buttons together. BACK KICK: Joystick in the direction. Push jump and kick buttons together. HEAD BUTT: Joystick in the direction. (TWICE) BODY THROW: Joystick in the direction. Push jump button after catching enemy. BREAK ENEMY'S HOLD: Push jump button only.", /* control_details */
6106   &ddragon_get_ctrl_name
6107 };
6108 
ddragon_get_ctrl_name(int type)6109 const char *ddragon_get_ctrl_name(int type)
6110 {
6111   switch(type)
6112   {
6113     case IPT_BUTTON1: return BTN1 "Kick";
6114     case IPT_BUTTON2: return BTN2 "Jump";
6115     case IPT_BUTTON3: return BTN3 "Punch";
6116   } /* end of switch */
6117 
6118   return joy4way_labels(type);
6119 }
6120 
6121 const struct ControlInfo ddragon3_ctrl =
6122 {
6123   false, /* 45_degree_rotation for joystick(s) */
6124   false, /* alternating_controls */
6125   true, /* mirrored_controls */
6126   "", /* control_details */
6127   &ddragon3_get_ctrl_name
6128 };
6129 
ddragon3_get_ctrl_name(int type)6130 const char *ddragon3_get_ctrl_name(int type)
6131 {
6132   switch(type)
6133   {
6134     case IPT_BUTTON1: return BTN1 "Punch";
6135     case IPT_BUTTON2: return BTN2 "Jump";
6136     case IPT_BUTTON3: return BTN3 "Kick";
6137   } /* end of switch */
6138 
6139   return joy4way_labels(type);
6140 }
6141 
6142 const struct ControlInfo ddragon2_ctrl =
6143 {
6144   false, /* 45_degree_rotation for joystick(s) */
6145   false, /* alternating_controls */
6146   true, /* mirrored_controls */
6147   "", /* control_details */
6148   &ddragon2_get_ctrl_name
6149 };
6150 
ddragon2_get_ctrl_name(int type)6151 const char *ddragon2_get_ctrl_name(int type)
6152 {
6153   switch(type)
6154   {
6155     case IPT_BUTTON1: return BTN1 "Attack Left";
6156     case IPT_BUTTON2: return BTN2 "Jump";
6157     case IPT_BUTTON3: return BTN3 "Attack Right";
6158   } /* end of switch */
6159 
6160   return joy4way_labels(type);
6161 }
6162 
6163 const struct ControlInfo ddribble_ctrl =
6164 {
6165   false, /* 45_degree_rotation for joystick(s) */
6166   false, /* alternating_controls */
6167   true, /* mirrored_controls */
6168   "In order to move with the ball, you must hold down the dribble button.", /* control_details */
6169   &ddribble_get_ctrl_name
6170 };
6171 
ddribble_get_ctrl_name(int type)6172 const char *ddribble_get_ctrl_name(int type)
6173 {
6174   switch(type)
6175   {
6176     case IPT_BUTTON1: return BTN1 "Dribble";
6177     case IPT_BUTTON2: return BTN2 "Shoot";
6178     case IPT_BUTTON3: return BTN3 "Pass";
6179   } /* end of switch */
6180 
6181   return joy4way_labels(type);
6182 }
6183 
6184 const struct ControlInfo downtown_ctrl =
6185 {
6186   false, /* 45_degree_rotation for joystick(s) */
6187   false, /* alternating_controls */
6188   true, /* mirrored_controls */
6189   "This game uses SNK LS-30 rotary joysticks. In standard MAME, rotation is controlled using the dial inputs.", /* control_details */
6190   &downtown_get_ctrl_name
6191 };
6192 
downtown_get_ctrl_name(int type)6193 const char *downtown_get_ctrl_name(int type)
6194 {
6195   switch(type)
6196   {
6197     case IPT_BUTTON1: return BTN1 "Punch";
6198     case IPT_BUTTON2: return BTN2 "Kick";
6199     case IPT_DIAL: return "Rotate Left";
6200     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
6201   } /* end of switch */
6202 
6203   return joy4way_labels(type);
6204 }
6205 
6206 const struct ControlInfo dragrace_ctrl =
6207 {
6208   false, /* 45_degree_rotation for joystick(s) */
6209   false, /* alternating_controls */
6210   true, /* mirrored_controls */
6211   "The game actually uses a 360 degree steering wheel, but for obvious reasons, mame has mapped it to the vertical spinner. The numbers denote the gear position.", /* control_details */
6212   &dragrace_get_ctrl_name
6213 };
6214 
dragrace_get_ctrl_name(int type)6215 const char *dragrace_get_ctrl_name(int type)
6216 {
6217   switch(type)
6218   {
6219     case IPT_BUTTON1: return BTN1 "Accelerate";
6220     case IPT_BUTTON2: return BTN2 "1";
6221     case IPT_BUTTON3: return BTN3 "2";
6222     case IPT_BUTTON4: return BTN4 "3";
6223     case IPT_BUTTON5: return BTN5 "4";
6224     case (IPT_DIAL_V + IPT_EXTENSION): return "Down";
6225     case IPT_DIAL_V: return "Up";
6226   } /* end of switch */
6227 
6228   return "";
6229 }
6230 
6231 const struct ControlInfo dragngun_ctrl =
6232 {
6233   false, /* 45_degree_rotation for joystick(s) */
6234   false, /* alternating_controls */
6235   true, /* mirrored_controls */
6236   "This game is probably the only game that features talking guns. You heard me right, the 'drag-guns' in this game had speakers that spouted out advice during gameplay.", /* control_details */
6237   &dragngun_get_ctrl_name
6238 };
6239 
dragngun_get_ctrl_name(int type)6240 const char *dragngun_get_ctrl_name(int type)
6241 {
6242   switch(type)
6243   {
6244     case IPT_BUTTON1: return BTN1 "Fire";
6245     case IPT_BUTTON2: return BTN2 "Dragon Bomb";
6246     case IPT_LIGHTGUN_Y: return "Up";
6247     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
6248     case IPT_LIGHTGUN_X: return "Left";
6249     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
6250   } /* end of switch */
6251 
6252   return "";
6253 }
6254 
6255 const struct ControlInfo dspirit_ctrl =
6256 {
6257   false, /* 45_degree_rotation for joystick(s) */
6258   true, /* alternating_controls */
6259   true, /* mirrored_controls */
6260   "Shoot down flashing enemies and collect their eggs for mystery power (from the CP overlay).", /* control_details */
6261   &dspirit_get_ctrl_name
6262 };
6263 
dspirit_get_ctrl_name(int type)6264 const char *dspirit_get_ctrl_name(int type)
6265 {
6266   switch(type)
6267   {
6268     case IPT_BUTTON1: return BTN1 "Fire";
6269     case IPT_BUTTON2: return BTN2 "Bomb";
6270     case IPT_BUTTON3: return BTN3 "Unknown";
6271   } /* end of switch */
6272 
6273   return joy4way_labels(type);
6274 }
6275 
6276 const struct ControlInfo drgnunit_ctrl =
6277 {
6278   false, /* 45_degree_rotation for joystick(s) */
6279   false, /* alternating_controls */
6280   true, /* mirrored_controls */
6281   "", /* control_details */
6282   &drgnunit_get_ctrl_name
6283 };
6284 
drgnunit_get_ctrl_name(int type)6285 const char *drgnunit_get_ctrl_name(int type)
6286 {
6287   switch(type)
6288   {
6289     case IPT_BUTTON1: return BTN1 "Attack";
6290     case IPT_BUTTON2: return BTN2 "Jump";
6291     case IPT_BUTTON3: return BTN3 "Shield";
6292   } /* end of switch */
6293 
6294   return joy4way_labels(type);
6295 }
6296 
6297 const struct ControlInfo ddsom_ctrl =
6298 {
6299   false, /* 45_degree_rotation for joystick(s) */
6300   false, /* alternating_controls */
6301   true, /* mirrored_controls */
6302   "", /* control_details */
6303   &ddsom_get_ctrl_name
6304 };
6305 
ddsom_get_ctrl_name(int type)6306 const char *ddsom_get_ctrl_name(int type)
6307 {
6308   switch(type)
6309   {
6310     case IPT_BUTTON1: return BTN1 "Attack";
6311     case IPT_BUTTON2: return BTN2 "Jump";
6312     case IPT_BUTTON3: return BTN3 "Select";
6313     case IPT_BUTTON4: return BTN4 "Magic";
6314   } /* end of switch */
6315 
6316   return joy4way_labels(type);
6317 }
6318 
6319 const struct ControlInfo ddtod_ctrl =
6320 {
6321   false, /* 45_degree_rotation for joystick(s) */
6322   false, /* alternating_controls */
6323   true, /* mirrored_controls */
6324   "", /* control_details */
6325   &ddtod_get_ctrl_name
6326 };
6327 
ddtod_get_ctrl_name(int type)6328 const char *ddtod_get_ctrl_name(int type)
6329 {
6330   switch(type)
6331   {
6332     case IPT_BUTTON1: return BTN1 "Attack";
6333     case IPT_BUTTON2: return BTN2 "Jump";
6334     case IPT_BUTTON3: return BTN3 "Magic";
6335     case IPT_BUTTON4: return BTN4 "Select";
6336   } /* end of switch */
6337 
6338   return joy4way_labels(type);
6339 }
6340 
6341 const struct ControlInfo dynamcop_ctrl =
6342 {
6343   false, /* 45_degree_rotation for joystick(s) */
6344   false, /* alternating_controls */
6345   true, /* mirrored_controls */
6346   "Instruction panel has moves list", /* control_details */
6347   &dynamcop_get_ctrl_name
6348 };
6349 
dynamcop_get_ctrl_name(int type)6350 const char *dynamcop_get_ctrl_name(int type)
6351 {
6352   switch(type)
6353   {
6354     case IPT_BUTTON1: return BTN1 "Punch";
6355     case IPT_BUTTON2: return BTN2 "Kick";
6356     case IPT_BUTTON3: return BTN3 "Jump";
6357   } /* end of switch */
6358 
6359   return joy4way_labels(type);
6360 }
6361 
6362 const struct ControlInfo eswat_ctrl =
6363 {
6364   false, /* 45_degree_rotation for joystick(s) */
6365   false, /* alternating_controls */
6366   true, /* mirrored_controls */
6367   "", /* control_details */
6368   &eswat_get_ctrl_name
6369 };
6370 
eswat_get_ctrl_name(int type)6371 const char *eswat_get_ctrl_name(int type)
6372 {
6373   switch(type)
6374   {
6375     case IPT_BUTTON1: return BTN1 "Shoot";
6376     case IPT_BUTTON2: return BTN2 "Jump";
6377     case IPT_BUTTON3: return BTN3 "Special Weapons";
6378     case IPT_JOYSTICK_UP: return "Shoot Upward";
6379     case IPT_JOYSTICK_DOWN: return "Kneel";
6380     case IPT_JOYSTICK_LEFT: return "Left";
6381     case IPT_JOYSTICK_RIGHT: return "Right";
6382   } /* end of switch */
6383 
6384   return "";
6385 }
6386 
6387 const struct ControlInfo ecofghtr_ctrl =
6388 {
6389   false, /* 45_degree_rotation for joystick(s) */
6390   false, /* alternating_controls */
6391   true, /* mirrored_controls */
6392   "Button 1 and 3 rotate the gun around the craft so you can fire in any direction", /* control_details */
6393   &ecofghtr_get_ctrl_name
6394 };
6395 
ecofghtr_get_ctrl_name(int type)6396 const char *ecofghtr_get_ctrl_name(int type)
6397 {
6398   switch(type)
6399   {
6400     case IPT_BUTTON1: return BTN1 "Rotate CCW";
6401     case IPT_BUTTON2: return BTN2 "Shot";
6402     case IPT_BUTTON3: return BTN3 "Rotate CW";
6403   } /* end of switch */
6404 
6405   return joy4way_labels(type);
6406 }
6407 
6408 const struct ControlInfo eggventr_ctrl =
6409 {
6410   false, /* 45_degree_rotation for joystick(s) */
6411   false, /* alternating_controls */
6412   true, /* mirrored_controls */
6413   "", /* control_details */
6414   &eggventr_get_ctrl_name
6415 };
6416 
eggventr_get_ctrl_name(int type)6417 const char *eggventr_get_ctrl_name(int type)
6418 {
6419   switch(type)
6420   {
6421     case IPT_BUTTON1: return BTN1 "Fire";
6422     case IPT_LIGHTGUN_X: return "Left";
6423     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
6424     case IPT_LIGHTGUN_Y: return "Up";
6425     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
6426   } /* end of switch */
6427 
6428   return "";
6429 }
6430 
6431 const struct ControlInfo elevator_ctrl =
6432 {
6433   false, /* 45_degree_rotation for joystick(s) */
6434   true, /* alternating_controls */
6435   true, /* mirrored_controls */
6436   "", /* control_details */
6437   &elevator_get_ctrl_name
6438 };
6439 
elevator_get_ctrl_name(int type)6440 const char *elevator_get_ctrl_name(int type)
6441 {
6442   switch(type)
6443   {
6444     case IPT_BUTTON1: return BTN1 "Fire";
6445     case IPT_BUTTON2: return BTN2 "Jump/Kick";
6446     case IPT_JOYSTICK_RIGHT: return "Right";
6447     case IPT_JOYSTICK_LEFT: return "Left";
6448     case IPT_JOYSTICK_DOWN: return "Kneel";
6449     case IPT_JOYSTICK_UP: return "";
6450   } /* end of switch */
6451 
6452   return "";
6453 }
6454 
6455 const struct ControlInfo elim2_ctrl =
6456 {
6457   false, /* 45_degree_rotation for joystick(s) */
6458   false, /* alternating_controls */
6459   true, /* mirrored_controls */
6460   "", /* control_details */
6461   &elim2_get_ctrl_name
6462 };
6463 
elim2_get_ctrl_name(int type)6464 const char *elim2_get_ctrl_name(int type)
6465 {
6466   switch(type)
6467   {
6468     case IPT_BUTTON1: return BTN1 "Fire";
6469     case IPT_BUTTON2: return BTN2 "Thrust";
6470     case IPT_JOYSTICK_LEFT: return "Rotate Left";
6471     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
6472   } /* end of switch */
6473 
6474   return "";
6475 }
6476 
6477 const struct ControlInfo enigma2_ctrl =
6478 {
6479   false, /* 45_degree_rotation for joystick(s) */
6480   true, /* alternating_controls */
6481   true, /* mirrored_controls */
6482   "", /* control_details */
6483   &enigma2_get_ctrl_name
6484 };
6485 
enigma2_get_ctrl_name(int type)6486 const char *enigma2_get_ctrl_name(int type)
6487 {
6488   switch(type)
6489   {
6490     case IPT_BUTTON1: return BTN1 "Fire";
6491     case IPT_BUTTON2: return BTN2 "Thrust";
6492   } /* end of switch */
6493 
6494   return joy2way_labels(type);
6495 }
6496 
6497 const struct ControlInfo eprom_ctrl =
6498 {
6499   false, /* 45_degree_rotation for joystick(s) */
6500   false, /* alternating_controls */
6501   true, /* mirrored_controls */
6502   "The buttons are arranged in a triangle, with fire on the bottom left corner, duck on the bottom right, and jump/start on the middle top corner. The original analog stick used Hall Effect sensors instead of POTs. Due to the price (and now out of production) of the sensors, many arcade operators replaced the hall effect sensors with their equivalent POT. This game is very hard to control in mame with 8-ways or keyboards. An analog joystick, OTOH, gives the player control like the original joystick.", /* control_details */
6503   &eprom_get_ctrl_name
6504 };
6505 
eprom_get_ctrl_name(int type)6506 const char *eprom_get_ctrl_name(int type)
6507 {
6508   switch(type)
6509   {
6510     case IPT_BUTTON1: return BTN1 "Fire";
6511     case IPT_BUTTON2: return BTN2 "Jump / Start";
6512     case IPT_BUTTON3: return BTN3 "Duck";
6513     case IPT_AD_STICK_X: return "Left";
6514     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
6515     case IPT_AD_STICK_Y: return "Up";
6516     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
6517   } /* end of switch */
6518 
6519   return "";
6520 }
6521 
6522 const struct ControlInfo exerion_ctrl =
6523 {
6524   false, /* 45_degree_rotation for joystick(s) */
6525   true, /* alternating_controls */
6526   true, /* mirrored_controls */
6527   "This game has two types of Cannon. Fast Fire shoots a limited number of rapid-fire shots from the ship's center. Fire shoots double forward shots for the ship's sides. The game uses standard controls, i.e., moving the stick up causes the ship to climb.", /* control_details */
6528   &exerion_get_ctrl_name
6529 };
6530 
exerion_get_ctrl_name(int type)6531 const char *exerion_get_ctrl_name(int type)
6532 {
6533   switch(type)
6534   {
6535     case IPT_BUTTON1: return BTN1 "Fast Fire";
6536     case IPT_BUTTON2: return BTN2 "Fire";
6537   } /* end of switch */
6538 
6539   return joy4way_labels(type);
6540 }
6541 
6542 const struct ControlInfo exterm_ctrl =
6543 {
6544   false, /* 45_degree_rotation for joystick(s) */
6545   false, /* alternating_controls */
6546   true, /* mirrored_controls */
6547   "OTHER: The 8-way trigger stick also can be rotated left or right. (Label 'Rotate Left', and 'Rotate Right')  The rotation is analog, while the rest of the stick is a digital 8-way trigger stick. Mame uses the DIAL type for this input. Mame by default maps the rotate left & right to the same inputs as move left and move right, and the game plays fairly well with this setup. To fire, you are supposed to move all the way to your side, press the fire button, and control the direction you shoot by rotating the trigger stick and moving it up and down. As long as you hold the fire button, you can't move away from the edge. NOTE: This entry has been modified to use a rotary optical joystick with a top fire button. This is the closest to the controls the game originally had, unfortunately a top fire rotary does not exist. You could, however, take a top fire handle and mount it into a rotary base, in theory at least. There is a cheat that lets you shoot all the time (making the 'fire/grab' button just a fire button).", /* control_details */
6548   &exterm_get_ctrl_name
6549 };
6550 
exterm_get_ctrl_name(int type)6551 const char *exterm_get_ctrl_name(int type)
6552 {
6553   switch(type)
6554   {
6555     case IPT_BUTTON1: return BTN1 "Fire / Grap";
6556     case IPT_BUTTON2: return BTN2 "Pound";
6557     case IPT_JOYSTICK_RIGHT: return "Move Right";
6558     case IPT_JOYSTICK_LEFT: return "Move Left";
6559     case IPT_JOYSTICK_DOWN: return "Move Down";
6560     case IPT_JOYSTICK_UP: return "Move Up";
6561     case IPT_DIAL: return "Rotate Left";
6562     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
6563   } /* end of switch */
6564 
6565   return "";
6566 }
6567 
6568 const struct ControlInfo eyes_ctrl =
6569 {
6570   false, /* 45_degree_rotation for joystick(s) */
6571   true, /* alternating_controls */
6572   true, /* mirrored_controls */
6573   "", /* control_details */
6574   &eyes_get_ctrl_name
6575 };
6576 
eyes_get_ctrl_name(int type)6577 const char *eyes_get_ctrl_name(int type)
6578 {
6579   switch(type)
6580   {
6581     case IPT_BUTTON1: return BTN1 "Fire";
6582   } /* end of switch */
6583 
6584   return joy4way_labels(type);
6585 }
6586 
6587 const struct ControlInfo f1dream_ctrl =
6588 {
6589   false, /* 45_degree_rotation for joystick(s) */
6590   true, /* alternating_controls */
6591   true, /* mirrored_controls */
6592   "The joystick is used to guide the car around the track. Holding both Gear buttons down activates Turbo mode. Note: Directions for turn are not included because which direction the stick makes you turn depends upon which way your car is facing. It is actually quite confusing to control your car.", /* control_details */
6593   &f1dream_get_ctrl_name
6594 };
6595 
f1dream_get_ctrl_name(int type)6596 const char *f1dream_get_ctrl_name(int type)
6597 {
6598   switch(type)
6599   {
6600     case IPT_BUTTON1: return BTN1 "1st Gear";
6601     case IPT_BUTTON2: return BTN2 "2nd Gear";
6602     case IPT_JOYSTICK_RIGHT: return "Turn";
6603     case IPT_JOYSTICK_LEFT: return "Turn";
6604     case IPT_JOYSTICK_DOWN: return "Turn";
6605     case IPT_JOYSTICK_UP: return "Turn";
6606   } /* end of switch */
6607 
6608   return "";
6609 }
6610 
6611 const struct ControlInfo f1en_ctrl =
6612 {
6613   false, /* 45_degree_rotation for joystick(s) */
6614   false, /* alternating_controls */
6615   false, /* mirrored_controls */
6616   "This game uses formula one style shifter buttons, which are mounted behind the steering wheel.", /* control_details */
6617   &f1en_get_ctrl_name
6618 };
6619 
f1en_get_ctrl_name(int type)6620 const char *f1en_get_ctrl_name(int type)
6621 {
6622   switch(type)
6623   {
6624     case IPT_BUTTON1: return BTN1 "Gear Down";
6625     case IPT_BUTTON2: return BTN2 "Gear Up";
6626     case IPT_PADDLE: return "Left";
6627     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
6628     case IPT_PEDAL: return "Accelerate";
6629     case IPT_PEDAL2: return "Brake";
6630   } /* end of switch */
6631 
6632   return "";
6633 }
6634 
6635 const struct ControlInfo fantasy_ctrl =
6636 {
6637   false, /* 45_degree_rotation for joystick(s) */
6638   true, /* alternating_controls */
6639   true, /* mirrored_controls */
6640   "", /* control_details */
6641   &fantasy_get_ctrl_name
6642 };
6643 
fantasy_get_ctrl_name(int type)6644 const char *fantasy_get_ctrl_name(int type)
6645 {
6646   switch(type)
6647   {
6648   } /* end of switch */
6649 
6650   return joy4way_labels(type);
6651 }
6652 
6653 const struct ControlInfo qbert_ctrl =
6654 {
6655   true, /* 45_degree_rotation for joystick(s) */
6656   true, /* alternating_controls */
6657   true, /* mirrored_controls */
6658   "Uses a 4-way joystick rotated 45 degrees.", /* control_details */
6659   &qbert_get_ctrl_name
6660 };
6661 
qbert_get_ctrl_name(int type)6662 const char *qbert_get_ctrl_name(int type)
6663 {
6664   if(!options.restrict_4_way)
6665   {
6666     switch(type)
6667     {
6668       case IPT_JOYSTICK_LEFT:   return "Left+Up";
6669       case IPT_JOYSTICK_DOWN:   return "Down+Left";
6670       case IPT_JOYSTICK_UP:     return "Up+Right";
6671       case IPT_JOYSTICK_RIGHT:  return "Down+Right";
6672     } /* end of switch */
6673   }
6674   /* otherwise, controls are effectively rotated, so using the diagonal names would be confusing. */
6675   /* just use the generic labels                                                                  */
6676   return joy4way_labels(type);
6677 }
6678 
6679 const struct ControlInfo fax_ctrl =
6680 {
6681   false, /* 45_degree_rotation for joystick(s) */
6682   false, /* alternating_controls */
6683   true, /* mirrored_controls */
6684   "In the mame driver, this game seems to have two sets of coin 1 and coin 2 buttons. It's unclear if this is a bug or intentional.", /* control_details */
6685   &fax_get_ctrl_name
6686 };
6687 
fax_get_ctrl_name(int type)6688 const char *fax_get_ctrl_name(int type)
6689 {
6690   switch(type)
6691   {
6692     case IPT_BUTTON1: return BTN1 "A";
6693     case IPT_BUTTON2: return BTN2 "B";
6694     case IPT_BUTTON3: return BTN3 "C";
6695     case IPT_BUTTON4: return BTN4 "D";
6696   } /* end of switch */
6697 
6698   return "";
6699 }
6700 
6701 const struct ControlInfo fgoal_ctrl =
6702 {
6703   false, /* 45_degree_rotation for joystick(s) */
6704   true, /* alternating_controls */
6705   true, /* mirrored_controls */
6706   "", /* control_details */
6707   &fgoal_get_ctrl_name
6708 };
6709 
fgoal_get_ctrl_name(int type)6710 const char *fgoal_get_ctrl_name(int type)
6711 {
6712   switch(type)
6713   {
6714     case IPT_PADDLE: return "Left";
6715     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
6716   } /* end of switch */
6717 
6718   return "";
6719 }
6720 
6721 const struct ControlInfo fghtatck_ctrl =
6722 {
6723   false, /* 45_degree_rotation for joystick(s) */
6724   false, /* alternating_controls */
6725   true, /* mirrored_controls */
6726   "It should be noted that mame includes a third button and rightly so, however, the button is an extra one not used in this game but in other games of the system. It does show up in the service menu, however.", /* control_details */
6727   &fghtatck_get_ctrl_name
6728 };
6729 
fghtatck_get_ctrl_name(int type)6730 const char *fghtatck_get_ctrl_name(int type)
6731 {
6732   switch(type)
6733   {
6734     case IPT_BUTTON1: return BTN1 "Fire";
6735     case IPT_BUTTON2: return BTN2 "Bomb";
6736   } /* end of switch */
6737 
6738   return joy4way_labels(type);
6739 }
6740 
6741 const struct ControlInfo fvipers_ctrl =
6742 {
6743   false, /* 45_degree_rotation for joystick(s) */
6744   false, /* alternating_controls */
6745   true, /* mirrored_controls */
6746   "In mame you will notice a 4th button. This is because the game runs on the model-2b boardset, which is setup generically in mame with 4 inputs.", /* control_details */
6747   &fvipers_get_ctrl_name
6748 };
6749 
fvipers_get_ctrl_name(int type)6750 const char *fvipers_get_ctrl_name(int type)
6751 {
6752   switch(type)
6753   {
6754     case IPT_BUTTON1: return BTN1 "Punch";
6755     case IPT_BUTTON2: return BTN2 "Kick";
6756     case IPT_BUTTON3: return BTN3 "Guard";
6757   } /* end of switch */
6758 
6759   return joy4way_labels(type);
6760 }
6761 
6762 const struct ControlInfo finalb_ctrl =
6763 {
6764   false, /* 45_degree_rotation for joystick(s) */
6765   false, /* alternating_controls */
6766   true, /* mirrored_controls */
6767   "Press the weak and medium buttons at the same time for a strong punch.", /* control_details */
6768   &finalb_get_ctrl_name
6769 };
6770 
finalb_get_ctrl_name(int type)6771 const char *finalb_get_ctrl_name(int type)
6772 {
6773   switch(type)
6774   {
6775     case IPT_BUTTON1: return BTN1 "Weak";
6776     case IPT_BUTTON2: return BTN2 "Medium Strength";
6777     case IPT_BUTTON3: return BTN3 "Duck";
6778   } /* end of switch */
6779 
6780   return joy4way_labels(type);
6781 }
6782 
6783 const struct ControlInfo ffight_ctrl =
6784 {
6785   false, /* 45_degree_rotation for joystick(s) */
6786   false, /* alternating_controls */
6787   true, /* mirrored_controls */
6788   "If you press both buttons at the same time, your character does a special move or breaks out of a hold. Mame and some machines had a third cheat button /* control_details */ it basically presses both buttons for you. It is included since the timing of pressing both buttons at the same time can be tight, but is disabled in mame by default.", /* control_details */
6789   &ffight_get_ctrl_name
6790 };
6791 
ffight_get_ctrl_name(int type)6792 const char *ffight_get_ctrl_name(int type)
6793 {
6794   switch(type)
6795   {
6796     case IPT_BUTTON1: return BTN1 "Attack";
6797     case IPT_BUTTON2: return BTN2 "Jump";
6798     case IPT_BUTTON3: return BTN3 "";
6799   } /* end of switch */
6800 
6801   return joy4way_labels(type);
6802 }
6803 
6804 const struct ControlInfo finalap2_ctrl =
6805 {
6806   false, /* 45_degree_rotation for joystick(s) */
6807   false, /* alternating_controls */
6808   false, /* mirrored_controls */
6809   "", /* control_details */
6810   &finalap2_get_ctrl_name
6811 };
6812 
finalap2_get_ctrl_name(int type)6813 const char *finalap2_get_ctrl_name(int type)
6814 {
6815   switch(type)
6816   {
6817     case IPT_BUTTON1: return BTN1 "High / Low";
6818     case IPT_DIAL: return "Turn Left";
6819     case (IPT_DIAL + IPT_EXTENSION): return "Turn Right";
6820     case IPT_PEDAL: return "Accelerate";
6821     case IPT_PEDAL2: return "Brake";
6822   } /* end of switch */
6823 
6824   return "";
6825 }
6826 
6827 const struct ControlInfo firetrap_ctrl =
6828 {
6829   false, /* 45_degree_rotation for joystick(s) */
6830   true, /* alternating_controls */
6831   true, /* mirrored_controls */
6832   "This game works exactly like crazy climber except you can shoot by pressing right on the left joystick and left on the right joystick at the same time. Some conversion kits used top-fire joysticks as this is a rather un-natural movement for firing rapidly. Because of this an auxillary input for 'fire' is included. So you can play this game with two joysticks, a joystick and a top-fire, two top-fires or whatever floats your boat.", /* control_details */
6833   &firetrap_get_ctrl_name
6834 };
6835 
firetrap_get_ctrl_name(int type)6836 const char *firetrap_get_ctrl_name(int type)
6837 {
6838   switch(type)
6839   {
6840     case IPT_BUTTON1: return BTN1 "Fire";
6841     case IPT_JOYSTICKLEFT_UP: return "Left Up";
6842     case IPT_JOYSTICKLEFT_DOWN: return "Left Down";
6843     case IPT_JOYSTICKLEFT_LEFT: return "Left Left";
6844     case IPT_JOYSTICKLEFT_RIGHT: return "Left Right";
6845     case IPT_JOYSTICKRIGHT_UP: return "Right Up";
6846     case IPT_JOYSTICKRIGHT_DOWN: return "Right Down";
6847     case IPT_JOYSTICKRIGHT_LEFT: return "Right Left";
6848     case IPT_JOYSTICKRIGHT_RIGHT: return "Right Right";
6849   } /* end of switch */
6850 
6851   return "";
6852 }
6853 
6854 #if 0
6855 const struct ControlInfo firetrk_ctrl =
6856 {
6857   false, /* 45_degree_rotation for joystick(s) */
6858   false, /* alternating_controls */
6859   false, /* mirrored_controls */
6860   "In this game the player 2 control panel is behind player 1. Yes I said behind. On a real fire truck there are two steering wheels. One is in the back of the truck and turns the read wheels independantly of the front, thus allowing for tight turns with such a long vehicle. This game is played exactly the same with player 2 controlling the rear wheel when two player mode is selected. When 1 player mode is selected, those rear controls are ignored and thus the game is much harder to play.", /* control_details */
6861   &firetrk_get_ctrl_name
6862 };
6863 
6864 const char *firetrk_get_ctrl_name(int type)
6865 {
6866   switch(type)
6867   {
6868     case (IPT_BUTTON1 | IPF_PLAYER2): return "Bell";
6869     case IPT_DIAL: return "Left (Rear Wheels)";
6870     case (IPT_DIAL + IPT_EXTENSION): return "Right (Rear Wheels)";
6871     case IPT_BUTTON1: return BTN1 "Accelerate";
6872     case IPT_BUTTON2: return BTN2 "Horn";
6873     case IPT_BUTTON3: return BTN3 "Track Select";
6874     case IPT_DIAL: return "Left";
6875     case (IPT_DIAL + IPT_EXTENSION): return "Right";
6876   } /* end of switch */
6877 
6878   return "";
6879 }
6880 #endif
6881 
6882 const struct ControlInfo fshark_ctrl =
6883 {
6884   false, /* 45_degree_rotation for joystick(s) */
6885   true, /* alternating_controls */
6886   true, /* mirrored_controls */
6887   "", /* control_details */
6888   &fshark_get_ctrl_name
6889 };
6890 
fshark_get_ctrl_name(int type)6891 const char *fshark_get_ctrl_name(int type)
6892 {
6893   switch(type)
6894   {
6895     case IPT_BUTTON1: return BTN1 "Fire";
6896     case IPT_BUTTON2: return BTN2 "Bomb";
6897   } /* end of switch */
6898 
6899   return joy4way_labels(type);
6900 }
6901 
6902 const struct ControlInfo foodf_ctrl =
6903 {
6904   false, /* 45_degree_rotation for joystick(s) */
6905   true, /* alternating_controls */
6906   true, /* mirrored_controls */
6907   "Uses a Gimbal stick.", /* control_details */
6908   &foodf_get_ctrl_name
6909 };
6910 
foodf_get_ctrl_name(int type)6911 const char *foodf_get_ctrl_name(int type)
6912 {
6913   switch(type)
6914   {
6915     case IPT_BUTTON1: return BTN1 "Throw";
6916     case IPT_AD_STICK_Y: return "Up";
6917     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
6918     case IPT_AD_STICK_X: return "Left";
6919     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
6920   } /* end of switch */
6921 
6922   return "";
6923 }
6924 
6925 const struct ControlInfo forgottn_ctrl =
6926 {
6927   false, /* 45_degree_rotation for joystick(s) */
6928   false, /* alternating_controls */
6929   true, /* mirrored_controls */
6930   "The spinners also was the fire button. The spinner rotates the direction the character shoots. The players can buy power-ups /* control_details */ when they get a shooting power-up the character gets a floating shooting platform that rotates with the player. When the spinner is not pressed and is rotated, the platform rotates around the charcter, staying relative to the direction the character is facing. When the spinner is pressed and rotated, the platform and character rotate at their own centers.", /* control_details */
6931   &forgottn_get_ctrl_name
6932 };
6933 
forgottn_get_ctrl_name(int type)6934 const char *forgottn_get_ctrl_name(int type)
6935 {
6936   switch(type)
6937   {
6938     case IPT_BUTTON1: return BTN1 "Push to Fire";
6939     case IPT_DIAL: return "Left";
6940     case (IPT_DIAL + IPT_EXTENSION): return "Right";
6941   } /* end of switch */
6942 
6943   return joy4way_labels(type);
6944 }
6945 
6946 const struct ControlInfo formatz_ctrl =
6947 {
6948   false, /* 45_degree_rotation for joystick(s) */
6949   true, /* alternating_controls */
6950   true, /* mirrored_controls */
6951   "In the kit, it was optional to have the buttons mirrored on both sides of the joystick. Used 8-way leaf joysticks  Holding the laser button down gives the player one stronger shot. Holding the jump button down transforms the player between a robot and an airplane. Unlike most side-scroll shooters with only shoot straight sideways, you shoot diagonally when the joystick is pushed up or down.", /* control_details */
6952   &formatz_get_ctrl_name
6953 };
6954 
formatz_get_ctrl_name(int type)6955 const char *formatz_get_ctrl_name(int type)
6956 {
6957   switch(type)
6958   {
6959     case IPT_BUTTON1: return BTN1 "Laser / Hold for Energy";
6960     case IPT_BUTTON2: return BTN2 "Jump Button / Hold to Transform";
6961   } /* end of switch */
6962 
6963   return joy4way_labels(type);
6964 }
6965 
6966 const struct ControlInfo frenzy_ctrl =
6967 {
6968   false, /* 45_degree_rotation for joystick(s) */
6969   true, /* alternating_controls */
6970   true, /* mirrored_controls */
6971   "Sequel to Berzerk. An interesting feature of the game is that the fire button only works when the player is moving. Also, this game allows you and enemies to shoot out wall segments and move/shoot through them.", /* control_details */
6972   &frenzy_get_ctrl_name
6973 };
6974 
frenzy_get_ctrl_name(int type)6975 const char *frenzy_get_ctrl_name(int type)
6976 {
6977   switch(type)
6978   {
6979     case IPT_BUTTON1: return BTN1 "Fire";
6980   } /* end of switch */
6981 
6982   return joy4way_labels(type);
6983 }
6984 
6985 const struct ControlInfo frogger_ctrl =
6986 {
6987   false, /* 45_degree_rotation for joystick(s) */
6988   true, /* alternating_controls */
6989   true, /* mirrored_controls */
6990   "", /* control_details */
6991   &frogger_get_ctrl_name
6992 };
6993 
frogger_get_ctrl_name(int type)6994 const char *frogger_get_ctrl_name(int type)
6995 {
6996   switch(type)
6997   {
6998   } /* end of switch */
6999 
7000   return joy4way_labels(type);
7001 }
7002 
7003 const struct ControlInfo frogs_ctrl =
7004 {
7005   false, /* 45_degree_rotation for joystick(s) */
7006   false, /* alternating_controls */
7007   false, /* mirrored_controls */
7008   "It really was a three way joystick, basically a 4-way stick without a down. The button flicked out your frog's tongue. *update*    I looked into this. This game was generally hacked into an old frogger cab. The jump button was hacked into the 4way up and a tongue button was added. However mame uses a two way joystick and two buttons to emulate the hardware (which is correct input wise) so we reflect these constants in the database. As it's sorta a bootleg there isn't much point in worrying about control accuracy.", /* control_details */
7009   &frogs_get_ctrl_name
7010 };
7011 
frogs_get_ctrl_name(int type)7012 const char *frogs_get_ctrl_name(int type)
7013 {
7014   switch(type)
7015   {
7016     case IPT_BUTTON1: return BTN1 "Tongue";
7017     case IPT_BUTTON2: return BTN2 "Jump";
7018   } /* end of switch */
7019 
7020   return joy2way_labels(type);
7021 }
7022 
7023 const struct ControlInfo frontlin_ctrl =
7024 {
7025   false, /* 45_degree_rotation for joystick(s) */
7026   true, /* alternating_controls */
7027   true, /* mirrored_controls */
7028   "This game, along with Wild Western and Tin Star, used a unique controller. The Actual game uses a '8 way push to fire' spinner. The 'spinner' actually used a cam to engage one or two of the 4 microswitches below the control panel. So if you have a real spinner then don't expect to use it with this game. MAME emulates this like a dual 8-way joystick game. This set-up works well for the original controls, but poorly for anything else. Note: Spinners and rotary joysticks can not be used in MAME for this game. In the tank stages, use grenades to enter the blue tank. Exit the tank when it is hit. Use the spinner to rotate and fire the tank turret.", /* control_details */
7029   &frontlin_get_ctrl_name
7030 };
7031 
frontlin_get_ctrl_name(int type)7032 const char *frontlin_get_ctrl_name(int type)
7033 {
7034   switch(type)
7035   {
7036     case IPT_BUTTON1: return BTN1 "Fire";
7037     case IPT_BUTTON2: return BTN2 "Tank/Grenade";
7038     case IPT_JOYSTICKLEFT_DOWN: return "Aim Down";
7039     case IPT_JOYSTICKLEFT_UP: return "Aim Up";
7040     case IPT_JOYSTICKLEFT_LEFT: return "Aim Left";
7041     case IPT_JOYSTICKLEFT_RIGHT: return "Aim Right";
7042     case IPT_JOYSTICKRIGHT_UP: return "Up";
7043     case IPT_JOYSTICKRIGHT_DOWN: return "Down";
7044     case IPT_JOYSTICKRIGHT_LEFT: return "Left";
7045     case IPT_JOYSTICKRIGHT_RIGHT: return "Right";
7046   } /* end of switch */
7047 
7048   return "";
7049 }
7050 
7051 const struct ControlInfo futspy_ctrl =
7052 {
7053   false, /* 45_degree_rotation for joystick(s) */
7054   true, /* alternating_controls */
7055   true, /* mirrored_controls */
7056   "The control panel on this game improperly labeled the bomb button as fire since the top button is the primary weapon.", /* control_details */
7057   &futspy_get_ctrl_name
7058 };
7059 
futspy_get_ctrl_name(int type)7060 const char *futspy_get_ctrl_name(int type)
7061 {
7062   switch(type)
7063   {
7064     case IPT_BUTTON1: return BTN1 "Fire";
7065     case IPT_BUTTON2: return BTN2 "Fire (Bomb)";
7066   } /* end of switch */
7067 
7068   return joy4way_labels(type);
7069 }
7070 
7071 const struct ControlInfo gloc_ctrl =
7072 {
7073   false, /* 45_degree_rotation for joystick(s) */
7074   false, /* alternating_controls */
7075   false, /* mirrored_controls */
7076   "", /* control_details */
7077   &gloc_get_ctrl_name
7078 };
7079 
gloc_get_ctrl_name(int type)7080 const char *gloc_get_ctrl_name(int type)
7081 {
7082   switch(type)
7083   {
7084     case IPT_BUTTON1: return BTN1 "Vulcan - Gun";
7085     case IPT_BUTTON2: return BTN2 "Missile";
7086     case IPT_BUTTON3: return BTN3 "Afterburner";
7087     case IPT_AD_STICK_X: return "Left";
7088     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
7089     case IPT_AD_STICK_Y: return "Up";
7090     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
7091     case IPT_AD_STICK_Z: return "Speed Up";
7092     case (IPT_AD_STICK_Z + IPT_EXTENSION): return "Slow Down";
7093   } /* end of switch */
7094 
7095   return "";
7096 }
7097 
7098 const struct ControlInfo gijoe_ctrl =
7099 {
7100   false, /* 45_degree_rotation for joystick(s) */
7101   false, /* alternating_controls */
7102   true, /* mirrored_controls */
7103   "", /* control_details */
7104   &gijoe_get_ctrl_name
7105 };
7106 
gijoe_get_ctrl_name(int type)7107 const char *gijoe_get_ctrl_name(int type)
7108 {
7109   switch(type)
7110   {
7111     case IPT_BUTTON1: return BTN1 "Shoot";
7112     case IPT_BUTTON2: return BTN2 "Super Weapon";
7113   } /* end of switch */
7114 
7115   return joy4way_labels(type);
7116 }
7117 
7118 const struct ControlInfo gground_ctrl =
7119 {
7120   false, /* 45_degree_rotation for joystick(s) */
7121   false, /* alternating_controls */
7122   true, /* mirrored_controls */
7123   "It should be noted that the joystick had the simple label of 'Select Warrior / Move Player'", /* control_details */
7124   &gground_get_ctrl_name
7125 };
7126 
gground_get_ctrl_name(int type)7127 const char *gground_get_ctrl_name(int type)
7128 {
7129   switch(type)
7130   {
7131     case IPT_BUTTON1: return BTN1 "Magic Weapon";
7132     case IPT_BUTTON2: return BTN2 "special Weapon";
7133   } /* end of switch */
7134 
7135   return joy4way_labels(type);
7136 }
7137 
7138 const struct ControlInfo galaga88_ctrl =
7139 {
7140   false, /* 45_degree_rotation for joystick(s) */
7141   true, /* alternating_controls */
7142   true, /* mirrored_controls */
7143   "This game was marketed as a conversion for Dragon Spirit, so it used an 8-way joystick, but the vertical inputs were ignored. The game has one actual action button 'Fire' located on the left and right side of the joystick. However the PCB does have three button inputs.", /* control_details */
7144   &galaga88_get_ctrl_name
7145 };
7146 
galaga88_get_ctrl_name(int type)7147 const char *galaga88_get_ctrl_name(int type)
7148 {
7149   switch(type)
7150   {
7151     case IPT_BUTTON1: return BTN1 "Fire";
7152     case IPT_BUTTON2: return BTN2 "Fire";
7153     case IPT_BUTTON3: return BTN3 "N/A";
7154   } /* end of switch */
7155 
7156   return joy2way_labels(type); /* generic "Left" and "Right" labels */
7157 }
7158 
7159 const struct ControlInfo galaga_ctrl =
7160 {
7161   false, /* 45_degree_rotation for joystick(s) */
7162   true, /* alternating_controls */
7163   true, /* mirrored_controls */
7164   "", /* control_details */
7165   &galaga_get_ctrl_name
7166 };
7167 
galaga_get_ctrl_name(int type)7168 const char *galaga_get_ctrl_name(int type)
7169 {
7170   switch(type)
7171   {
7172     case IPT_BUTTON1:        return BTN1 "Fire";
7173   } /* end of switch */
7174 
7175   return joy2way_labels(type); /* generic "Left" and "Right" labels */
7176 }
7177 
7178 const struct ControlInfo galaxian_ctrl =
7179 {
7180   false, /* 45_degree_rotation for joystick(s) */
7181   true,  /* alternating_controls */
7182   true,  /* mirrored_controls */
7183   "",    /* control_details */
7184   &galaxian_get_ctrl_name
7185 };
7186 
galaxian_get_ctrl_name(int type)7187 const char *galaxian_get_ctrl_name(int type)
7188 {
7189   switch(type)
7190   {
7191     case IPT_BUTTON1: return BTN1 "Fire";
7192   } /* end of switch */
7193 
7194   return joy2way_labels(type); /* generic "Left" and "Right" labels */
7195 }
7196 
7197 const struct ControlInfo gforce2_ctrl =
7198 {
7199   false, /* 45_degree_rotation for joystick(s) */
7200   false, /* alternating_controls */
7201   false, /* mirrored_controls */
7202   "Please note that none of the controls in this game have any labels. They are labeled by what they do.", /* control_details */
7203   &gforce2_get_ctrl_name
7204 };
7205 
gforce2_get_ctrl_name(int type)7206 const char *gforce2_get_ctrl_name(int type)
7207 {
7208   switch(type)
7209   {
7210     case IPT_BUTTON1: return BTN1 "Fire";
7211     case IPT_BUTTON2: return BTN2 "Missile";
7212     case IPT_AD_STICK_X: return "Left";
7213     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
7214     case IPT_AD_STICK_Y: return "Up";
7215     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
7216     case IPT_AD_STICK_Z: return "Fast";
7217     case (IPT_AD_STICK_Z + IPT_EXTENSION): return "Slow";
7218   } /* end of switch */
7219 
7220   return "";
7221 }
7222 
7223 const struct ControlInfo galxwars_ctrl =
7224 {
7225   false, /* 45_degree_rotation for joystick(s) */
7226   true, /* alternating_controls */
7227   true, /* mirrored_controls */
7228   "", /* control_details */
7229   &galxwars_get_ctrl_name
7230 };
7231 
galxwars_get_ctrl_name(int type)7232 const char *galxwars_get_ctrl_name(int type)
7233 {
7234   switch(type)
7235   {
7236     case IPT_BUTTON1: return BTN1 "Fire";
7237     case IPT_JOYSTICK_LEFT: return "L";
7238     case IPT_JOYSTICK_RIGHT: return "R";
7239   } /* end of switch */
7240 
7241   return "";
7242 }
7243 
7244 const struct ControlInfo galpanic_ctrl =
7245 {
7246   false, /* 45_degree_rotation for joystick(s) */
7247   false, /* alternating_controls */
7248   true, /* mirrored_controls */
7249   "", /* control_details */
7250   &galpanic_get_ctrl_name
7251 };
7252 
galpanic_get_ctrl_name(int type)7253 const char *galpanic_get_ctrl_name(int type)
7254 {
7255   switch(type)
7256   {
7257     case IPT_BUTTON1: return BTN1 "Cut";
7258   } /* end of switch */
7259 
7260   return joy4way_labels(type);
7261 }
7262 
7263 const struct ControlInfo galpani2_ctrl =
7264 {
7265   false, /* 45_degree_rotation for joystick(s) */
7266   true, /* alternating_controls */
7267   true, /* mirrored_controls */
7268   "This game didn't actually label the button and in all the docs it's referred to as button 1, however it is clear what this button does. I labeled it 'cut' to avoid confusion as 'button 1' may seem like a parsing error to the average viewer. Also take note that the pcb has inputs for three physical buttons and they are emulated in mame, but only the first is used.", /* control_details */
7269   &galpani2_get_ctrl_name
7270 };
7271 
galpani2_get_ctrl_name(int type)7272 const char *galpani2_get_ctrl_name(int type)
7273 {
7274   switch(type)
7275   {
7276     case IPT_BUTTON1: return BTN1 "Cut";
7277   } /* end of switch */
7278 
7279   return joy4way_labels(type);
7280 }
7281 
7282 const struct ControlInfo gaplus_ctrl =
7283 {
7284   false, /* 45_degree_rotation for joystick(s) */
7285   true, /* alternating_controls */
7286   true, /* mirrored_controls */
7287   "", /* control_details */
7288   &gaplus_get_ctrl_name
7289 };
7290 
gaplus_get_ctrl_name(int type)7291 const char *gaplus_get_ctrl_name(int type)
7292 {
7293   switch(type)
7294   {
7295     case IPT_BUTTON1: return BTN1 "Fire";
7296   } /* end of switch */
7297 
7298   return joy4way_labels(type);
7299 }
7300 
7301 const struct ControlInfo gauntlet_ctrl =
7302 {
7303   false, /* 45_degree_rotation for joystick(s) */
7304   false, /* alternating_controls */
7305   true, /* mirrored_controls */
7306   "", /* control_details */
7307   &gauntlet_get_ctrl_name
7308 };
7309 
gauntlet_get_ctrl_name(int type)7310 const char *gauntlet_get_ctrl_name(int type)
7311 {
7312   switch(type)
7313   {
7314     case IPT_BUTTON1: return BTN1 "Fire";
7315     case IPT_BUTTON2: return BTN2 "Magic / Start";
7316   } /* end of switch */
7317 
7318   return joy4way_labels(type);
7319 }
7320 
7321 const struct ControlInfo gaunt2_ctrl =
7322 {
7323   false, /* 45_degree_rotation for joystick(s) */
7324   false, /* alternating_controls */
7325   true, /* mirrored_controls */
7326   "", /* control_details */
7327   &gaunt2_get_ctrl_name
7328 };
7329 
gaunt2_get_ctrl_name(int type)7330 const char *gaunt2_get_ctrl_name(int type)
7331 {
7332   switch(type)
7333   {
7334     case IPT_BUTTON1: return BTN1 "Fire";
7335     case IPT_BUTTON2: return BTN2 "Magic / Start";
7336   } /* end of switch */
7337 
7338   return joy4way_labels(type);
7339 }
7340 
7341 const struct ControlInfo geebee_ctrl =
7342 {
7343   false, /* 45_degree_rotation for joystick(s) */
7344   true, /* alternating_controls */
7345   true, /* mirrored_controls */
7346   "This is a blockout type game that is controlled by a paddle (limited turn with POT), instead of a spinner as in Arkanoid.", /* control_details */
7347   &geebee_get_ctrl_name
7348 };
7349 
geebee_get_ctrl_name(int type)7350 const char *geebee_get_ctrl_name(int type)
7351 {
7352   switch(type)
7353   {
7354     case IPT_BUTTON1: return BTN1 "Serve";
7355     case IPT_PADDLE: return "Left";
7356     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
7357   } /* end of switch */
7358 
7359   return "";
7360 }
7361 
7362 const struct ControlInfo gng_ctrl =
7363 {
7364   false, /* 45_degree_rotation for joystick(s) */
7365   true, /* alternating_controls */
7366   true, /* mirrored_controls */
7367   "Buttons are mirrored on both sides of the joystick.", /* control_details */
7368   &gng_get_ctrl_name
7369 };
7370 
gng_get_ctrl_name(int type)7371 const char *gng_get_ctrl_name(int type)
7372 {
7373   switch(type)
7374   {
7375     case IPT_BUTTON1: return BTN1 "Fire";
7376     case IPT_BUTTON2: return BTN2 "Jump";
7377   } /* end of switch */
7378 
7379   return joy4way_labels(type);
7380 }
7381 
7382 const struct ControlInfo ghouls_ctrl =
7383 {
7384   false, /* 45_degree_rotation for joystick(s) */
7385   true, /* alternating_controls */
7386   true, /* mirrored_controls */
7387   "", /* control_details */
7388   &ghouls_get_ctrl_name
7389 };
7390 
ghouls_get_ctrl_name(int type)7391 const char *ghouls_get_ctrl_name(int type)
7392 {
7393   switch(type)
7394   {
7395     case IPT_BUTTON1: return BTN1 "Fire";
7396     case IPT_BUTTON2: return BTN2 "Jump";
7397   } /* end of switch */
7398 
7399   return joy4way_labels(type);
7400 }
7401 
7402 const struct ControlInfo gigawing_ctrl =
7403 {
7404   false, /* 45_degree_rotation for joystick(s) */
7405   false, /* alternating_controls */
7406   true, /* mirrored_controls */
7407   "Normal shots are made by tapping on the 'Shot' button. If you hold it down (and you are recharged), you get a temporary 'Reflect Barrier' that reflect all the ememies' shots back at them. You don't have a max number of times to use the reflect barrier, except there is a fairly short recharge time before you can use it again. The 'Force Bomb' button is like most shooter's bomb buttons (you have limited number bombs & one bomb is stronger than a normal shot).", /* control_details */
7408   &gigawing_get_ctrl_name
7409 };
7410 
gigawing_get_ctrl_name(int type)7411 const char *gigawing_get_ctrl_name(int type)
7412 {
7413   switch(type)
7414   {
7415     case IPT_BUTTON1: return BTN1 "Shot / Hold for Reflect Barrier";
7416     case IPT_BUTTON2: return BTN2 "Force Bomb";
7417   } /* end of switch */
7418 
7419   return joy4way_labels(type);
7420 }
7421 
7422 const struct ControlInfo goldmedl_ctrl =
7423 {
7424   false, /* 45_degree_rotation for joystick(s) */
7425   false, /* alternating_controls */
7426   true, /* mirrored_controls */
7427   "The buttons on this game aren't labeled, which is a shame as it's quite difficult to figure out what they do. With over 20 events and each event using the buttons for a different thing, it may be impossible to play this game without an instruction card. During the attract mode, however, it shows which buttons you are supposed to press when going through an event.", /* control_details */
7428   &goldmedl_get_ctrl_name
7429 };
7430 
goldmedl_get_ctrl_name(int type)7431 const char *goldmedl_get_ctrl_name(int type)
7432 {
7433   switch(type)
7434   {
7435     case IPT_BUTTON1: return BTN1 "Button A";
7436     case IPT_BUTTON2: return BTN2 "Button B";
7437     case IPT_BUTTON3: return BTN3 "Button C";
7438   } /* end of switch */
7439 
7440   return "";
7441 }
7442 
7443 const struct ControlInfo goldnaxe_ctrl =
7444 {
7445   false, /* 45_degree_rotation for joystick(s) */
7446   false, /* alternating_controls */
7447   true, /* mirrored_controls */
7448   "", /* control_details */
7449   &goldnaxe_get_ctrl_name
7450 };
7451 
goldnaxe_get_ctrl_name(int type)7452 const char *goldnaxe_get_ctrl_name(int type)
7453 {
7454   switch(type)
7455   {
7456     case IPT_BUTTON1: return BTN1 "Attack";
7457     case IPT_BUTTON2: return BTN2 "Jump";
7458     case IPT_BUTTON3: return BTN3 "Magic";
7459   } /* end of switch */
7460 
7461   return joy4way_labels(type);
7462 }
7463 
7464 const struct ControlInfo ga2_ctrl =
7465 {
7466   false, /* 45_degree_rotation for joystick(s) */
7467   false, /* alternating_controls */
7468   true, /* mirrored_controls */
7469   "", /* control_details */
7470   &ga2_get_ctrl_name
7471 };
7472 
ga2_get_ctrl_name(int type)7473 const char *ga2_get_ctrl_name(int type)
7474 {
7475   switch(type)
7476   {
7477     case IPT_BUTTON1: return BTN1 "Attack";
7478     case IPT_BUTTON2: return BTN2 "Jump";
7479     case IPT_BUTTON3: return BTN3 "Magic";
7480   } /* end of switch */
7481 
7482   return joy4way_labels(type);
7483 }
7484 
7485 const struct ControlInfo gt97_ctrl =
7486 {
7487   false, /* 45_degree_rotation for joystick(s) */
7488   true, /* alternating_controls */
7489   true, /* mirrored_controls */
7490   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7491   &gt97_get_ctrl_name
7492 };
7493 
gt97_get_ctrl_name(int type)7494 const char *gt97_get_ctrl_name(int type)
7495 {
7496   switch(type)
7497   {
7498     case IPT_BUTTON1: return BTN1 "Face Left";
7499     case IPT_BUTTON2: return BTN2 "Face Right";
7500     case IPT_TRACKBALL_Y: return "Forward Swing";
7501     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7502     case IPT_TRACKBALL_X: return "Choose Club";
7503     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7504   } /* end of switch */
7505 
7506   return "";
7507 }
7508 
7509 const struct ControlInfo gt98_ctrl =
7510 {
7511   false, /* 45_degree_rotation for joystick(s) */
7512   true, /* alternating_controls */
7513   true, /* mirrored_controls */
7514   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7515   &gt98_get_ctrl_name
7516 };
7517 
gt98_get_ctrl_name(int type)7518 const char *gt98_get_ctrl_name(int type)
7519 {
7520   switch(type)
7521   {
7522     case IPT_BUTTON1: return BTN1 "Face Left";
7523     case IPT_BUTTON2: return BTN2 "Face Right";
7524     case IPT_TRACKBALL_X: return "Choose Club";
7525     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7526     case IPT_TRACKBALL_Y: return "Forward Swing";
7527     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7528   } /* end of switch */
7529 
7530   return "";
7531 }
7532 
7533 const struct ControlInfo gt99_ctrl =
7534 {
7535   false, /* 45_degree_rotation for joystick(s) */
7536   true, /* alternating_controls */
7537   true, /* mirrored_controls */
7538   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7539   &gt99_get_ctrl_name
7540 };
7541 
gt99_get_ctrl_name(int type)7542 const char *gt99_get_ctrl_name(int type)
7543 {
7544   switch(type)
7545   {
7546     case IPT_BUTTON1: return BTN1 "Face Left";
7547     case IPT_BUTTON2: return BTN2 "Face Right";
7548     case IPT_TRACKBALL_X: return "Choose Club";
7549     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7550     case IPT_TRACKBALL_Y: return "Forward Swing";
7551     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7552   } /* end of switch */
7553 
7554   return "";
7555 }
7556 
7557 const struct ControlInfo gt2k_ctrl =
7558 {
7559   false, /* 45_degree_rotation for joystick(s) */
7560   true, /* alternating_controls */
7561   true, /* mirrored_controls */
7562   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7563   &gt2k_get_ctrl_name
7564 };
7565 
gt2k_get_ctrl_name(int type)7566 const char *gt2k_get_ctrl_name(int type)
7567 {
7568   switch(type)
7569   {
7570     case IPT_BUTTON1: return BTN1 "Face Left";
7571     case IPT_BUTTON2: return BTN2 "Face Right";
7572     case IPT_TRACKBALL_X: return "Choose Club";
7573     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7574     case IPT_TRACKBALL_Y: return "Forward Swing";
7575     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7576   } /* end of switch */
7577 
7578   return "";
7579 }
7580 
7581 const struct ControlInfo gt3d_ctrl =
7582 {
7583   false, /* 45_degree_rotation for joystick(s) */
7584   true, /* alternating_controls */
7585   true, /* mirrored_controls */
7586   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7587   &gt3d_get_ctrl_name
7588 };
7589 
gt3d_get_ctrl_name(int type)7590 const char *gt3d_get_ctrl_name(int type)
7591 {
7592   switch(type)
7593   {
7594     case IPT_BUTTON1: return BTN1 "Face Left";
7595     case IPT_BUTTON2: return BTN2 "Face Right";
7596     case IPT_TRACKBALL_Y: return "Forward Swing";
7597     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7598     case IPT_TRACKBALL_X: return "Choose Club";
7599     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7600   } /* end of switch */
7601 
7602   return "";
7603 }
7604 
7605 const struct ControlInfo gtg2_ctrl =
7606 {
7607   false, /* 45_degree_rotation for joystick(s) */
7608   true, /* alternating_controls */
7609   true, /* mirrored_controls */
7610   "1 = Up Left, 2 = Up, 3 = Up Right. A = Down Left, B = Down, C = Down Right. On the control panel overlay is instruction on how to swing using those numbers and letters.", /* control_details */
7611   &gtg2_get_ctrl_name
7612 };
7613 
gtg2_get_ctrl_name(int type)7614 const char *gtg2_get_ctrl_name(int type)
7615 {
7616   switch(type)
7617   {
7618     case IPT_BUTTON1: return BTN1 "Face Left";
7619     case IPT_BUTTON2: return BTN2 "Face Right";
7620     case IPT_TRACKBALL_X: return "Choose Club";
7621     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Choose Club";
7622     case IPT_TRACKBALL_Y: return "Forward Swing";
7623     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Back Swing";
7624   } /* end of switch */
7625 
7626   return "";
7627 }
7628 
7629 const struct ControlInfo glfgreat_ctrl =
7630 {
7631   false, /* 45_degree_rotation for joystick(s) */
7632   true, /* alternating_controls */
7633   true, /* mirrored_controls */
7634   "MAME lists inputs for buttons 3 and 4 but they don't do anything. Use the Shot button to enter initials.", /* control_details */
7635   &glfgreat_get_ctrl_name
7636 };
7637 
glfgreat_get_ctrl_name(int type)7638 const char *glfgreat_get_ctrl_name(int type)
7639 {
7640   switch(type)
7641   {
7642     case IPT_BUTTON1: return BTN1 "Stance";
7643     case IPT_BUTTON2: return BTN2 "Shot";
7644     case IPT_BUTTON3: return BTN3 "N/A";
7645     case IPT_BUTTON4: return BTN4 "N/A";
7646     case IPT_JOYSTICK_UP: return "Select longer distance club";
7647     case IPT_JOYSTICK_DOWN: return "Select shorter distance club";
7648     case IPT_JOYSTICK_LEFT: return "Rotate Left";
7649     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
7650   } /* end of switch */
7651 
7652   return "";
7653 }
7654 
7655 const struct ControlInfo golgo13_ctrl =
7656 {
7657   false, /* 45_degree_rotation for joystick(s) */
7658   false, /* alternating_controls */
7659   false, /* mirrored_controls */
7660   "The select and enter buttons may very well be useless in the game itself. Everything is in Japanese it's generally hard to tell with what little is know with this game. On the original game there was a scope you looked through that contained a small lcd with a closer view. In mame a 'zoom button' was hacked in. There is no telling if that was an original option or not.", /* control_details */
7661   &golgo13_get_ctrl_name
7662 };
7663 
golgo13_get_ctrl_name(int type)7664 const char *golgo13_get_ctrl_name(int type)
7665 {
7666   switch(type)
7667   {
7668     case IPT_BUTTON1: return BTN1 "Trigger";
7669     case IPT_BUTTON2: return BTN2 "Zoom In / Zoom Out";
7670     case IPT_BUTTON3: return BTN3 "Enter";
7671     case IPT_JOYSTICK_UP: return "Select Up";
7672     case IPT_JOYSTICK_DOWN: return "Select Down";
7673     case IPT_LIGHTGUN_X: return "Aim Left";
7674     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
7675     case IPT_LIGHTGUN_Y: return "Aim Up";
7676     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
7677   } /* end of switch */
7678 
7679   return "";
7680 }
7681 
7682 const struct ControlInfo gollygho_ctrl =
7683 {
7684   false, /* 45_degree_rotation for joystick(s) */
7685   false, /* alternating_controls */
7686   true, /* mirrored_controls */
7687   "", /* control_details */
7688   &gollygho_get_ctrl_name
7689 };
7690 
gollygho_get_ctrl_name(int type)7691 const char *gollygho_get_ctrl_name(int type)
7692 {
7693   switch(type)
7694   {
7695     case IPT_BUTTON1: return BTN1 "1";
7696     case IPT_LIGHTGUN_X: return "Aim Left";
7697     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
7698     case IPT_LIGHTGUN_Y: return "Aim Up";
7699     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
7700   } /* end of switch */
7701 
7702   return "";
7703 }
7704 
7705 const struct ControlInfo gondo_ctrl =
7706 {
7707   false, /* 45_degree_rotation for joystick(s) */
7708   false, /* alternating_controls */
7709   true, /* mirrored_controls */
7710   "Used the yellow snk LS-30 mechcanical rotatry. Rotating the joystick changes the direction the Character Weapon shoots. The Airbike Weapon always shoots straight forward. This was usually released as a kit /* control_details */ the instructions suggested mirroring the buttons on both sides of each joystick, but not all arcade operaters did this. Player1 is the blue air bike, player2 is the grey air bike.", /* control_details */
7711   &gondo_get_ctrl_name
7712 };
7713 
gondo_get_ctrl_name(int type)7714 const char *gondo_get_ctrl_name(int type)
7715 {
7716   switch(type)
7717   {
7718     case IPT_BUTTON1: return BTN1 "Character Weapon";
7719     case IPT_BUTTON2: return BTN2 "Airbike Weapon";
7720     case IPT_DIAL: return "Rotate Left";
7721     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
7722   } /* end of switch */
7723 
7724   return joy4way_labels(type);
7725 }
7726 
7727 const struct ControlInfo gorf_ctrl =
7728 {
7729   false, /* 45_degree_rotation for joystick(s) */
7730   true, /* alternating_controls */
7731   true, /* mirrored_controls */
7732   "The alternating play is not normal. Players alternate when a player passes a level or game over, not when a life is lost like most alternating games. If you press the button before the last shot gets off the screen or hits something, that shot will disappear and you shoot a new one.", /* control_details */
7733   &gorf_get_ctrl_name
7734 };
7735 
gorf_get_ctrl_name(int type)7736 const char *gorf_get_ctrl_name(int type)
7737 {
7738   switch(type)
7739   {
7740     case IPT_BUTTON1: return BTN1 "Fire";
7741   } /* end of switch */
7742 
7743   return joy4way_labels(type);
7744 }
7745 
7746 const struct ControlInfo grchamp_ctrl =
7747 {
7748   false, /* 45_degree_rotation for joystick(s) */
7749   false, /* alternating_controls */
7750   false, /* mirrored_controls */
7751   "", /* control_details */
7752   &grchamp_get_ctrl_name
7753 };
7754 
grchamp_get_ctrl_name(int type)7755 const char *grchamp_get_ctrl_name(int type)
7756 {
7757   switch(type)
7758   {
7759     case IPT_DIAL: return "Left";
7760     case (IPT_DIAL + IPT_EXTENSION): return "Right";
7761     case IPT_PEDAL: return "Accelerate";
7762   } /* end of switch */
7763 
7764   return "";
7765 }
7766 
7767 const struct ControlInfo f1gpstar_ctrl =
7768 {
7769   false, /* 45_degree_rotation for joystick(s) */
7770   true, /* alternating_controls */
7771   true, /* mirrored_controls */
7772   "", /* control_details */
7773   &f1gpstar_get_ctrl_name
7774 };
7775 
f1gpstar_get_ctrl_name(int type)7776 const char *f1gpstar_get_ctrl_name(int type)
7777 {
7778   switch(type)
7779   {
7780     case IPT_BUTTON1: return BTN1 "Accelerate";
7781     case IPT_BUTTON2: return BTN2 "Brake";
7782     case IPT_BUTTON3: return BTN3 "Lo";
7783     case IPT_BUTTON4: return BTN4 "Hi";
7784     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
7785     case IPT_PADDLE: return "Left";
7786   } /* end of switch */
7787 
7788   return "";
7789 }
7790 
7791 const struct ControlInfo gravitar_ctrl =
7792 {
7793   false, /* 45_degree_rotation for joystick(s) */
7794   true, /* alternating_controls */
7795   true, /* mirrored_controls */
7796   "", /* control_details */
7797   &gravitar_get_ctrl_name
7798 };
7799 
gravitar_get_ctrl_name(int type)7800 const char *gravitar_get_ctrl_name(int type)
7801 {
7802   switch(type)
7803   {
7804     case IPT_BUTTON1: return BTN1 "Fire";
7805     case IPT_BUTTON2: return BTN2 "Thurst";
7806     case IPT_BUTTON3: return BTN3 "Tractor/Shield";
7807     case IPT_JOYSTICK_LEFT: return "Rotate Left";
7808     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
7809   } /* end of switch */
7810 
7811   return "";
7812 }
7813 
7814 const struct ControlInfo greatgun_ctrl =
7815 {
7816   false, /* 45_degree_rotation for joystick(s) */
7817   false, /* alternating_controls */
7818   true, /* mirrored_controls */
7819   "The guns on this game are indeed lightguns, but they were mounted to the cabinet as they were very heavy shotguns.", /* control_details */
7820   &greatgun_get_ctrl_name
7821 };
7822 
greatgun_get_ctrl_name(int type)7823 const char *greatgun_get_ctrl_name(int type)
7824 {
7825   switch(type)
7826   {
7827     case IPT_BUTTON1: return BTN1 "Fire";
7828     case IPT_LIGHTGUN_X: return "Aim Left";
7829     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
7830     case IPT_LIGHTGUN_Y: return "Aim Up";
7831     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
7832   } /* end of switch */
7833 
7834   return "";
7835 }
7836 
7837 const struct ControlInfo gberet_ctrl =
7838 {
7839   false, /* 45_degree_rotation for joystick(s) */
7840   true, /* alternating_controls */
7841   true, /* mirrored_controls */
7842   "", /* control_details */
7843   &gberet_get_ctrl_name
7844 };
7845 
gberet_get_ctrl_name(int type)7846 const char *gberet_get_ctrl_name(int type)
7847 {
7848   switch(type)
7849   {
7850     case IPT_BUTTON1: return BTN1 "Weapon";
7851     case IPT_BUTTON2: return BTN2 "Shoot";
7852   } /* end of switch */
7853 
7854   return joy4way_labels(type);
7855 }
7856 
7857 const struct ControlInfo gridiron_ctrl =
7858 {
7859   false, /* 45_degree_rotation for joystick(s) */
7860   true, /* alternating_controls */
7861   true, /* mirrored_controls */
7862   "The trackball itself is actually labeled 'Pass & Movement Control.'  The original game had a led counter on the control panel that displayed the currently select play number. In mame this is simulated by a tiny, tiny little orange character on the bottom left of the screen. This really needs to be replaced by some artwork files to make it a little bigger and easier to understand.", /* control_details */
7863   &gridiron_get_ctrl_name
7864 };
7865 
gridiron_get_ctrl_name(int type)7866 const char *gridiron_get_ctrl_name(int type)
7867 {
7868   switch(type)
7869   {
7870     case IPT_BUTTON1: return BTN1 "Pass & Formation Set";
7871     case IPT_TRACKBALL_X: return "Left";
7872     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
7873     case IPT_TRACKBALL_Y: return "Up";
7874     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
7875   } /* end of switch */
7876 
7877   return "";
7878 }
7879 
7880 const struct ControlInfo gridlee_ctrl =
7881 {
7882   false, /* 45_degree_rotation for joystick(s) */
7883   true, /* alternating_controls */
7884   true, /* mirrored_controls */
7885   "", /* control_details */
7886   &gridlee_get_ctrl_name
7887 };
7888 
gridlee_get_ctrl_name(int type)7889 const char *gridlee_get_ctrl_name(int type)
7890 {
7891   switch(type)
7892   {
7893     case IPT_BUTTON1: return BTN1 "Fire";
7894     case IPT_TRACKBALL_X: return "Left";
7895     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
7896     case IPT_TRACKBALL_Y: return "Up";
7897     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
7898   } /* end of switch */
7899 
7900   return "";
7901 }
7902 
7903 const struct ControlInfo guardian_ctrl =
7904 {
7905   false, /* 45_degree_rotation for joystick(s) */
7906   false, /* alternating_controls */
7907   true, /* mirrored_controls */
7908   "Press both kicks or punches together to perform a power punch or kick respectively.", /* control_details */
7909   &guardian_get_ctrl_name
7910 };
7911 
guardian_get_ctrl_name(int type)7912 const char *guardian_get_ctrl_name(int type)
7913 {
7914   switch(type)
7915   {
7916     case IPT_BUTTON1: return BTN1 "Fast Punch";
7917     case IPT_BUTTON2: return BTN2 "Fast Kick";
7918     case IPT_BUTTON3: return BTN3 "Defense";
7919     case IPT_BUTTON4: return BTN4 "Strong Punch";
7920     case IPT_BUTTON5: return BTN5 "Strong Kick";
7921   } /* end of switch */
7922 
7923   return joy4way_labels(type);
7924 }
7925 
7926 const struct ControlInfo gwar_ctrl =
7927 {
7928   false, /* 45_degree_rotation for joystick(s) */
7929   false, /* alternating_controls */
7930   true, /* mirrored_controls */
7931   "Grenade button also gets you into and out of the tank. Used the SNK LS-30, 12 direction rotary, but only faces 8 directions in the game. Usually the buttons were mirrored on both sides of the joystick for a total of four physical buttons per player, but both fire buttons and both grenade buttons are wired to the same PCB input. The recommended button colors are yellow for the fire button, and black for the grenade button. To enter test mode hold down the service key (F2) during boot or reboot until grid screen /* control_details */ press service button to go to next test screen; reboot to exit. Mame's driver has an extra 13th 'direction' between 5 & 6 because it 'avoids the 'joystick error' protection in Guerilla War which happens when direction changes directly from 0x50<->0x60 8 times.'", /* control_details */
7932   &gwar_get_ctrl_name
7933 };
7934 
gwar_get_ctrl_name(int type)7935 const char *gwar_get_ctrl_name(int type)
7936 {
7937   switch(type)
7938   {
7939     case IPT_BUTTON1: return BTN1 "Fire";
7940     case IPT_BUTTON2: return BTN2 "Grenade";
7941     case IPT_DIAL: return "Rotate Left";
7942     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
7943   } /* end of switch */
7944 
7945   return joy4way_labels(type);
7946 }
7947 
7948 const struct ControlInfo gunsmoke_ctrl =
7949 {
7950   false, /* 45_degree_rotation for joystick(s) */
7951   true, /* alternating_controls */
7952   true, /* mirrored_controls */
7953   "Six shot directions are possible by pressing the buttons in combination - Besides the obvious primary directions, pressing Fire Right and Fire Straight would aim between Straight and Right, same for Straight and Left, and pressing Left and Right together would shoot in both directions.", /* control_details */
7954   &gunsmoke_get_ctrl_name
7955 };
7956 
gunsmoke_get_ctrl_name(int type)7957 const char *gunsmoke_get_ctrl_name(int type)
7958 {
7959   switch(type)
7960   {
7961     case IPT_BUTTON1: return BTN1 "Fire - Left";
7962     case IPT_BUTTON2: return BTN2 "Fire - Center";
7963     case IPT_BUTTON3: return BTN3 "Fire - Right";
7964   } /* end of switch */
7965 
7966   return joy4way_labels(type);
7967 }
7968 
7969 const struct ControlInfo gunbird_ctrl =
7970 {
7971   false, /* 45_degree_rotation for joystick(s) */
7972   false, /* alternating_controls */
7973   true, /* mirrored_controls */
7974   "", /* control_details */
7975   &gunbird_get_ctrl_name
7976 };
7977 
gunbird_get_ctrl_name(int type)7978 const char *gunbird_get_ctrl_name(int type)
7979 {
7980   switch(type)
7981   {
7982     case IPT_BUTTON1: return BTN1 "Fire";
7983     case IPT_BUTTON2: return BTN2 "Bomb";
7984   } /* end of switch */
7985 
7986   return joy4way_labels(type);
7987 }
7988 
7989 const struct ControlInfo gunbustr_ctrl =
7990 {
7991   false, /* 45_degree_rotation for joystick(s) */
7992   false, /* alternating_controls */
7993   true, /* mirrored_controls */
7994   "The game's descriptions are in japanese when you start the game and since the game's cpo doesn't have any labels, I did the best I could with the in-game input test.", /* control_details */
7995   &gunbustr_get_ctrl_name
7996 };
7997 
gunbustr_get_ctrl_name(int type)7998 const char *gunbustr_get_ctrl_name(int type)
7999 {
8000   switch(type)
8001   {
8002     case IPT_BUTTON1: return BTN1 "Trigger";
8003     case IPT_BUTTON2: return BTN2 "Bomb";
8004     case IPT_JOYSTICK_UP: return "Move Forward";
8005     case IPT_JOYSTICK_DOWN: return "move Backward";
8006     case IPT_JOYSTICK_LEFT: return "Move Left";
8007     case IPT_JOYSTICK_RIGHT: return "Move Right";
8008     case IPT_LIGHTGUN_X: return "Aim Left";
8009     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
8010     case IPT_LIGHTGUN_Y: return "Aim Up";
8011     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
8012   } /* end of switch */
8013 
8014   return "";
8015 }
8016 
8017 const struct ControlInfo gyruss_ctrl =
8018 {
8019   false, /* 45_degree_rotation for joystick(s) */
8020   true, /* alternating_controls */
8021   true, /* mirrored_controls */
8022   "The joystick caused you to rotate around the exterior of the playfield.", /* control_details */
8023   &gyruss_get_ctrl_name
8024 };
8025 
gyruss_get_ctrl_name(int type)8026 const char *gyruss_get_ctrl_name(int type)
8027 {
8028   switch(type)
8029   {
8030     case IPT_BUTTON1: return BTN1 "Fire";
8031   } /* end of switch */
8032 
8033   return joy4way_labels(type);
8034 }
8035 
8036 const struct ControlInfo halleys_ctrl =
8037 {
8038   false, /* 45_degree_rotation for joystick(s) */
8039   true, /* alternating_controls */
8040   true, /* mirrored_controls */
8041   "Note that the mame driver labels button 2 as 'hyperspace' but according to the mame cpo pack and a few others sources it is the 'warp' button. If evidence is found to the contrary please feel free to correct.", /* control_details */
8042   &halleys_get_ctrl_name
8043 };
8044 
halleys_get_ctrl_name(int type)8045 const char *halleys_get_ctrl_name(int type)
8046 {
8047   switch(type)
8048   {
8049     case IPT_BUTTON1: return BTN1 "Fire";
8050     case IPT_BUTTON2: return BTN2 "Warp";
8051   } /* end of switch */
8052 
8053   return joy4way_labels(type);
8054 }
8055 
8056 const struct ControlInfo hardyard_ctrl =
8057 {
8058   false, /* 45_degree_rotation for joystick(s) */
8059   false, /* alternating_controls */
8060   true, /* mirrored_controls */
8061   "If dive is not the correct caption, please correct.", /* control_details */
8062   &hardyard_get_ctrl_name
8063 };
8064 
hardyard_get_ctrl_name(int type)8065 const char *hardyard_get_ctrl_name(int type)
8066 {
8067   switch(type)
8068   {
8069     case IPT_BUTTON1: return BTN1 "Pass / Jump";
8070     case IPT_BUTTON2: return BTN2 "Dive";
8071   } /* end of switch */
8072 
8073   return joy4way_labels(type);
8074 }
8075 
8076 const struct ControlInfo hattrick_ctrl =
8077 {
8078   false, /* 45_degree_rotation for joystick(s) */
8079   false, /* alternating_controls */
8080   true, /* mirrored_controls */
8081   "", /* control_details */
8082   &hattrick_get_ctrl_name
8083 };
8084 
hattrick_get_ctrl_name(int type)8085 const char *hattrick_get_ctrl_name(int type)
8086 {
8087   switch(type)
8088   {
8089     case IPT_BUTTON1: return BTN1 "Shoot";
8090   } /* end of switch */
8091 
8092   return joy4way_labels(type);
8093 }
8094 
8095 const struct ControlInfo hcastle_ctrl =
8096 {
8097   false, /* 45_degree_rotation for joystick(s) */
8098   true, /* alternating_controls */
8099   true, /* mirrored_controls */
8100   "", /* control_details */
8101   &hcastle_get_ctrl_name
8102 };
8103 
hcastle_get_ctrl_name(int type)8104 const char *hcastle_get_ctrl_name(int type)
8105 {
8106   switch(type)
8107   {
8108     case IPT_BUTTON1: return BTN1 "Attack";
8109     case IPT_BUTTON2: return BTN2 "Jump";
8110   } /* end of switch */
8111 
8112   return joy4way_labels(type);
8113 }
8114 
8115 const struct ControlInfo hbarrel_ctrl =
8116 {
8117   false, /* 45_degree_rotation for joystick(s) */
8118   false, /* alternating_controls */
8119   true, /* mirrored_controls */
8120   "This cpo actually didn't have any labels. The labels were obtained by the serivce manual.", /* control_details */
8121   &hbarrel_get_ctrl_name
8122 };
8123 
hbarrel_get_ctrl_name(int type)8124 const char *hbarrel_get_ctrl_name(int type)
8125 {
8126   switch(type)
8127   {
8128     case IPT_BUTTON1: return BTN1 "Shoot";
8129     case IPT_BUTTON2: return BTN2 "Grenade";
8130     case IPT_DIAL: return "Rotate Left";
8131     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
8132   } /* end of switch */
8133 
8134   return joy4way_labels(type);
8135 }
8136 
8137 const struct ControlInfo hiimpact_ctrl =
8138 {
8139   false, /* 45_degree_rotation for joystick(s) */
8140   false, /* alternating_controls */
8141   true, /* mirrored_controls */
8142   "1 & 2 are the red team, players 3 & 4 are the blue team. If one person plays per team, he calls all the plays. If two people team up and play on the same team: On the offense, players 2 & 3 call the play and control that team's quarterback. On the defense, players 1 & 4 call the play. The action button does everything: pass, handoff, kick, punt, jump, select play. To kick or punt farther, you have to hit the action button quickly. References: CPO http://www.klov.com/game_detail.php?letter=H&game_id=8111", /* control_details */
8143   &hiimpact_get_ctrl_name
8144 };
8145 
hiimpact_get_ctrl_name(int type)8146 const char *hiimpact_get_ctrl_name(int type)
8147 {
8148   switch(type)
8149   {
8150     case IPT_BUTTON1: return BTN1 "Action";
8151   } /* end of switch */
8152 
8153   return joy4way_labels(type);
8154 }
8155 
8156 const struct ControlInfo hippodrm_ctrl =
8157 {
8158   false, /* 45_degree_rotation for joystick(s) */
8159   false, /* alternating_controls */
8160   true, /* mirrored_controls */
8161   "Like all Dataeast games of the day, this game's cpo didn't have any labels. Instead it had a gameplay insert for the bezel.", /* control_details */
8162   &hippodrm_get_ctrl_name
8163 };
8164 
hippodrm_get_ctrl_name(int type)8165 const char *hippodrm_get_ctrl_name(int type)
8166 {
8167   switch(type)
8168   {
8169     case IPT_BUTTON1: return BTN1 "Attack";
8170     case IPT_BUTTON2: return BTN2 "Jump";
8171   } /* end of switch */
8172 
8173   return joy4way_labels(type);
8174 }
8175 
8176 const struct ControlInfo hitme_ctrl =
8177 {
8178   false, /* 45_degree_rotation for joystick(s) */
8179   false, /* alternating_controls */
8180   true, /* mirrored_controls */
8181   "This game uses rather odd, non-arcade buttons.", /* control_details */
8182   &hitme_get_ctrl_name
8183 };
8184 
hitme_get_ctrl_name(int type)8185 const char *hitme_get_ctrl_name(int type)
8186 {
8187   switch(type)
8188   {
8189     case IPT_BUTTON1: return BTN1 "Stand";
8190     case IPT_BUTTON2: return BTN2 "Hit";
8191     case IPT_BUTTON3: return BTN3 "Ante";
8192   } /* end of switch */
8193 
8194   return "";
8195 }
8196 
8197 const struct ControlInfo hitice_ctrl =
8198 {
8199   false, /* 45_degree_rotation for joystick(s) */
8200   false, /* alternating_controls */
8201   true, /* mirrored_controls */
8202   "This game can be converted to 2 player via a dip swtich. This game has an unused button emulated in mame. The inputs actually exists, it just doesn't do anything.", /* control_details */
8203   &hitice_get_ctrl_name
8204 };
8205 
hitice_get_ctrl_name(int type)8206 const char *hitice_get_ctrl_name(int type)
8207 {
8208   switch(type)
8209   {
8210     case IPT_BUTTON1: return BTN1 "Shoot / Check";
8211     case IPT_BUTTON2: return BTN2 "Pass / Save";
8212   } /* end of switch */
8213 
8214   return joy4way_labels(type);
8215 }
8216 
8217 const struct ControlInfo holo_ctrl =
8218 {
8219   false, /* 45_degree_rotation for joystick(s) */
8220   false, /* alternating_controls */
8221   false, /* mirrored_controls */
8222   "It should be noted that this game doesn\'t have labels, as it is a conversion kit for the hologram (time traveler) cabinet.", /* control_details */
8223   &holo_get_ctrl_name
8224 };
8225 
holo_get_ctrl_name(int type)8226 const char *holo_get_ctrl_name(int type)
8227 {
8228   switch(type)
8229   {
8230     case (IPT_BUTTON1 | IPF_PLAYER2): return "Quick Tricks";
8231     case (IPT_BUTTON2 | IPF_PLAYER2): return "Fierce Tricks";
8232     case (IPT_JOYSTICK_UP | IPF_PLAYER2): return "Jump";
8233     case (IPT_JOYSTICK_DOWN | IPF_PLAYER2): return "Crouch";
8234     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Forward";
8235     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Backward / Defense";
8236     case IPT_BUTTON1: return BTN1 "Quick Tricks";
8237     case IPT_BUTTON2: return BTN2 "Fierce Tricks";
8238     case IPT_JOYSTICK_UP: return "Jump";
8239     case IPT_JOYSTICK_DOWN: return "Crouch";
8240     case IPT_JOYSTICK_LEFT: return "Backward / Defend";
8241     case IPT_JOYSTICK_RIGHT: return "Forward";
8242   } /* end of switch */
8243 
8244   return "";
8245 }
8246 
8247 const struct ControlInfo hotrod_ctrl =
8248 {
8249   false, /* 45_degree_rotation for joystick(s) */
8250   false, /* alternating_controls */
8251   true, /* mirrored_controls */
8252   "", /* control_details */
8253   &hotrod_get_ctrl_name
8254 };
8255 
hotrod_get_ctrl_name(int type)8256 const char *hotrod_get_ctrl_name(int type)
8257 {
8258   switch(type)
8259   {
8260     case IPT_DIAL: return "Left";
8261     case (IPT_DIAL + IPT_EXTENSION): return "Right";
8262     case IPT_PEDAL: return "Accelerate";
8263   } /* end of switch */
8264 
8265   return "";
8266 }
8267 
8268 const struct ControlInfo hstennis_ctrl =
8269 {
8270   false, /* 45_degree_rotation for joystick(s) */
8271   false, /* alternating_controls */
8272   true, /* mirrored_controls */
8273   "Press both buttons to lob.", /* control_details */
8274   &hstennis_get_ctrl_name
8275 };
8276 
hstennis_get_ctrl_name(int type)8277 const char *hstennis_get_ctrl_name(int type)
8278 {
8279   switch(type)
8280   {
8281     case IPT_BUTTON1: return BTN1 "Hard";
8282     case IPT_BUTTON2: return BTN2 "Soft";
8283   } /* end of switch */
8284 
8285   return joy4way_labels(type);
8286 }
8287 
8288 const struct ControlInfo hng64_ctrl =
8289 {
8290   false, /* 45_degree_rotation for joystick(s) */
8291   false, /* alternating_controls */
8292   true, /* mirrored_controls */
8293   "The Hyper Neo Geo 64 system was the next generation of the classic Neo Geo mvs system. This new system wasn't as popular and only had a few games released on it. They all used the same control layout and relied upon inserts to explain to the consumer what button was what. Also 99% of the games started with a 'How to Play' screen upon starting the game. Although these games don't work yet in MAME 0.141, the inputs are already hooked up, just like the original Neo Geo. It would be silly to think that these would be altered after the driver is in working order.", /* control_details */
8294   &hng64_get_ctrl_name
8295 };
8296 
hng64_get_ctrl_name(int type)8297 const char *hng64_get_ctrl_name(int type)
8298 {
8299   switch(type)
8300   {
8301     case IPT_BUTTON1: return BTN1 "A";
8302     case IPT_BUTTON2: return BTN2 "B";
8303     case IPT_BUTTON3: return BTN3 "C";
8304     case IPT_BUTTON4: return BTN4 "D";
8305   } /* end of switch */
8306 
8307   return joy4way_labels(type);
8308 }
8309 
8310 const struct ControlInfo hyperspt_ctrl =
8311 {
8312   false, /* 45_degree_rotation for joystick(s) */
8313   false, /* alternating_controls */
8314   true, /* mirrored_controls */
8315   "This game is actually 4 players, but you alternate in teams of two.", /* control_details */
8316   &hyperspt_get_ctrl_name
8317 };
8318 
hyperspt_get_ctrl_name(int type)8319 const char *hyperspt_get_ctrl_name(int type)
8320 {
8321   switch(type)
8322   {
8323     case IPT_BUTTON1: return BTN1 "Go (Left)";
8324     case IPT_BUTTON2: return BTN2 "Up";
8325     case IPT_BUTTON3: return BTN3 "Go (Right)";
8326   } /* end of switch */
8327 
8328   return "";
8329 }
8330 
8331 const struct ControlInfo irobot_ctrl =
8332 {
8333   false, /* 45_degree_rotation for joystick(s) */
8334   true, /* alternating_controls */
8335   true, /* mirrored_controls */
8336   "This had a funny looking CP. The joystick sat on a small panel, sticking out toward the player at about 45 degrees toward the player. The two fire buttons were mirrored, one on each side of the small panel, one panels of there own, angled sideways at about 30 degrees from vertical. The two start buttons were the Atari cones on their own panel above the small panel of the joystick. Mame has two seperate buttons emulated, but the second does not do anything. The test screen only lists one fire button, so it looks like the two physical fire buttons were wired together in the original game, connected to the PCBs as one. The original joystick was a Hall Effect joystick: an analog joystick that used magnetics to vary the resistance instead of the usual POT.", /* control_details */
8337   &irobot_get_ctrl_name
8338 };
8339 
irobot_get_ctrl_name(int type)8340 const char *irobot_get_ctrl_name(int type)
8341 {
8342   switch(type)
8343   {
8344     case IPT_BUTTON1: return BTN1 "Fire";
8345     case IPT_BUTTON2: return BTN2 "Not used";
8346     case IPT_AD_STICK_X: return "Left";
8347     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
8348     case IPT_AD_STICK_Y: return "Up";
8349     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
8350   } /* end of switch */
8351 
8352   return "";
8353 }
8354 
8355 const struct ControlInfo ikari3_ctrl =
8356 {
8357   false, /* 45_degree_rotation for joystick(s) */
8358   false, /* alternating_controls */
8359   true, /* mirrored_controls */
8360   "Uses an LS-30 joystick.", /* control_details */
8361   &ikari3_get_ctrl_name
8362 };
8363 
ikari3_get_ctrl_name(int type)8364 const char *ikari3_get_ctrl_name(int type)
8365 {
8366   switch(type)
8367   {
8368     case IPT_BUTTON1: return BTN1 "Kick";
8369     case IPT_BUTTON2: return BTN2 "Punch";
8370     case IPT_BUTTON3: return BTN3 "Jump";
8371     case IPT_DIAL: return "Rotate Left";
8372     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
8373   } /* end of switch */
8374 
8375   return joy4way_labels(type);
8376 }
8377 
8378 const struct ControlInfo ikari_ctrl =
8379 {
8380   false, /* 45_degree_rotation for joystick(s) */
8381   false, /* alternating_controls */
8382   true, /* mirrored_controls */
8383   "Uses an LS-30 joystick.", /* control_details */
8384   &ikari_get_ctrl_name
8385 };
8386 
ikari_get_ctrl_name(int type)8387 const char *ikari_get_ctrl_name(int type)
8388 {
8389   switch(type)
8390   {
8391     case IPT_BUTTON1: return BTN1 "Gun";
8392     case IPT_BUTTON2: return BTN2 "Grenade";
8393     case IPT_DIAL: return "Rotate Left";
8394     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
8395   } /* end of switch */
8396 
8397   return joy4way_labels(type);
8398 }
8399 
8400 const struct ControlInfo indytemp_ctrl =
8401 {
8402   false, /* 45_degree_rotation for joystick(s) */
8403   true, /* alternating_controls */
8404   true, /* mirrored_controls */
8405   "Like some other Atari games, such as Road Runner & Peter Packrat, the player start buttons double as the action buttons. The original game has the Whip button mirrored on both sides of the joystick. The left side Whip button is also 1 player start button /* control_details */ mame emulates this as two buttons, button1 and start1. The right side Whip button is also the 2 players start button; mame emulates this as only the 'start2' button, even though pressing mame's start2 button also whips the whip. Also, the buttons are used to select the number of lives the player has: the right selects the normal 3 lives (1 credit), the left selects 7 lives (for 2 credits).", /* control_details */
8406   &indytemp_get_ctrl_name
8407 };
8408 
indytemp_get_ctrl_name(int type)8409 const char *indytemp_get_ctrl_name(int type)
8410 {
8411   switch(type)
8412   {
8413     case IPT_BUTTON1: return BTN1 "Whip";
8414   } /* end of switch */
8415 
8416   return joy4way_labels(type);
8417 }
8418 
8419 const struct ControlInfo inferno_ctrl =
8420 {
8421   true, /* 45_degree_rotation for joystick(s) */
8422   false,  /* alternating_controls */
8423   true,   /* mirrored_controls */
8424   "The game uses a 4 way ball-top and a 4-way trigger stick. Both are rotated on a 45 degree angle al-la Q*Bert. The 'fire' stick doesn't actually shoot, rather it aims your gun. The fire button must be used to actually fire.", /* control_details */
8425   &inferno_get_ctrl_name
8426 };
8427 
inferno_get_ctrl_name(int type)8428 const char *inferno_get_ctrl_name(int type)
8429 {
8430   if(!options.restrict_4_way)
8431   {
8432     switch(type)
8433     {
8434       case IPT_JOYSTICKLEFT_UP:     return "Move Up+Right";
8435       case IPT_JOYSTICKLEFT_DOWN:   return "Move Down+Left";
8436       case IPT_JOYSTICKLEFT_LEFT:   return "Move Left+Up";
8437       case IPT_JOYSTICKLEFT_RIGHT:  return "Move Right+Down";
8438       case IPT_JOYSTICKRIGHT_UP:    return "Fire Up+Right";
8439       case IPT_JOYSTICKRIGHT_DOWN:  return "Fire Down+Left";
8440       case IPT_JOYSTICKRIGHT_LEFT:  return "Fire Left+Up";
8441       case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right+Down";
8442     } /* end of switch */
8443   }
8444   else { /* controls are effectively rotated, so using the diagonal names would be confusing */
8445     switch(type)
8446     {
8447       case IPT_JOYSTICKLEFT_UP:     return "Up";
8448       case IPT_JOYSTICKLEFT_DOWN:   return "Down";
8449       case IPT_JOYSTICKLEFT_LEFT:   return "Left";
8450       case IPT_JOYSTICKLEFT_RIGHT:  return "Right";
8451       case IPT_JOYSTICKRIGHT_UP:    return "Fire Up";
8452       case IPT_JOYSTICKRIGHT_DOWN:  return "Fire Down";
8453       case IPT_JOYSTICKRIGHT_LEFT:  return "Fire Left";
8454       case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
8455     }
8456   }
8457   switch(type)
8458   {
8459     case IPT_BUTTON1:             return BTN1 "Fire";
8460   }
8461   return "";
8462 }
8463 
8464 const struct ControlInfo invrvnge_ctrl =
8465 {
8466   false, /* 45_degree_rotation for joystick(s) */
8467   true, /* alternating_controls */
8468   true, /* mirrored_controls */
8469   "", /* control_details */
8470   &invrvnge_get_ctrl_name
8471 };
8472 
invrvnge_get_ctrl_name(int type)8473 const char *invrvnge_get_ctrl_name(int type)
8474 {
8475   switch(type)
8476   {
8477     case IPT_BUTTON1: return BTN1 "Fire";
8478     case IPT_JOYSTICK_LEFT: return "Move Left";
8479     case IPT_JOYSTICK_RIGHT: return "Move Right";
8480   } /* end of switch */
8481 
8482   return "";
8483 }
8484 
8485 const struct ControlInfo invho2_ctrl =
8486 {
8487   false, /* 45_degree_rotation for joystick(s) */
8488   true, /* alternating_controls */
8489   true, /* mirrored_controls */
8490   "This is a two in one cabinet with two games in it. The control panel is split in half.... on the left is two directional buttons (Left,Right) and a button (Fire). These inputs are actually wired to the controls on the right side of the panel. These controls are a 4 way jostick and a button (gas). This seems like a huge waste of control space, but I suppose at the time, generic panels seemed silly.", /* control_details */
8491   &invho2_get_ctrl_name
8492 };
8493 
invho2_get_ctrl_name(int type)8494 const char *invho2_get_ctrl_name(int type)
8495 {
8496   switch(type)
8497   {
8498     case IPT_BUTTON1: return BTN1 "Fire / Gas";
8499   } /* end of switch */
8500 
8501   return joy4way_labels(type);
8502 }
8503 
8504 const struct ControlInfo offroad_ctrl =
8505 {
8506   false, /* 45_degree_rotation for joystick(s) */
8507   false, /* alternating_controls */
8508   true, /* mirrored_controls */
8509   "There are no Start buttons /* control_details */ the Nitro buttons double as the Start buttons. You also use the the Nitro buttons to select improvements on your car. 'Player 1' is the Red car, 'Player 2' is the Yellow car, 'Player 3' is the Blue car. The game refers the players as 'Red Player', 'Yellow Player', 'Blue Player', not 'Player 1', etc. There are also two player cabs of this game, but all they did was remove the Yellow car's inputs, including the coin inputs. There are no dipswitches to change. So on these cabs, the 'second player' is the blue car, but all the inputs are connected to what is still 'Player 3' in mame. To eneter service mode, hold down Blue Nitro button and press service button. The menus are scrolled down by pressing the Red Nitro button, and selected by pressing the Blue Nitro button.", /* control_details */
8510   &offroad_get_ctrl_name
8511 };
8512 
offroad_get_ctrl_name(int type)8513 const char *offroad_get_ctrl_name(int type)
8514 {
8515   switch(type)
8516   {
8517     case IPT_BUTTON1: return BTN1 "Nitro / Start";
8518     case (IPT_DIAL + IPT_EXTENSION): return "Right";
8519     case IPT_DIAL: return "Left";
8520     case IPT_PEDAL: return "Accelerate";
8521   } /* end of switch */
8522 
8523   return "";
8524 }
8525 
8526 const struct ControlInfo offroadt_ctrl =
8527 {
8528   false, /* 45_degree_rotation for joystick(s) */
8529   false, /* alternating_controls */
8530   true, /* mirrored_controls */
8531   "There are no Start buttons /* control_details */ the Nitro buttons double as the Start buttons. You also use the the Nitro buttons to select improvements on your car. There are two Nitro buttons for each player, mirrored on each side of the steering wheel, but they are wired together as one button in the harness. 'Player 1' is the Red car or 'Red Player', 'Player 2' is the Yellow car or 'Yellow Player', and 'Player 3' is the Blue car or 'Blue Player'. The game and manual refer to the players with their color, not a number. Might be because of next point. There are also two player cabs of this game, but all they did was remove the Yellow car's inputs, including the coin inputs. There are no dipswitches to change. So on these cabs, the 'second player' is the blue car, but all the inputs are connected to what is still 'Player 3' in mame. This was usually done not because of blue being a more popular color, but the arcade operators need the blue nitro button to change game settings. To eneter service mode, hold down Blue Nitro button and press service button. The menus are scrolled down by pressing the Red Nitro button, and selected by pressing the Blue Nitro button. This is basically the same as the original Ironman Ivan Stewart's Super Off Road. However, it has new tracks, and the players can choose between driving a dune buggy or the original truck. The control is exactly the same.", /* control_details */
8532   &offroadt_get_ctrl_name
8533 };
8534 
offroadt_get_ctrl_name(int type)8535 const char *offroadt_get_ctrl_name(int type)
8536 {
8537   switch(type)
8538   {
8539     case IPT_BUTTON1: return BTN1 "Nitro / Start";
8540     case IPT_DIAL: return "Left";
8541     case (IPT_DIAL + IPT_EXTENSION): return "Right";
8542     case IPT_PEDAL: return "On";
8543   } /* end of switch */
8544 
8545   return "";
8546 }
8547 
8548 const struct ControlInfo jackal_ctrl =
8549 {
8550   false, /* 45_degree_rotation for joystick(s) */
8551   false, /* alternating_controls */
8552   true, /* mirrored_controls */
8553   "", /* control_details */
8554   &jackal_get_ctrl_name
8555 };
8556 
jackal_get_ctrl_name(int type)8557 const char *jackal_get_ctrl_name(int type)
8558 {
8559   switch(type)
8560   {
8561     case IPT_BUTTON1: return BTN1 "Machine Gun";
8562     case IPT_BUTTON2: return BTN2 "Hand Grenade";
8563   } /* end of switch */
8564 
8565   return joy4way_labels(type);
8566 }
8567 
8568 const struct ControlInfo jailbrek_ctrl =
8569 {
8570   false, /* 45_degree_rotation for joystick(s) */
8571   true, /* alternating_controls */
8572   true, /* mirrored_controls */
8573   "", /* control_details */
8574   &jailbrek_get_ctrl_name
8575 };
8576 
jailbrek_get_ctrl_name(int type)8577 const char *jailbrek_get_ctrl_name(int type)
8578 {
8579   switch(type)
8580   {
8581     case IPT_BUTTON1: return BTN1 "Shoot";
8582     case IPT_BUTTON2: return BTN2 "Select";
8583   } /* end of switch */
8584 
8585   return joy4way_labels(type);
8586 }
8587 
8588 #if 0
8589 const struct ControlInfo teamqb_ctrl =
8590 {
8591   false, /* 45_degree_rotation for joystick(s) */
8592   false, /* alternating_controls */
8593   false, /* mirrored_controls */
8594   "The start button is labeled 'Join'. Player 1 is 'left QB', player 2 is 'left HB', and are on the same team. Player 3 is 'right QB', player 4 is 'right HB', and are on the same team. The CP has the players from left to right: LHB, LQB, RQB, RHB, or if you go by numbers, 2, 1, 3, 4. Only the quarterbacks have springsticks (to control throwing & kicking), but all players have a normal 8-way stick to control the player's movements. The action button does different things, depending on what the 8 way stick is doing. Since the 2 & 4 players don't have a spring stick, they often have the action button mirrored on both sides of the joystick. The analog joystick 'springsticks' were held all the way up by the spring, with free movement sideways. The farther back you pulled the springstick, the farther/faster you would throw or kick the ball when you released the stick. The label 'short' is positioned just below the springstick, below which is 'long'. Along with the words, part of the label is a fat pointed line or arrow, pointing down away from the springstick.", /* control_details */
8595   &teamqb_get_ctrl_name
8596 };
8597 
8598 const char *teamqb_get_ctrl_name(int type)
8599 {
8600   switch(type)
8601   {
8602     case (IPT_OSD_DESCRIPTION | IPF_PLAYER4): return "8-way Joystick+joy8way";
8603     case (IPT_BUTTON1 | IPF_PLAYER4): return "Action";
8604     case (IPT_BUTTON1 | IPF_PLAYER3): return "Action";
8605     case (IPT_JOYSTICK_UP | IPF_PLAYER3): return "Up";
8606     case (IPT_JOYSTICK_DOWN | IPF_PLAYER3): return "Down";
8607     case (IPT_JOYSTICK_LEFT | IPF_PLAYER3): return "Left";
8608     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER3): return "Right";
8609     case (IPT_AD_STICK_X | IPF_PLAYER3): return "Aim Left";
8610     case ((IPT_AD_STICK_X + IPT_EXTENSION) | IPF_PLAYER3): return "Aim Right"
8611     case (IPT_AD_STICK_Y | IPF_PLAYER3): return "Throw / Kick"
8612     case ((IPT_AD_STICK_Y + IPT_EXTENSION) | IPF_PLAYER3): return "Short / Long";
8613     case (IPT_BUTTON1 | IPF_PLAYER2): return "Action";
8614     case (IPT_JOYSTICK_UP | IPF_PLAYER2): return "Up";
8615     case (IPT_JOYSTICK_DOWN | IPF_PLAYER2): return "Down";
8616     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Left";
8617     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Right";
8618     case IPT_BUTTON1: return BTN1 "Action";
8619     case IPT_JOYSTICK_UP: return "Up";
8620     case IPT_JOYSTICK_DOWN: return "Down";
8621     case IPT_JOYSTICK_LEFT: return "Left";
8622     case IPT_JOYSTICK_RIGHT: return "Right";
8623     case IPT_AD_STICK_X: return "Aim Left";
8624     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Aim Right";
8625     case IPT_AD_STICK_Y: return "Throw / Kick";
8626     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Short / Long";
8627 /*  case (IPT_JOYSTICK_UP | IPF_PLAYER0): return "Up";
8628     case (IPT_JOYSTICK_DOWN | IPF_PLAYER0): return "Down";
8629     case (IPT_JOYSTICK_LEFT | IPF_PLAYER0): return "Left";
8630     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER0): return "Right";*/
8631   } /* end of switch */
8632 
8633   return "";
8634 }
8635 #endif
8636 
8637 const struct ControlInfo journey_ctrl =
8638 {
8639   false, /* 45_degree_rotation for joystick(s) */
8640   true, /* alternating_controls */
8641   true, /* mirrored_controls */
8642   "This is five games in one, plus a bonus level. The five games all center around a musician (from the band Journey) getting to his instrument, and then getting back to the spaceship. The blast button is not used until the player retrieves his musical instrument. The blast button is mirrored on both sides of the centered joystick.", /* control_details */
8643   &journey_get_ctrl_name
8644 };
8645 
journey_get_ctrl_name(int type)8646 const char *journey_get_ctrl_name(int type)
8647 {
8648   switch(type)
8649   {
8650     case IPT_BUTTON1: return BTN1 "Blast";
8651   } /* end of switch */
8652 
8653   return joy4way_labels(type);
8654 }
8655 
8656 const struct ControlInfo joust_ctrl =
8657 {
8658   false, /* 45_degree_rotation for joystick(s) */
8659   false, /* alternating_controls */
8660   true, /* mirrored_controls */
8661   "", /* control_details */
8662   &joust_get_ctrl_name
8663 };
8664 
joust_get_ctrl_name(int type)8665 const char *joust_get_ctrl_name(int type)
8666 {
8667   switch(type)
8668   {
8669     case IPT_BUTTON1: return BTN1 "Flap";
8670   } /* end of switch */
8671 
8672   return joy2way_labels(type);
8673 }
8674 
8675 const struct ControlInfo joust2_ctrl =
8676 {
8677   false, /* 45_degree_rotation for joystick(s) */
8678   false, /* alternating_controls */
8679   false, /* mirrored_controls */
8680   "", /* control_details */
8681   &joust2_get_ctrl_name
8682 };
8683 
joust2_get_ctrl_name(int type)8684 const char *joust2_get_ctrl_name(int type)
8685 {
8686   switch(type)
8687   {
8688     case (IPT_BUTTON1 | IPF_PLAYER2): return "Flap";
8689     case (IPT_BUTTON2 | IPF_PLAYER2): return "Start Player 2 / Transform";
8690     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Left";
8691     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Right";
8692     case IPT_BUTTON1: return BTN1 "Flap";
8693     case IPT_BUTTON2: return BTN2 "Start Player 1 / Transform";
8694   } /* end of switch */
8695 
8696   return joy2way_labels(type);
8697 }
8698 
8699 const struct ControlInfo joyfulr_ctrl =
8700 {
8701   false, /* 45_degree_rotation for joystick(s) */
8702   true, /* alternating_controls */
8703   true, /* mirrored_controls */
8704   "The original cpo simply had the two joysticks labeled 'car control' and 'hand control' respectively. It may not be apparent from playing, but the goal of this game is to navigate the car with the left stick, while grabbing things with the right.", /* control_details */
8705   &joyfulr_get_ctrl_name
8706 };
8707 
joyfulr_get_ctrl_name(int type)8708 const char *joyfulr_get_ctrl_name(int type)
8709 {
8710   switch(type)
8711   {
8712     case IPT_JOYSTICKLEFT_UP: return "Car Up";
8713     case IPT_JOYSTICKLEFT_DOWN: return "Car Down";
8714     case IPT_JOYSTICKLEFT_LEFT: return "Car Left";
8715     case IPT_JOYSTICKLEFT_RIGHT: return "Car Right";
8716     case IPT_JOYSTICKRIGHT_UP: return "Hand Up";
8717     case IPT_JOYSTICKRIGHT_DOWN: return "Hand Down";
8718     case IPT_JOYSTICKRIGHT_LEFT: return "Hand Left";
8719     case IPT_JOYSTICKRIGHT_RIGHT: return "Hand Right";
8720   } /* end of switch */
8721 
8722   return "";
8723 }
8724 
8725 const struct ControlInfo jrpacman_ctrl =
8726 {
8727   false, /* 45_degree_rotation for joystick(s) */
8728   true, /* alternating_controls */
8729   true, /* mirrored_controls */
8730   "", /* control_details */
8731   &jrpacman_get_ctrl_name
8732 };
8733 
jrpacman_get_ctrl_name(int type)8734 const char *jrpacman_get_ctrl_name(int type)
8735 {
8736   return joy4way_labels(type);
8737 }
8738 
8739 const struct ControlInfo jumpbug_ctrl =
8740 {
8741   false, /* 45_degree_rotation for joystick(s) */
8742   true, /* alternating_controls */
8743   true, /* mirrored_controls */
8744   "", /* control_details */
8745   &jumpbug_get_ctrl_name
8746 };
8747 
jumpbug_get_ctrl_name(int type)8748 const char *jumpbug_get_ctrl_name(int type)
8749 {
8750   switch(type)
8751   {
8752     case IPT_BUTTON1: return BTN1 "Fire";
8753   } /* end of switch */
8754 
8755   return joy4way_labels(type);
8756 }
8757 
8758 const struct ControlInfo junglek_ctrl =
8759 {
8760   false, /* 45_degree_rotation for joystick(s) */
8761   true, /* alternating_controls */
8762   true, /* mirrored_controls */
8763   "", /* control_details */
8764   &junglek_get_ctrl_name
8765 };
8766 
junglek_get_ctrl_name(int type)8767 const char *junglek_get_ctrl_name(int type)
8768 {
8769   switch(type)
8770   {
8771     case IPT_BUTTON1: return BTN1 "Jump / Knife";
8772   } /* end of switch */
8773 
8774   return joy4way_labels(type);
8775 }
8776 
8777 const struct ControlInfo jungler_ctrl =
8778 {
8779   false, /* 45_degree_rotation for joystick(s) */
8780   true, /* alternating_controls */
8781   true, /* mirrored_controls */
8782   "", /* control_details */
8783   &jungler_get_ctrl_name
8784 };
8785 
jungler_get_ctrl_name(int type)8786 const char *jungler_get_ctrl_name(int type)
8787 {
8788   switch(type)
8789   {
8790     case IPT_BUTTON1: return BTN1 "Fire";
8791   } /* end of switch */
8792 
8793   return joy4way_labels(type);
8794 }
8795 
8796 const struct ControlInfo jpark_ctrl =
8797 {
8798   false, /* 45_degree_rotation for joystick(s) */
8799   false, /* alternating_controls */
8800   true, /* mirrored_controls */
8801   "Although the control is definately a gun, the physical control looks nothing like a gun. It looks like a pistol-grip analog stick.", /* control_details */
8802   &jpark_get_ctrl_name
8803 };
8804 
jpark_get_ctrl_name(int type)8805 const char *jpark_get_ctrl_name(int type)
8806 {
8807   switch(type)
8808   {
8809     case IPT_BUTTON1: return BTN1 "Fire";
8810     case IPT_LIGHTGUN_X: return "Left";
8811     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
8812     case IPT_LIGHTGUN_Y: return "Up";
8813     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
8814   } /* end of switch */
8815 
8816   return "";
8817 }
8818 
8819 const struct ControlInfo kageki_ctrl =
8820 {
8821   false, /* 45_degree_rotation for joystick(s) */
8822   false, /* alternating_controls */
8823   true, /* mirrored_controls */
8824   "", /* control_details */
8825   &kageki_get_ctrl_name
8826 };
8827 
kageki_get_ctrl_name(int type)8828 const char *kageki_get_ctrl_name(int type)
8829 {
8830   switch(type)
8831   {
8832     case IPT_BUTTON1: return BTN1 "Jab";
8833     case IPT_BUTTON2: return BTN2 "Punch";
8834   } /* end of switch */
8835 
8836   return joy4way_labels(type);
8837 }
8838 
8839 const struct ControlInfo kangaroo_ctrl =
8840 {
8841   false, /* 45_degree_rotation for joystick(s) */
8842   true, /* alternating_controls */
8843   true, /* mirrored_controls */
8844   "Diagonals were labelled 'Super Leap'.", /* control_details */
8845   &kangaroo_get_ctrl_name
8846 };
8847 
kangaroo_get_ctrl_name(int type)8848 const char *kangaroo_get_ctrl_name(int type)
8849 {
8850   switch(type)
8851   {
8852     case IPT_BUTTON1: return BTN1 "Punch";
8853   } /* end of switch */
8854 
8855   return joy4way_labels(type);
8856 }
8857 
8858 const struct ControlInfo kaos_ctrl =
8859 {
8860   false, /* 45_degree_rotation for joystick(s) */
8861   true, /* alternating_controls */
8862   true, /* mirrored_controls */
8863   "Panel had symmetric layout with a jump button either side of the joy, but wired back to the same input.", /* control_details */
8864   &kaos_get_ctrl_name
8865 };
8866 
kaos_get_ctrl_name(int type)8867 const char *kaos_get_ctrl_name(int type)
8868 {
8869   switch(type)
8870   {
8871     case IPT_BUTTON1: return BTN1 "Jump";
8872     case IPT_BUTTON2: return BTN2 "??";
8873     case IPT_BUTTON3: return BTN3 "??";
8874   } /* end of switch */
8875 
8876   return joy2way_labels(type);
8877 }
8878 
8879 const struct ControlInfo kchamp_ctrl =
8880 {
8881   false, /* 45_degree_rotation for joystick(s) */
8882   false, /* alternating_controls */
8883   true, /* mirrored_controls */
8884   "This game is the very first \'street fighter\' style game. The controls on it are a tad odd. Instead of a joystick and an array of buttons, you have two joysticks. These joysticks don\'t have any labels and merely have arrow directions printed on the overlay. The left joystick controls movement while the right determines the type of attack. Different attack directions while in different positions perform different moves. Luckily, the game tutors you on moves during the first round. It should be noted that this game comes in one and two player versions.", /* control_details */
8885   &kchamp_get_ctrl_name
8886 };
8887 
kchamp_get_ctrl_name(int type)8888 const char *kchamp_get_ctrl_name(int type)
8889 {
8890   switch(type)
8891   {
8892     case IPT_JOYSTICKLEFT_UP: return "Up";
8893     case IPT_JOYSTICKLEFT_DOWN: return "Down";
8894     case IPT_JOYSTICKLEFT_LEFT: return "Left";
8895     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
8896     case IPT_JOYSTICKRIGHT_UP: return "Attack Up";
8897     case IPT_JOYSTICKRIGHT_DOWN: return "Attack Down";
8898     case IPT_JOYSTICKRIGHT_LEFT: return "Attack Left";
8899     case IPT_JOYSTICKRIGHT_RIGHT: return "Attack Right";
8900   } /* end of switch */
8901 
8902   return "";
8903 }
8904 
8905 const struct ControlInfo karnov_ctrl =
8906 {
8907   false, /* 45_degree_rotation for joystick(s) */
8908   true, /* alternating_controls */
8909   true, /* mirrored_controls */
8910   "The option button actives whatever items you have collected.", /* control_details */
8911   &karnov_get_ctrl_name
8912 };
8913 
karnov_get_ctrl_name(int type)8914 const char *karnov_get_ctrl_name(int type)
8915 {
8916   switch(type)
8917   {
8918     case IPT_BUTTON1: return BTN1 "Fire";
8919     case IPT_BUTTON2: return BTN2 "Jump";
8920     case IPT_BUTTON3: return BTN3 "Option";
8921   } /* end of switch */
8922 
8923   return joy4way_labels(type);
8924 }
8925 
8926 const struct ControlInfo kick_ctrl =
8927 {
8928   false, /* 45_degree_rotation for joystick(s) */
8929   true, /* alternating_controls */
8930   true, /* mirrored_controls */
8931   "Teh roller on this game is made from a trackball ball, but this is not uncommon.", /* control_details */
8932   &kick_get_ctrl_name
8933 };
8934 
kick_get_ctrl_name(int type)8935 const char *kick_get_ctrl_name(int type)
8936 {
8937   switch(type)
8938   {
8939     case IPT_BUTTON1: return BTN1 "Press to Kick";
8940     case IPT_DIAL: return "Left";
8941     case (IPT_DIAL + IPT_EXTENSION): return "Right";
8942   } /* end of switch */
8943 
8944   return "";
8945 }
8946 
8947 const struct ControlInfo kicker_ctrl =
8948 {
8949   false, /* 45_degree_rotation for joystick(s) */
8950   true, /* alternating_controls */
8951   true, /* mirrored_controls */
8952   "Game used dipswitch for single or dual control layout, still alternating play. Mame uses single control layout.", /* control_details */
8953   &kicker_get_ctrl_name
8954 };
8955 
kicker_get_ctrl_name(int type)8956 const char *kicker_get_ctrl_name(int type)
8957 {
8958   switch(type)
8959   {
8960     case IPT_BUTTON1: return BTN1 "Kick";
8961     case IPT_BUTTON2: return BTN2 "Jump";
8962   } /* end of switch */
8963 
8964   return joy4way_labels(type);
8965 }
8966 
8967 const struct ControlInfo killcom_ctrl =
8968 {
8969   false, /* 45_degree_rotation for joystick(s) */
8970   true, /* alternating_controls */
8971   true, /* mirrored_controls */
8972   "The buttons actually have a global label 'laser fire' and each individual button has a sub label of 'up,' 'down,' and 'left.'", /* control_details */
8973   &killcom_get_ctrl_name
8974 };
8975 
killcom_get_ctrl_name(int type)8976 const char *killcom_get_ctrl_name(int type)
8977 {
8978   switch(type)
8979   {
8980     case IPT_BUTTON1: return BTN1 "Fire Left";
8981     case IPT_BUTTON2: return BTN2 "Fire Up";
8982     case IPT_BUTTON3: return BTN3 "Fire Right";
8983     case IPT_BUTTON4: return BTN4 "Hyperspace";
8984   } /* end of switch */
8985 
8986   return joy4way_labels(type);
8987 }
8988 
8989 const struct ControlInfo kinst_ctrl =
8990 {
8991   false, /* 45_degree_rotation for joystick(s) */
8992   false, /* alternating_controls */
8993   true, /* mirrored_controls */
8994   "", /* control_details */
8995   &kinst_get_ctrl_name
8996 };
8997 
kinst_get_ctrl_name(int type)8998 const char *kinst_get_ctrl_name(int type)
8999 {
9000   switch(type)
9001   {
9002     case IPT_BUTTON1: return BTN1 "Quick (High Attack)";
9003     case IPT_BUTTON2: return BTN2 "Medium (High Attack)";
9004     case IPT_BUTTON3: return BTN3 "Fierce (High Attack)";
9005     case IPT_BUTTON4: return BTN4 "Quick (Low Attack)";
9006     case IPT_BUTTON5: return BTN5 "Medium (Low Attack)";
9007     case IPT_BUTTON6: return BTN6 "Fierce (Low Attack)";
9008     case IPT_JOYSTICK_UP: return "Jump";
9009     case IPT_JOYSTICK_DOWN: return "Duck";
9010     case IPT_JOYSTICK_LEFT: return "Move Left";
9011     case IPT_JOYSTICK_RIGHT: return "Move Right";
9012   } /* end of switch */
9013 
9014   return "";
9015 }
9016 
9017 const struct ControlInfo kinst2_ctrl =
9018 {
9019   false, /* 45_degree_rotation for joystick(s) */
9020   false, /* alternating_controls */
9021   true, /* mirrored_controls */
9022   "", /* control_details */
9023   &kinst2_get_ctrl_name
9024 };
9025 
kinst2_get_ctrl_name(int type)9026 const char *kinst2_get_ctrl_name(int type)
9027 {
9028   switch(type)
9029   {
9030     case IPT_BUTTON1: return BTN1 "Quick (High Attack)";
9031     case IPT_BUTTON2: return BTN2 "Medium (High Attack)";
9032     case IPT_BUTTON3: return BTN3 "Fierce (High Attack)";
9033     case IPT_BUTTON4: return BTN4 "Quick (Low Attack)";
9034     case IPT_BUTTON5: return BTN5 "Medium (Low Attack)";
9035     case IPT_BUTTON6: return BTN6 "Fierce (Low Attack)";
9036     case IPT_JOYSTICK_UP: return "Jump";
9037     case IPT_JOYSTICK_DOWN: return "Duck";
9038     case IPT_JOYSTICK_LEFT: return "Move Left";
9039     case IPT_JOYSTICK_RIGHT: return "Move Right";
9040   } /* end of switch */
9041 
9042   return "";
9043 }
9044 
9045 const struct ControlInfo kingball_ctrl =
9046 {
9047   false, /* 45_degree_rotation for joystick(s) */
9048   true, /* alternating_controls */
9049   true, /* mirrored_controls */
9050   "Galaga-like game, except you can be hit without lose a life!  Instead, you lose a life when the king you\'re protecting is lifted all the way to the top.", /* control_details */
9051   &kingball_get_ctrl_name
9052 };
9053 
kingball_get_ctrl_name(int type)9054 const char *kingball_get_ctrl_name(int type)
9055 {
9056   switch(type)
9057   {
9058     case IPT_BUTTON1: return BTN1 "Fire";
9059   } /* end of switch */
9060 
9061   return joy2way_labels(type);
9062 }
9063 
9064 const struct ControlInfo kingofb_ctrl =
9065 {
9066   false, /* 45_degree_rotation for joystick(s) */
9067   false, /* alternating_controls */
9068   true, /* mirrored_controls */
9069   "This game lacks any labels, even in the manual. The labels reflect the function.", /* control_details */
9070   &kingofb_get_ctrl_name
9071 };
9072 
kingofb_get_ctrl_name(int type)9073 const char *kingofb_get_ctrl_name(int type)
9074 {
9075   switch(type)
9076   {
9077     case IPT_BUTTON1: return BTN1 "Punch";
9078     case IPT_BUTTON2: return BTN2 "Uppercut";
9079   } /* end of switch */
9080 
9081   return joy4way_labels(type);
9082 }
9083 
9084 const struct ControlInfo klax_ctrl =
9085 {
9086   false, /* 45_degree_rotation for joystick(s) */
9087   false, /* alternating_controls */
9088   true, /* mirrored_controls */
9089   "", /* control_details */
9090   &klax_get_ctrl_name
9091 };
9092 
klax_get_ctrl_name(int type)9093 const char *klax_get_ctrl_name(int type)
9094 {
9095   switch(type)
9096   {
9097     case IPT_BUTTON1: return BTN1 "Start / Flip";
9098   } /* end of switch */
9099 
9100   return joy4way_labels(type);
9101 }
9102 
9103 const struct ControlInfo knights_ctrl =
9104 {
9105   false, /* 45_degree_rotation for joystick(s) */
9106   false, /* alternating_controls */
9107   true, /* mirrored_controls */
9108   "", /* control_details */
9109   &knights_get_ctrl_name
9110 };
9111 
knights_get_ctrl_name(int type)9112 const char *knights_get_ctrl_name(int type)
9113 {
9114   switch(type)
9115   {
9116     case IPT_BUTTON1: return BTN1 "Attack";
9117     case IPT_BUTTON2: return BTN2 "Jump";
9118   } /* end of switch */
9119 
9120   return joy4way_labels(type);
9121 }
9122 
9123 const struct ControlInfo konamigt_ctrl =
9124 {
9125   false, /* 45_degree_rotation for joystick(s) */
9126   false, /* alternating_controls */
9127   false, /* mirrored_controls */
9128   "", /* control_details */
9129   &konamigt_get_ctrl_name
9130 };
9131 
konamigt_get_ctrl_name(int type)9132 const char *konamigt_get_ctrl_name(int type)
9133 {
9134   switch(type)
9135   {
9136     case IPT_BUTTON1: return BTN1 "Accelerate";
9137     case IPT_BUTTON2: return BTN2 "Brake";
9138     case IPT_BUTTON3: return BTN3 "High / Low";
9139     case IPT_DIAL: return "Left";
9140     case (IPT_DIAL + IPT_EXTENSION): return "Right";
9141   } /* end of switch */
9142 
9143   return "";
9144 }
9145 
9146 const struct ControlInfo kroozr_ctrl =
9147 {
9148   false, /* 45_degree_rotation for joystick(s) */
9149   true, /* alternating_controls */
9150   true, /* mirrored_controls */
9151   "OTHER: Mame's driver (incorrectly) emulates this as an 8way trigger stick (so I included that). However, the real game used an analog trigger joystick (so I put other). The A/D circuit in part of the joystick assembly, instead of on the main PCB or daughter board like most analog joysticks /* control_details */ and the connection had 8 pins per axis. The joystick handle looked a lot like (if not exactly the same as) a tron handle. The spinner was also a push down button, much like a Forgotten Worlds spinner.", /* control_details */
9152   &kroozr_get_ctrl_name
9153 };
9154 
kroozr_get_ctrl_name(int type)9155 const char *kroozr_get_ctrl_name(int type)
9156 {
9157   switch(type)
9158   {
9159     case IPT_BUTTON1: return BTN1 "Zap!";
9160     case IPT_BUTTON2: return BTN2 "Shield";
9161     case IPT_JOYSTICK_UP: return "Krooz Up";
9162     case IPT_JOYSTICK_DOWN: return "Krooz Down";
9163     case IPT_JOYSTICK_LEFT: return "Krooz Left";
9164     case IPT_JOYSTICK_RIGHT: return "Krooz Right";
9165     case IPT_DIAL: return "Aim Left";
9166     case (IPT_DIAL + IPT_EXTENSION): return "Aim Right";
9167   } /* end of switch */
9168 
9169   return "";
9170 }
9171 
9172 const struct ControlInfo kram_ctrl =
9173 {
9174   false, /* 45_degree_rotation for joystick(s) */
9175   true, /* alternating_controls */
9176   true, /* mirrored_controls */
9177   "The joystick is labeled 'Kram Kontrol'", /* control_details */
9178   &kram_get_ctrl_name
9179 };
9180 
kram_get_ctrl_name(int type)9181 const char *kram_get_ctrl_name(int type)
9182 {
9183   switch(type)
9184   {
9185     case IPT_BUTTON1: return BTN1 "Wall";
9186     case IPT_BUTTON2: return BTN2 "Breakout";
9187   } /* end of switch */
9188 
9189   return joy4way_labels(type);
9190 }
9191 
9192 const struct ControlInfo krull_ctrl =
9193 {
9194   false, /* 45_degree_rotation for joystick(s) */
9195   true, /* alternating_controls */
9196   true, /* mirrored_controls */
9197   "The game actually uses icons and doesn't have any labels.", /* control_details */
9198   &krull_get_ctrl_name
9199 };
9200 
krull_get_ctrl_name(int type)9201 const char *krull_get_ctrl_name(int type)
9202 {
9203   switch(type)
9204   {
9205     case IPT_JOYSTICKLEFT_UP: return "Up";
9206     case IPT_JOYSTICKLEFT_DOWN: return "Down";
9207     case IPT_JOYSTICKLEFT_LEFT: return "Left";
9208     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
9209     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
9210     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
9211     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
9212     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
9213   } /* end of switch */
9214 
9215   return "";
9216 }
9217 
9218 const struct ControlInfo kungfum_ctrl =
9219 {
9220   false, /* 45_degree_rotation for joystick(s) */
9221   true, /* alternating_controls */
9222   true, /* mirrored_controls */
9223   "", /* control_details */
9224   &kungfum_get_ctrl_name
9225 };
9226 
kungfum_get_ctrl_name(int type)9227 const char *kungfum_get_ctrl_name(int type)
9228 {
9229   switch(type)
9230   {
9231     case IPT_BUTTON1: return BTN1 "Kick";
9232     case IPT_BUTTON2: return BTN2 "Punch";
9233     case IPT_JOYSTICK_UP: return "Jump";
9234     case IPT_JOYSTICK_DOWN: return "Stoop Down";
9235     case IPT_JOYSTICK_LEFT: return "Left";
9236     case IPT_JOYSTICK_RIGHT: return "Right";
9237   } /* end of switch */
9238 
9239   return "";
9240 }
9241 
9242 const struct ControlInfo kurikint_ctrl =
9243 {
9244   false, /* 45_degree_rotation for joystick(s) */
9245   false, /* alternating_controls */
9246   true, /* mirrored_controls */
9247   "Note that the original cpo doesn't have labels for the joystick, this is simply what it does. Also not there are two jumps. Pressing up is NOT the same as pressing the dedicated jump button.", /* control_details */
9248   &kurikint_get_ctrl_name
9249 };
9250 
kurikint_get_ctrl_name(int type)9251 const char *kurikint_get_ctrl_name(int type)
9252 {
9253   switch(type)
9254   {
9255     case IPT_BUTTON1: return BTN1 "Punch / Kick";
9256     case IPT_BUTTON2: return BTN2 "Jump (higher)";
9257     case IPT_JOYSTICK_UP: return "Jump";
9258     case IPT_JOYSTICK_DOWN: return "Duck";
9259     case IPT_JOYSTICK_LEFT: return "Left";
9260     case IPT_JOYSTICK_RIGHT: return "Right";
9261   } /* end of switch */
9262 
9263   return "";
9264 }
9265 
9266 const struct ControlInfo ladybug_ctrl =
9267 {
9268   false, /* 45_degree_rotation for joystick(s) */
9269   true, /* alternating_controls */
9270   true, /* mirrored_controls */
9271   "Although mame has 2 buttons mapped, it's merely a glitch caused by using the input template of a similar game. The actual game only has a joystick.", /* control_details */
9272   &ladybug_get_ctrl_name
9273 };
9274 
ladybug_get_ctrl_name(int type)9275 const char *ladybug_get_ctrl_name(int type)
9276 {
9277   return joy4way_labels(type);
9278 }
9279 
9280 const struct ControlInfo lagunar_ctrl =
9281 {
9282   false, /* 45_degree_rotation for joystick(s) */
9283   false, /* alternating_controls */
9284   false, /* mirrored_controls */
9285   "Note that the shifter button is mapped to button 1 in Mame, which could cause conflicts with the pedal.", /* control_details */
9286   &lagunar_get_ctrl_name
9287 };
9288 
lagunar_get_ctrl_name(int type)9289 const char *lagunar_get_ctrl_name(int type)
9290 {
9291   switch(type)
9292   {
9293     case IPT_BUTTON1: return BTN1 "High / Low";
9294     case IPT_PADDLE: return "Left";
9295     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
9296     case IPT_PEDAL: return "Accelerate";
9297   } /* end of switch */
9298 
9299   return "";
9300 }
9301 
9302 const struct ControlInfo lghost_ctrl =
9303 {
9304   false, /* 45_degree_rotation for joystick(s) */
9305   false, /* alternating_controls */
9306   true, /* mirrored_controls */
9307   "Player 3 seems to have an extra input in mame. It won't hurt anything though.", /* control_details */
9308   &lghost_get_ctrl_name
9309 };
9310 
lghost_get_ctrl_name(int type)9311 const char *lghost_get_ctrl_name(int type)
9312 {
9313   switch(type)
9314   {
9315     case IPT_BUTTON1: return BTN1 "Laser Gun";
9316     case IPT_BUTTON2: return BTN2 "Special Weapon";
9317     case IPT_LIGHTGUN_X: return "Aim Left";
9318     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
9319     case IPT_LIGHTGUN_Y: return "Aim Up";
9320     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
9321   } /* end of switch */
9322 
9323   return "";
9324 }
9325 
9326 const struct ControlInfo lastduel_ctrl =
9327 {
9328   false, /* 45_degree_rotation for joystick(s) */
9329   false, /* alternating_controls */
9330   true, /* mirrored_controls */
9331   "Button 1: Attack  Button 2: Rolling Attack (Stages 1, 3, and 6 when airplane), Jump (Stages 2, 4, and 5 when car), Surface Attack (Stages 2, 4, and 5 when 2 player mode and both players in airplanes). 2nd player can join during single player game.", /* control_details */
9332   &lastduel_get_ctrl_name
9333 };
9334 
lastduel_get_ctrl_name(int type)9335 const char *lastduel_get_ctrl_name(int type)
9336 {
9337   switch(type)
9338   {
9339     case IPT_BUTTON1: return BTN1 "Button 1";
9340     case IPT_BUTTON2: return BTN2 "Button 2";
9341   } /* end of switch */
9342 
9343   return joy4way_labels(type);
9344 }
9345 
9346 const struct ControlInfo lethalen_ctrl =
9347 {
9348   false, /* 45_degree_rotation for joystick(s) */
9349   false, /* alternating_controls */
9350   true, /* mirrored_controls */
9351   "", /* control_details */
9352   &lethalen_get_ctrl_name
9353 };
9354 
lethalen_get_ctrl_name(int type)9355 const char *lethalen_get_ctrl_name(int type)
9356 {
9357   switch(type)
9358   {
9359     case IPT_BUTTON1: return BTN1 "Fire";
9360     case IPT_LIGHTGUN_X: return "Aim Left";
9361     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
9362     case IPT_LIGHTGUN_Y: return "Aim Up";
9363     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
9364   } /* end of switch */
9365 
9366   return "";
9367 }
9368 
9369 const struct ControlInfo lethalj_ctrl =
9370 {
9371   false, /* 45_degree_rotation for joystick(s) */
9372   false, /* alternating_controls */
9373   true, /* mirrored_controls */
9374   "", /* control_details */
9375   &lethalj_get_ctrl_name
9376 };
9377 
lethalj_get_ctrl_name(int type)9378 const char *lethalj_get_ctrl_name(int type)
9379 {
9380   switch(type)
9381   {
9382     case IPT_BUTTON1: return BTN1 "Fire";
9383     case IPT_LIGHTGUN_X: return "Aim Left";
9384     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
9385     case IPT_LIGHTGUN_Y: return "Aim Up";
9386     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
9387   } /* end of switch */
9388 
9389   return "";
9390 }
9391 
9392 const struct ControlInfo liberatr_ctrl =
9393 {
9394   false, /* 45_degree_rotation for joystick(s) */
9395   true, /* alternating_controls */
9396   true, /* mirrored_controls */
9397   "", /* control_details */
9398   &liberatr_get_ctrl_name
9399 };
9400 
liberatr_get_ctrl_name(int type)9401 const char *liberatr_get_ctrl_name(int type)
9402 {
9403   switch(type)
9404   {
9405     case IPT_BUTTON1: return BTN1 "Fire";
9406     case IPT_BUTTON2: return BTN2 "Shield";
9407     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
9408     case IPT_TRACKBALL_X: return "Left";
9409     case IPT_TRACKBALL_Y: return "Up";
9410     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
9411   } /* end of switch */
9412 
9413   return "";
9414 }
9415 
9416 const struct ControlInfo lnc_ctrl =
9417 {
9418   false, /* 45_degree_rotation for joystick(s) */
9419   true, /* alternating_controls */
9420   true, /* mirrored_controls */
9421   "", /* control_details */
9422   &lnc_get_ctrl_name
9423 };
9424 
lnc_get_ctrl_name(int type)9425 const char *lnc_get_ctrl_name(int type)
9426 {
9427   switch(type)
9428   {
9429     case IPT_BUTTON1: return BTN1 "Lock";
9430   } /* end of switch */
9431 
9432   return joy4way_labels(type);
9433 }
9434 
9435 const struct ControlInfo lockon_ctrl =
9436 {
9437   false, /* 45_degree_rotation for joystick(s) */
9438   false, /* alternating_controls */
9439   true, /* mirrored_controls */
9440   "The two machine gun triggers are universally labeled and have the same function, despite the fact that they have seperate inputs. The other two buttons are the left and right thumb buttons respectively.", /* control_details */
9441   &lockon_get_ctrl_name
9442 };
9443 
lockon_get_ctrl_name(int type)9444 const char *lockon_get_ctrl_name(int type)
9445 {
9446   switch(type)
9447   {
9448     case IPT_BUTTON1: return BTN1 "Machine Gun Fire (1)";
9449     case IPT_BUTTON2: return BTN2 "Machine Gun Fire (2)";
9450     case IPT_BUTTON3: return BTN3 "Hover Aircraft";
9451     case IPT_BUTTON4: return BTN4 "Lock-On Missiles";
9452     case IPT_AD_STICK_X: return "Left";
9453     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
9454     case IPT_AD_STICK_Y: return "Up";
9455     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
9456   } /* end of switch */
9457 
9458   return "";
9459 }
9460 
9461 const struct ControlInfo locomotn_ctrl =
9462 {
9463   false, /* 45_degree_rotation for joystick(s) */
9464   true, /* alternating_controls */
9465   true, /* mirrored_controls */
9466   "", /* control_details */
9467   &locomotn_get_ctrl_name
9468 };
9469 
locomotn_get_ctrl_name(int type)9470 const char *locomotn_get_ctrl_name(int type)
9471 {
9472   switch(type)
9473   {
9474     case IPT_BUTTON1: return BTN1 "Speed";
9475   } /* end of switch */
9476 
9477   return joy4way_labels(type);
9478 }
9479 
9480 const struct ControlInfo ldrun_ctrl =
9481 {
9482   false, /* 45_degree_rotation for joystick(s) */
9483   true, /* alternating_controls */
9484   true, /* mirrored_controls */
9485   "", /* control_details */
9486   &ldrun_get_ctrl_name
9487 };
9488 
ldrun_get_ctrl_name(int type)9489 const char *ldrun_get_ctrl_name(int type)
9490 {
9491   switch(type)
9492   {
9493     case IPT_BUTTON1: return BTN1 "Dig Left";
9494     case IPT_BUTTON2: return BTN2 "Dig Right";
9495   } /* end of switch */
9496 
9497   return joy4way_labels(type);
9498 }
9499 
9500 const struct ControlInfo looping_ctrl =
9501 {
9502   false, /* 45_degree_rotation for joystick(s) */
9503   true, /* alternating_controls */
9504   true, /* mirrored_controls */
9505   "", /* control_details */
9506   &looping_get_ctrl_name
9507 };
9508 
looping_get_ctrl_name(int type)9509 const char *looping_get_ctrl_name(int type)
9510 {
9511   switch(type)
9512   {
9513     case IPT_BUTTON1: return BTN1 "Fire";
9514     case IPT_BUTTON2: return BTN2 "Accelerator";
9515     case IPT_JOYSTICK_UP: return "Up";
9516     case IPT_JOYSTICK_DOWN: return "Down";
9517   } /* end of switch */
9518 
9519   return "";
9520 }
9521 
9522 const struct ControlInfo losttomb_ctrl =
9523 {
9524   false, /* 45_degree_rotation for joystick(s) */
9525   true, /* alternating_controls */
9526   true, /* mirrored_controls */
9527   "", /* control_details */
9528   &losttomb_get_ctrl_name
9529 };
9530 
losttomb_get_ctrl_name(int type)9531 const char *losttomb_get_ctrl_name(int type)
9532 {
9533   switch(type)
9534   {
9535     case IPT_BUTTON1: return BTN1 "Whip";
9536   } /* end of switch */
9537 
9538   return joy4way_labels(type);
9539 }
9540 
9541 const struct ControlInfo llander_ctrl =
9542 {
9543   false, /* 45_degree_rotation for joystick(s) */
9544   false, /* alternating_controls */
9545   true, /* mirrored_controls */
9546   "The original used a large handle connected to a potentiometer for Thrust control. The select game button is actually player 2 start. so to toggle through games press p2 start and then p1 start when you are ready to play.", /* control_details */
9547   &llander_get_ctrl_name
9548 };
9549 
llander_get_ctrl_name(int type)9550 const char *llander_get_ctrl_name(int type)
9551 {
9552   switch(type)
9553   {
9554     case IPT_BUTTON1: return BTN1 "Abort";
9555     case IPT_PADDLE_V: return "Increase Thrust";
9556     case (IPT_PADDLE_V + IPT_EXTENSION): return "Decrease Thrust";
9557   } /* end of switch */
9558 
9559   return joy2way_labels(type);
9560 }
9561 
9562 const struct ControlInfo lrescue_ctrl =
9563 {
9564   false, /* 45_degree_rotation for joystick(s) */
9565   true, /* alternating_controls */
9566   true, /* mirrored_controls */
9567   "", /* control_details */
9568   &lrescue_get_ctrl_name
9569 };
9570 
lrescue_get_ctrl_name(int type)9571 const char *lrescue_get_ctrl_name(int type)
9572 {
9573   switch(type)
9574   {
9575     case IPT_BUTTON1: return BTN1 "Fire";
9576   } /* end of switch */
9577 
9578   return joy2way_labels(type);
9579 }
9580 
9581 const struct ControlInfo lupin3_ctrl =
9582 {
9583   false, /* 45_degree_rotation for joystick(s) */
9584   true, /* alternating_controls */
9585   true, /* mirrored_controls */
9586   "That isn't a typo, the button is actually called 'Magic Button.'", /* control_details */
9587   &lupin3_get_ctrl_name
9588 };
9589 
lupin3_get_ctrl_name(int type)9590 const char *lupin3_get_ctrl_name(int type)
9591 {
9592   switch(type)
9593   {
9594     case IPT_BUTTON1: return BTN1 "Magic Button";
9595   } /* end of switch */
9596 
9597   return joy4way_labels(type);
9598 }
9599 
9600 const struct ControlInfo m4_ctrl =
9601 {
9602   false, /* 45_degree_rotation for joystick(s) */
9603   false, /* alternating_controls */
9604   true, /* mirrored_controls */
9605   "This game actually uses a two-way, top-fire lever, which is quite rare.", /* control_details */
9606   &m4_get_ctrl_name
9607 };
9608 
m4_get_ctrl_name(int type)9609 const char *m4_get_ctrl_name(int type)
9610 {
9611   switch(type)
9612   {
9613     case IPT_BUTTON1: return BTN1 "Fire";
9614     case IPT_BUTTON2: return BTN2 "Reload";
9615     case IPT_JOYSTICK_UP: return "Up";
9616     case IPT_JOYSTICK_DOWN: return "Down";
9617   } /* end of switch */
9618 
9619   return "";
9620 }
9621 
9622 const struct ControlInfo megaplay_ctrl =
9623 {
9624   false, /* 45_degree_rotation for joystick(s) */
9625   false, /* alternating_controls */
9626   true, /* mirrored_controls */
9627   "", /* control_details */
9628   &megaplay_get_ctrl_name
9629 };
9630 
megaplay_get_ctrl_name(int type)9631 const char *megaplay_get_ctrl_name(int type)
9632 {
9633   switch(type)
9634   {
9635     case IPT_BUTTON1: return BTN1 "A";
9636     case IPT_BUTTON2: return BTN2 "B";
9637     case IPT_BUTTON3: return BTN2 "C";
9638   } /* end of switch */
9639 
9640   return joy4way_labels(type);
9641 }
9642 
9643 const struct ControlInfo mplanets_ctrl =
9644 {
9645   false, /* 45_degree_rotation for joystick(s) */
9646   true, /* alternating_controls */
9647   true, /* mirrored_controls */
9648   "", /* control_details */
9649   &mplanets_get_ctrl_name
9650 };
9651 
mplanets_get_ctrl_name(int type)9652 const char *mplanets_get_ctrl_name(int type)
9653 {
9654   switch(type)
9655   {
9656     case IPT_BUTTON1: return BTN1 "Fire";
9657     case IPT_DIAL: return "Rotate Left";
9658     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
9659   } /* end of switch */
9660 
9661   return joy4way_labels(type);
9662 }
9663 
9664 const struct ControlInfo msword_ctrl =
9665 {
9666   false, /* 45_degree_rotation for joystick(s) */
9667   true, /* alternating_controls */
9668   true, /* mirrored_controls */
9669   "", /* control_details */
9670   &msword_get_ctrl_name
9671 };
9672 
msword_get_ctrl_name(int type)9673 const char *msword_get_ctrl_name(int type)
9674 {
9675   switch(type)
9676   {
9677     case IPT_BUTTON1: return BTN1 "Attack";
9678     case IPT_BUTTON2: return BTN2 "Jump";
9679   } /* end of switch */
9680 
9681   return joy4way_labels(type);
9682 }
9683 
9684 const struct ControlInfo magspot_ctrl =
9685 {
9686   false, /* 45_degree_rotation for joystick(s) */
9687   true, /* alternating_controls */
9688   true, /* mirrored_controls */
9689   "The 'L' and 'R' labels are indeed accurate. The original cpo used those to abbreviate 'left' and 'right'.", /* control_details */
9690   &magspot_get_ctrl_name
9691 };
9692 
magspot_get_ctrl_name(int type)9693 const char *magspot_get_ctrl_name(int type)
9694 {
9695   switch(type)
9696   {
9697     case IPT_BUTTON1: return BTN1 "Fire";
9698     case IPT_JOYSTICK_LEFT: return "L";
9699     case IPT_JOYSTICK_RIGHT: return "R";
9700   } /* end of switch */
9701 
9702   return "";
9703 }
9704 
9705 
9706 const struct ControlInfo mhavoc_ctrl =
9707 {
9708   false, /* 45_degree_rotation for joystick(s) */
9709   true, /* alternating_controls */
9710   true, /* mirrored_controls */
9711   "", /* control_details */
9712   &mhavoc_get_ctrl_name
9713 };
9714 
mhavoc_get_ctrl_name(int type)9715 const char *mhavoc_get_ctrl_name(int type)
9716 {
9717   switch(type)
9718   {
9719     case IPT_BUTTON1: return BTN1 "Fire/Jump";
9720     case IPT_BUTTON2: return BTN2 "Shield";
9721     case (IPT_DIAL + IPT_EXTENSION): return "Move Right";
9722     case IPT_DIAL: return "Move Left";
9723   } /* end of switch */
9724 
9725   return "";
9726 }
9727 
9728 const struct ControlInfo maniach_ctrl =
9729 {
9730   false, /* 45_degree_rotation for joystick(s) */
9731   false, /* alternating_controls */
9732   true, /* mirrored_controls */
9733   "", /* control_details */
9734   &maniach_get_ctrl_name
9735 };
9736 
maniach_get_ctrl_name(int type)9737 const char *maniach_get_ctrl_name(int type)
9738 {
9739   switch(type)
9740   {
9741     case IPT_BUTTON1: return BTN1 "Punch";
9742     case IPT_BUTTON2: return BTN2 "Kick";
9743   } /* end of switch */
9744 
9745   return joy4way_labels(type);
9746 }
9747 
9748 const struct ControlInfo mappy_ctrl =
9749 {
9750   false, /* 45_degree_rotation for joystick(s) */
9751   true, /* alternating_controls */
9752   true, /* mirrored_controls */
9753   "", /* control_details */
9754   &mappy_get_ctrl_name
9755 };
9756 
mappy_get_ctrl_name(int type)9757 const char *mappy_get_ctrl_name(int type)
9758 {
9759   switch(type)
9760   {
9761     case IPT_BUTTON1: return BTN1 "Door Open / Close";
9762   } /* end of switch */
9763 
9764   return joy2way_labels(type);
9765 }
9766 
9767 const struct ControlInfo marble_ctrl =
9768 {
9769   false, /* 45_degree_rotation for joystick(s) */
9770   false, /* alternating_controls */
9771   true, /* mirrored_controls */
9772   "", /* control_details */
9773   &marble_get_ctrl_name
9774 };
9775 
marble_get_ctrl_name(int type)9776 const char *marble_get_ctrl_name(int type)
9777 {
9778   switch(type)
9779   {
9780     case IPT_TRACKBALL_X: return "Left";
9781     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
9782     case IPT_TRACKBALL_Y: return "Up";
9783     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
9784   } /* end of switch */
9785 
9786   return "";
9787 }
9788 
9789 const struct ControlInfo mario_ctrl =
9790 {
9791   false, /* 45_degree_rotation for joystick(s) */
9792   false, /* alternating_controls */
9793   true, /* mirrored_controls */
9794   "", /* control_details */
9795   &mario_get_ctrl_name
9796 };
9797 
mario_get_ctrl_name(int type)9798 const char *mario_get_ctrl_name(int type)
9799 {
9800   switch(type)
9801   {
9802     case IPT_BUTTON1: return BTN1 "Jump";
9803   } /* end of switch */
9804 
9805   return joy2way_labels(type);
9806 }
9807 
9808 const struct ControlInfo mars_ctrl =
9809 {
9810   false, /* 45_degree_rotation for joystick(s) */
9811   true, /* alternating_controls */
9812   true, /* mirrored_controls */
9813   "", /* control_details */
9814   &mars_get_ctrl_name
9815 };
9816 
mars_get_ctrl_name(int type)9817 const char *mars_get_ctrl_name(int type)
9818 {
9819   switch(type)
9820   {
9821     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
9822     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
9823     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
9824     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
9825   } /* end of switch */
9826 
9827   return joy4way_labels(type);
9828 }
9829 
9830 const struct ControlInfo mmatrix_ctrl =
9831 {
9832   false, /* 45_degree_rotation for joystick(s) */
9833   false, /* alternating_controls */
9834   true, /* mirrored_controls */
9835   "", /* control_details */
9836   &mmatrix_get_ctrl_name
9837 };
9838 
mmatrix_get_ctrl_name(int type)9839 const char *mmatrix_get_ctrl_name(int type)
9840 {
9841   switch(type)
9842   {
9843     case IPT_BUTTON1: return BTN1 "Shoot";
9844     case IPT_BUTTON2: return BTN2 "Bomb";
9845   } /* end of switch */
9846 
9847   return joy4way_labels(type);
9848 }
9849 
9850 const struct ControlInfo msh_ctrl =
9851 {
9852   false, /* 45_degree_rotation for joystick(s) */
9853   false, /* alternating_controls */
9854   false, /* mirrored_controls */
9855   "As with all fighters, the actions for the joystick are reversed when you flip over your opponent to the opposite side of the screen. As with all capcom titles the top row of buttons is actually the first three instead of the last.", /* control_details */
9856   &msh_get_ctrl_name
9857 };
9858 
msh_get_ctrl_name(int type)9859 const char *msh_get_ctrl_name(int type)
9860 {
9861   switch(type)
9862   {
9863     case (IPT_BUTTON1 | IPF_PLAYER2): return "Jab Punch";
9864     case (IPT_BUTTON2 | IPF_PLAYER2): return "Strong Punch";
9865     case (IPT_BUTTON3 | IPF_PLAYER2): return "Fierce Punch";
9866     case (IPT_BUTTON4 | IPF_PLAYER2): return "Short Kick";
9867     case (IPT_BUTTON5 | IPF_PLAYER2): return "Forward Kick";
9868     case (IPT_BUTTON6 | IPF_PLAYER2): return "Roundhouse Kick";
9869     case (IPT_JOYSTICK_UP | IPF_PLAYER2): return "Jump";
9870     case (IPT_JOYSTICK_DOWN | IPF_PLAYER2): return "Duck";
9871     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Forward";
9872     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Back / Defense";
9873     case IPT_BUTTON1: return BTN1 "Jab Punch";
9874     case IPT_BUTTON2: return BTN2 "Strong Punch";
9875     case IPT_BUTTON3: return BTN3 "Fierce Punch";
9876     case IPT_BUTTON4: return BTN4 "Short Kick";
9877     case IPT_BUTTON5: return BTN5 "Forward Kick";
9878     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
9879     case IPT_JOYSTICK_UP: return "Jump";
9880     case IPT_JOYSTICK_DOWN: return "Duck";
9881     case IPT_JOYSTICK_LEFT: return "Back  / Defense";
9882     case IPT_JOYSTICK_RIGHT: return "Forward";
9883   } /* end of switch */
9884 
9885   return "";
9886 }
9887 
9888 const struct ControlInfo mshvsf_ctrl =
9889 {
9890   false, /* 45_degree_rotation for joystick(s) */
9891   false, /* alternating_controls */
9892   true, /* mirrored_controls */
9893   "", /* control_details */
9894   &mshvsf_get_ctrl_name
9895 };
9896 
mshvsf_get_ctrl_name(int type)9897 const char *mshvsf_get_ctrl_name(int type)
9898 {
9899   switch(type)
9900   {
9901     case IPT_BUTTON1: return BTN1 "Punch - Jab ";
9902     case IPT_BUTTON2: return BTN2 "Punch - Strong";
9903     case IPT_BUTTON3: return BTN3 "Punch - Fierce";
9904     case IPT_BUTTON4: return BTN4 "Kick - Short";
9905     case IPT_BUTTON5: return BTN5 "Kick - Forward";
9906     case IPT_BUTTON6: return BTN6 "Kick - Roundhouse";
9907   } /* end of switch */
9908 
9909   return joy4way_labels(type);
9910 }
9911 
9912 const struct ControlInfo mvsc_ctrl =
9913 {
9914   false, /* 45_degree_rotation for joystick(s) */
9915   false, /* alternating_controls */
9916   true, /* mirrored_controls */
9917   "The original control panels had the punch buttons on the top row of thee and the kick buttons on the bottom row. ame maps the punch buttons 1 - 3 and the kick buttons 4 - 6. This can be backwards for people. Mame devs have stood by this because of the jamma locations of each button.", /* control_details */
9918   &mvsc_get_ctrl_name
9919 };
9920 
mvsc_get_ctrl_name(int type)9921 const char *mvsc_get_ctrl_name(int type)
9922 {
9923   switch(type)
9924   {
9925     case IPT_BUTTON1: return BTN1 "Punch - Jab";
9926     case IPT_BUTTON2: return BTN2 "Punch - Strong";
9927     case IPT_BUTTON3: return BTN3 "Punch - Fierce";
9928     case IPT_BUTTON4: return BTN4 "Kick - Short";
9929     case IPT_BUTTON5: return BTN5 "Kick - Forward";
9930     case IPT_BUTTON6: return BTN6 "Kick - Round-House";
9931   } /* end of switch */
9932 
9933   return joy4way_labels(type);
9934 }
9935 
9936 const struct ControlInfo matmania_ctrl =
9937 {
9938   false, /* 45_degree_rotation for joystick(s) */
9939   false, /* alternating_controls */
9940   true, /* mirrored_controls */
9941   "Press both buttons to pin. Rapidly press both buttons to kick out.", /* control_details */
9942   &matmania_get_ctrl_name
9943 };
9944 
matmania_get_ctrl_name(int type)9945 const char *matmania_get_ctrl_name(int type)
9946 {
9947   switch(type)
9948   {
9949     case IPT_BUTTON1: return BTN1 "Action Punch";
9950     case IPT_BUTTON2: return BTN2 "Action Kick";
9951   } /* end of switch */
9952 
9953   return joy4way_labels(type);
9954 }
9955 
9956 const struct ControlInfo maxrpm_ctrl =
9957 {
9958   false, /* 45_degree_rotation for joystick(s) */
9959   false, /* alternating_controls */
9960   true, /* mirrored_controls */
9961   "Please note that mame has fudged the shifter input up. Also note that since the shifter buttons are mapped to button 1 and 2 they will conflict with the gas pedal with mame's default mappings.", /* control_details */
9962   &maxrpm_get_ctrl_name
9963 };
9964 
maxrpm_get_ctrl_name(int type)9965 const char *maxrpm_get_ctrl_name(int type)
9966 {
9967   switch(type)
9968   {
9969     case IPT_BUTTON1: return BTN1 "Shift Up";
9970     case IPT_BUTTON2: return BTN2 "Shift Down";
9971     case IPT_PADDLE: return "Left";
9972     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
9973     case IPT_PEDAL: return "Accelerate";
9974   } /* end of switch */
9975 
9976   return "";
9977 }
9978 
9979 const struct ControlInfo maxforce_ctrl =
9980 {
9981   false, /* 45_degree_rotation for joystick(s) */
9982   false, /* alternating_controls */
9983   true, /* mirrored_controls */
9984   "", /* control_details */
9985   &maxforce_get_ctrl_name
9986 };
9987 
maxforce_get_ctrl_name(int type)9988 const char *maxforce_get_ctrl_name(int type)
9989 {
9990   switch(type)
9991   {
9992     case IPT_BUTTON1: return BTN1 "Fire";
9993     case IPT_LIGHTGUN_X: return "Left";
9994     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
9995     case IPT_LIGHTGUN_Y: return "Up";
9996     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
9997   } /* end of switch */
9998 
9999   return "";
10000 }
10001 
10002 const struct ControlInfo mayday_ctrl =
10003 {
10004   false, /* 45_degree_rotation for joystick(s) */
10005   true, /* alternating_controls */
10006   true, /* mirrored_controls */
10007   "Right directions on the joystick are the only ones used as you can't turn back. Also note that the buttons are in different order on the control panel. (Mayday, Back, Fire Front)", /* control_details */
10008   &mayday_get_ctrl_name
10009 };
10010 
mayday_get_ctrl_name(int type)10011 const char *mayday_get_ctrl_name(int type)
10012 {
10013   switch(type)
10014   {
10015     case IPT_BUTTON1: return BTN1 "Fire Front";
10016     case IPT_BUTTON2: return BTN2 "Mayday";
10017     case IPT_BUTTON3: return BTN3 "Back";
10018     case IPT_JOYSTICK_UP: return "Up";
10019     case IPT_JOYSTICK_DOWN: return "Down";
10020     case IPT_JOYSTICK_RIGHT: return "Right";
10021   } /* end of switch */
10022 
10023   return "";
10024 }
10025 
10026 const struct ControlInfo mechatt_ctrl =
10027 {
10028   false, /* 45_degree_rotation for joystick(s) */
10029   false, /* alternating_controls */
10030   true, /* mirrored_controls */
10031   "", /* control_details */
10032   &mechatt_get_ctrl_name
10033 };
10034 
mechatt_get_ctrl_name(int type)10035 const char *mechatt_get_ctrl_name(int type)
10036 {
10037   switch(type)
10038   {
10039     case IPT_BUTTON1: return BTN1 "Fire";
10040     case IPT_BUTTON2: return BTN2 "Grenade";
10041     case IPT_LIGHTGUN_X: return "Left";
10042     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
10043     case IPT_LIGHTGUN_Y: return "Up";
10044     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
10045   } /* end of switch */
10046 
10047   return "";
10048 }
10049 
10050 const struct ControlInfo megaman2_ctrl =
10051 {
10052   false, /* 45_degree_rotation for joystick(s) */
10053   false, /* alternating_controls */
10054   true, /* mirrored_controls */
10055   "", /* control_details */
10056   &megaman2_get_ctrl_name
10057 };
10058 
megaman2_get_ctrl_name(int type)10059 const char *megaman2_get_ctrl_name(int type)
10060 {
10061   switch(type)
10062   {
10063     case IPT_BUTTON1: return BTN1 "Shoot";
10064     case IPT_BUTTON2: return BTN2 "Jump";
10065     case IPT_BUTTON3: return BTN3 "Weapon Change";
10066   } /* end of switch */
10067 
10068   return joy4way_labels(type);
10069 }
10070 
10071 const struct ControlInfo megazone_ctrl =
10072 {
10073   false, /* 45_degree_rotation for joystick(s) */
10074   true, /* alternating_controls */
10075   true, /* mirrored_controls */
10076   "", /* control_details */
10077   &megazone_get_ctrl_name
10078 };
10079 
megazone_get_ctrl_name(int type)10080 const char *megazone_get_ctrl_name(int type)
10081 {
10082   switch(type)
10083   {
10084     case IPT_BUTTON1: return BTN1 "Fire";
10085   } /* end of switch */
10086 
10087   return joy4way_labels(type);
10088 }
10089 
10090 const struct ControlInfo mercs_ctrl =
10091 {
10092   false, /* 45_degree_rotation for joystick(s) */
10093   false, /* alternating_controls */
10094   true, /* mirrored_controls */
10095   "", /* control_details */
10096   &mercs_get_ctrl_name
10097 };
10098 
mercs_get_ctrl_name(int type)10099 const char *mercs_get_ctrl_name(int type)
10100 {
10101   switch(type)
10102   {
10103     case IPT_BUTTON1: return BTN1 "Fire";
10104     case IPT_BUTTON2: return BTN2 "Bomb";
10105   } /* end of switch */
10106 
10107   return joy4way_labels(type);
10108 }
10109 
10110 const struct ControlInfo metamrph_ctrl =
10111 {
10112   false, /* 45_degree_rotation for joystick(s) */
10113   false, /* alternating_controls */
10114   true, /* mirrored_controls */
10115   "This game can be turned into a 2 player setup via a dip setting. Also something unique in 4 player games, this one allows you to have a shared coin slot via the settings. (This means the 2 player-style select screen even when you have the cabinet set to 4 players)", /* control_details */
10116   &metamrph_get_ctrl_name
10117 };
10118 
metamrph_get_ctrl_name(int type)10119 const char *metamrph_get_ctrl_name(int type)
10120 {
10121   switch(type)
10122   {
10123     case IPT_BUTTON1: return BTN1 "Attack";
10124     case IPT_BUTTON2: return BTN2 "Jump";
10125   } /* end of switch */
10126 
10127   return joy4way_labels(type);
10128 }
10129 
10130 const struct ControlInfo metrocrs_ctrl =
10131 {
10132   false, /* 45_degree_rotation for joystick(s) */
10133   true, /* alternating_controls */
10134   true, /* mirrored_controls */
10135   "Teh control panel didn't have a button label.", /* control_details */
10136   &metrocrs_get_ctrl_name
10137 };
10138 
metrocrs_get_ctrl_name(int type)10139 const char *metrocrs_get_ctrl_name(int type)
10140 {
10141   switch(type)
10142   {
10143     case IPT_BUTTON1: return BTN1 "Jump";
10144   } /* end of switch */
10145 
10146   return joy4way_labels(type);
10147 }
10148 
10149 const struct ControlInfo mwalk_ctrl =
10150 {
10151   false, /* 45_degree_rotation for joystick(s) */
10152   false, /* alternating_controls */
10153   true, /* mirrored_controls */
10154   "", /* control_details */
10155   &mwalk_get_ctrl_name
10156 };
10157 
mwalk_get_ctrl_name(int type)10158 const char *mwalk_get_ctrl_name(int type)
10159 {
10160   switch(type)
10161   {
10162     case IPT_BUTTON1: return BTN1 "Shoot";
10163     case IPT_BUTTON2: return BTN2 "Dance";
10164   } /* end of switch */
10165 
10166   return joy4way_labels(type);
10167 }
10168 
10169 const struct ControlInfo midres_ctrl =
10170 {
10171   false, /* 45_degree_rotation for joystick(s) */
10172   false, /* alternating_controls */
10173   true, /* mirrored_controls */
10174   "", /* control_details */
10175   &midres_get_ctrl_name
10176 };
10177 
midres_get_ctrl_name(int type)10178 const char *midres_get_ctrl_name(int type)
10179 {
10180   switch(type)
10181   {
10182     case IPT_BUTTON1: return BTN1 "Shoot";
10183     case IPT_BUTTON2: return BTN2 "Jump";
10184     case IPT_DIAL: return "Rotate Left";
10185     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
10186   } /* end of switch */
10187 
10188   return joy4way_labels(type);
10189 }
10190 
10191 const struct ControlInfo gtmr2_ctrl =
10192 {
10193   false, /* 45_degree_rotation for joystick(s) */
10194   false, /* alternating_controls */
10195   true, /* mirrored_controls */
10196   "This game does NOT use all of these controls. It has dipswitch settings which allow the games to be controlled with a 360 degree wheel, a 270 degree wheel, a 270 degree digital wheel (using a d2a conveter) and a plain old 8-way joystick with buttons. Uses with steering wheels please note that the game defaults to joystick input. Also note that the pedals optionally can be set to analog mode, but mame disables this feature due to input limitations.", /* control_details */
10197   &gtmr2_get_ctrl_name
10198 };
10199 
gtmr2_get_ctrl_name(int type)10200 const char *gtmr2_get_ctrl_name(int type)
10201 {
10202   switch(type)
10203   {
10204     case IPT_BUTTON1: return BTN1 "Accelerate";
10205     case IPT_BUTTON2: return BTN2 "Brake";
10206     case IPT_PADDLE: return "Left";
10207     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
10208     case IPT_DIAL: return "Left";
10209     case (IPT_DIAL + IPT_EXTENSION): return "Right";
10210   } /* end of switch */
10211 
10212   return joy4way_labels(type);
10213 }
10214 
10215 const struct ControlInfo milliped_ctrl =
10216 {
10217   false, /* 45_degree_rotation for joystick(s) */
10218   true, /* alternating_controls */
10219   true, /* mirrored_controls */
10220   "", /* control_details */
10221   &milliped_get_ctrl_name
10222 };
10223 
milliped_get_ctrl_name(int type)10224 const char *milliped_get_ctrl_name(int type)
10225 {
10226   switch(type)
10227   {
10228     case IPT_BUTTON1: return BTN1 "Fire";
10229     case IPT_TRACKBALL_Y: return "Up";
10230     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
10231     case IPT_TRACKBALL_X: return "Left";
10232     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
10233   } /* end of switch */
10234 
10235   return "";
10236 }
10237 
10238 const struct ControlInfo minefld_ctrl =
10239 {
10240   false, /* 45_degree_rotation for joystick(s) */
10241   true, /* alternating_controls */
10242   true, /* mirrored_controls */
10243   "", /* control_details */
10244   &minefld_get_ctrl_name
10245 };
10246 
minefld_get_ctrl_name(int type)10247 const char *minefld_get_ctrl_name(int type)
10248 {
10249   switch(type)
10250   {
10251     case IPT_BUTTON1: return BTN1 "Cannon";
10252     case IPT_JOYSTICKLEFT_RIGHT: return "Tank Direction Right";
10253     case IPT_JOYSTICKLEFT_LEFT: return "Tank Direction Left";
10254     case IPT_JOYSTICKLEFT_DOWN: return "Tank Direction Down";
10255     case IPT_JOYSTICKLEFT_UP: return "Tank Direction Up";
10256     case IPT_JOYSTICKRIGHT_UP: return "Machine Gun Up";
10257     case IPT_JOYSTICKRIGHT_DOWN: return "Machine Gun Down";
10258     case IPT_JOYSTICKRIGHT_LEFT: return "Machine Gun Left";
10259     case IPT_JOYSTICKRIGHT_RIGHT: return "Machine Gun Right";
10260   } /* end of switch */
10261 
10262   return "";
10263 }
10264 
10265 const struct ControlInfo mineswpr_ctrl =
10266 {
10267   false, /* 45_degree_rotation for joystick(s) */
10268   false, /* alternating_controls */
10269   true, /* mirrored_controls */
10270   "Player 1 is actually position on the bottom right of the screen while Player 2 is at the top right", /* control_details */
10271   &mineswpr_get_ctrl_name
10272 };
10273 
mineswpr_get_ctrl_name(int type)10274 const char *mineswpr_get_ctrl_name(int type)
10275 {
10276   return joy4way_labels(type);
10277 }
10278 
10279 const struct ControlInfo minigolf_ctrl =
10280 {
10281   false, /* 45_degree_rotation for joystick(s) */
10282   true, /* alternating_controls */
10283   true, /* mirrored_controls */
10284   "", /* control_details */
10285   &minigolf_get_ctrl_name
10286 };
10287 
minigolf_get_ctrl_name(int type)10288 const char *minigolf_get_ctrl_name(int type)
10289 {
10290   switch(type)
10291   {
10292     case IPT_BUTTON1: return BTN1 "Tee Selection";
10293   } /* end of switch */
10294 
10295   return "";
10296 }
10297 
10298 const struct ControlInfo missile_ctrl =
10299 {
10300   false, /* 45_degree_rotation for joystick(s) */
10301   true, /* alternating_controls */
10302   true, /* mirrored_controls */
10303   "", /* control_details */
10304   &missile_get_ctrl_name
10305 };
10306 
missile_get_ctrl_name(int type)10307 const char *missile_get_ctrl_name(int type)
10308 {
10309   switch(type)
10310   {
10311     case IPT_BUTTON1: return BTN1 "Fire - Alpha Base";
10312     case IPT_BUTTON2: return BTN2 "Fire - Delta Base";
10313     case IPT_BUTTON3: return BTN3 "Fire - Omega Base";
10314     case IPT_TRACKBALL_X: return "Left";
10315     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
10316     case IPT_TRACKBALL_Y: return "Up";
10317     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
10318   } /* end of switch */
10319 
10320   return "";
10321 }
10322 
10323 const struct ControlInfo gmissile_ctrl =
10324 {
10325   false, /* 45_degree_rotation for joystick(s) */
10326   false, /* alternating_controls */
10327   true, /* mirrored_controls */
10328   "This game actually uses a 2-way top-fire joystick, which is extremely rare. So rare we don't recognize it in the database.", /* control_details */
10329   &gmissile_get_ctrl_name
10330 };
10331 
gmissile_get_ctrl_name(int type)10332 const char *gmissile_get_ctrl_name(int type)
10333 {
10334   switch(type)
10335   {
10336     case IPT_BUTTON1: return BTN1 "Fire";
10337   } /* end of switch */
10338 
10339   return joy2way_labels(type);
10340 }
10341 
10342 const struct ControlInfo moguchan_ctrl =
10343 {
10344   false, /* 45_degree_rotation for joystick(s) */
10345   true, /* alternating_controls */
10346   true, /* mirrored_controls */
10347   "Unknown as to what the button does but is listed in mame", /* control_details */
10348   &moguchan_get_ctrl_name
10349 };
10350 
moguchan_get_ctrl_name(int type)10351 const char *moguchan_get_ctrl_name(int type)
10352 {
10353   switch(type)
10354   {
10355     case IPT_BUTTON1: return BTN1 "Unkown";
10356   } /* end of switch */
10357 
10358   return joy4way_labels(type);
10359 }
10360 
10361 const struct ControlInfo mole_ctrl =
10362 {
10363   false, /* 45_degree_rotation for joystick(s) */
10364   true, /* alternating_controls */
10365   true, /* mirrored_controls */
10366   "The button is layed out on a 3x3 grid and relates directly to the position on the screen  Top Row:    7 8 9 Middle Row: 4 5 6 Bottom Row: 1 2 3", /* control_details */
10367   &mole_get_ctrl_name
10368 };
10369 
mole_get_ctrl_name(int type)10370 const char *mole_get_ctrl_name(int type)
10371 {
10372   switch(type)
10373   {
10374 /* P1NumButtons=9 */
10375     case IPT_BUTTON1: return BTN1 "Attack 1";
10376     case IPT_BUTTON2: return BTN2 "Attack 2";
10377     case IPT_BUTTON3: return BTN3 "Attack 3";
10378     case IPT_BUTTON4: return BTN4 "Attack 4";
10379     case IPT_BUTTON5: return BTN5 "Attack 5";
10380     case IPT_BUTTON6: return BTN6 "Attack 6";
10381     case IPT_BUTTON7: return BTN7 "Attack 7";
10382     case IPT_BUTTON8: return BTN7 "Attack 8";
10383     case IPT_BUTTON9: return "Attack 9";
10384   } /* end of switch */
10385 
10386   return "";
10387 }
10388 
10389 const struct ControlInfo monymony_ctrl =
10390 {
10391   false, /* 45_degree_rotation for joystick(s) */
10392   true, /* alternating_controls */
10393   true, /* mirrored_controls */
10394   "The joystick was generically labeled 'control'. Also of note is that you can only jump when you are standing on a white circle and you can't control the direction of the jump like in most games.", /* control_details */
10395   &monymony_get_ctrl_name
10396 };
10397 
monymony_get_ctrl_name(int type)10398 const char *monymony_get_ctrl_name(int type)
10399 {
10400   switch(type)
10401   {
10402     case IPT_BUTTON1: return BTN1 "Jump";
10403   } /* end of switch */
10404 
10405   return joy4way_labels(type);
10406 }
10407 
10408 const struct ControlInfo monsterb_ctrl =
10409 {
10410   false, /* 45_degree_rotation for joystick(s) */
10411   true, /* alternating_controls */
10412   true, /* mirrored_controls */
10413   "", /* control_details */
10414   &monsterb_get_ctrl_name
10415 };
10416 
monsterb_get_ctrl_name(int type)10417 const char *monsterb_get_ctrl_name(int type)
10418 {
10419   switch(type)
10420   {
10421     case IPT_BUTTON1: return BTN1 "Zap";
10422   } /* end of switch */
10423 
10424   return joy4way_labels(type);
10425 }
10426 
10427 const struct ControlInfo montecar_ctrl =
10428 {
10429   false, /* 45_degree_rotation for joystick(s) */
10430   false, /* alternating_controls */
10431   false, /* mirrored_controls */
10432   "Please note that this game's driver hard-code's all of the buttons. The gears are remapped to z,x,c and v while track select is remapped to space.", /* control_details */
10433   &montecar_get_ctrl_name
10434 };
10435 
montecar_get_ctrl_name(int type)10436 const char *montecar_get_ctrl_name(int type)
10437 {
10438   switch(type)
10439   {
10440     case IPT_BUTTON1: return BTN1 "Accelerate";
10441     case IPT_BUTTON2: return BTN2 "Gear 1";
10442     case IPT_BUTTON3: return BTN3 "Gear 2";
10443     case IPT_BUTTON4: return BTN4 "Gear 3";
10444     case IPT_BUTTON5: return BTN5 "Gear 4";
10445     case IPT_BUTTON6: return BTN6 "Track Select";
10446     case IPT_DIAL: return "Left";
10447     case (IPT_DIAL + IPT_EXTENSION): return "Right";
10448   } /* end of switch */
10449 
10450   return "";
10451 }
10452 
10453 const struct ControlInfo mpatrol_ctrl =
10454 {
10455   false, /* 45_degree_rotation for joystick(s) */
10456   true, /* alternating_controls */
10457   true, /* mirrored_controls */
10458   "", /* control_details */
10459   &mpatrol_get_ctrl_name
10460 };
10461 
mpatrol_get_ctrl_name(int type)10462 const char *mpatrol_get_ctrl_name(int type)
10463 {
10464   switch(type)
10465   {
10466     case IPT_BUTTON1: return BTN1 "Fire";
10467     case IPT_BUTTON2: return BTN2 "Jump";
10468     case IPT_JOYSTICK_LEFT: return "Slower";
10469     case IPT_JOYSTICK_RIGHT: return "Faster";
10470   } /* end of switch */
10471 
10472   return "";
10473 }
10474 
10475 const struct ControlInfo moonwar_ctrl =
10476 {
10477   false, /* 45_degree_rotation for joystick(s) */
10478   true, /* alternating_controls */
10479   true, /* mirrored_controls */
10480   "The game's original control panel also has a button called 'Hyper Flip' that for whatever reason isn't emulated in mame. Also the roller for this game looks more like some sort of futuristic valve and is dubbed the 'Vector Director' by the label underneath it.", /* control_details */
10481   &moonwar_get_ctrl_name
10482 };
10483 
moonwar_get_ctrl_name(int type)10484 const char *moonwar_get_ctrl_name(int type)
10485 {
10486   switch(type)
10487   {
10488     case IPT_BUTTON1: return BTN1 "Fire Missile";
10489     case IPT_BUTTON2: return BTN2 "Warp Drive";
10490     case IPT_BUTTON3: return BTN3 "Shields";
10491     case IPT_DIAL: return "Left";
10492     case (IPT_DIAL + IPT_EXTENSION): return "Right";
10493   } /* end of switch */
10494 
10495   return "";
10496 }
10497 
10498 const struct ControlInfo mk_ctrl =
10499 {
10500   false, /* 45_degree_rotation for joystick(s) */
10501   false, /* alternating_controls */
10502   true, /* mirrored_controls */
10503   "Mame uses the jamma standard for button numbering and thus all of the mk games are completely off. The games buttons were arranged in a cross pattern with block the center of the 'X' high and low punch on the left and high and low kick on the right respectively. It is highly reccomended that you wrie ctrlr files for these gmaes if you intend to play them. Also there is actually a second block button used for sf2 conversions but it alternates between broken and half working in the mame source.", /* control_details */
10504   &mk_get_ctrl_name
10505 };
10506 
mk_get_ctrl_name(int type)10507 const char *mk_get_ctrl_name(int type)
10508 {
10509   switch(type)
10510   {
10511     case IPT_BUTTON1: return BTN1 "High Punch";
10512     case IPT_BUTTON2: return BTN2 "Block";
10513     case IPT_BUTTON3: return BTN3 "High Kick";
10514     case IPT_BUTTON4: return BTN4 "Low Punch";
10515     case IPT_BUTTON5: return BTN5 "Low Kick";
10516     case IPT_JOYSTICK_UP: return "Jump";
10517     case IPT_JOYSTICK_DOWN: return "Duck";
10518     case IPT_JOYSTICK_LEFT: return "Move Left";
10519     case IPT_JOYSTICK_RIGHT: return "Move Right";
10520   } /* end of switch */
10521 
10522   return "";
10523 }
10524 
10525 const struct ControlInfo mk3_ctrl =
10526 {
10527   false, /* 45_degree_rotation for joystick(s) */
10528   false, /* alternating_controls */
10529   true, /* mirrored_controls */
10530   "Mame uses the jamma standard for button numbering and thus all of the mk games are completely off. The games buttons were arranged in a cross pattern with block the center of the 'X' high and low punch on the left and high and low kick on the right respectively. The Run button is placed inthe lower left hand corner, similar to a mamers 'modified Neo Geo' layout. It is highly reccomended that you write ctrlr files for these games if you intend to play them.", /* control_details */
10531   &mk3_get_ctrl_name
10532 };
10533 
mk3_get_ctrl_name(int type)10534 const char *mk3_get_ctrl_name(int type)
10535 {
10536   switch(type)
10537   {
10538     case IPT_BUTTON1: return BTN1 "High Punch";
10539     case IPT_BUTTON2: return BTN2 "Block";
10540     case IPT_BUTTON3: return BTN3 "High Kick";
10541     case IPT_BUTTON4: return BTN4 "Low Punch";
10542     case IPT_BUTTON5: return BTN5 "Low Kick";
10543     case IPT_BUTTON6: return BTN6 "Run";
10544     case IPT_JOYSTICK_UP: return "Jump";
10545     case IPT_JOYSTICK_DOWN: return "Duck";
10546     case IPT_JOYSTICK_LEFT: return "Move Left";
10547     case IPT_JOYSTICK_RIGHT: return "Move Right";
10548   } /* end of switch */
10549 
10550   return "";
10551 }
10552 
10553 const struct ControlInfo mk4_ctrl =
10554 {
10555   false, /* 45_degree_rotation for joystick(s) */
10556   false, /* alternating_controls */
10557   true, /* mirrored_controls */
10558   "The final mortal kombat game to be released in the arcades.", /* control_details */
10559   &mk4_get_ctrl_name
10560 };
10561 
mk4_get_ctrl_name(int type)10562 const char *mk4_get_ctrl_name(int type)
10563 {
10564   switch(type)
10565   {
10566     case IPT_BUTTON1: return BTN1 "High Punch";
10567     case IPT_BUTTON2: return BTN2 "Block";
10568     case IPT_BUTTON3: return BTN3 "High Kick";
10569     case IPT_BUTTON4: return BTN4 "Low Punch";
10570     case IPT_BUTTON5: return BTN5 "Low Kick";
10571     case IPT_BUTTON6: return BTN6 "Run";
10572     case IPT_JOYSTICK_UP: return "Jump";
10573     case IPT_JOYSTICK_DOWN: return "Duck";
10574     case IPT_JOYSTICK_LEFT: return "Move Left";
10575     case IPT_JOYSTICK_RIGHT: return "Move Right";
10576   } /* end of switch */
10577 
10578   return "";
10579 }
10580 
10581 const struct ControlInfo mk2_ctrl =
10582 {
10583   false, /* 45_degree_rotation for joystick(s) */
10584   false, /* alternating_controls */
10585   true, /* mirrored_controls */
10586   "Mame uses the jamma standard for button numbering and thus all of the mk games are completely off. The games buttons were arranged in a cross pattern with block the center of the 'X' high and low punch on the left and high and low kick on the right respectively. It is highly reccomended that you write ctrlr files for these games if you intend to play them. Also there is actually a second block button used for sf2 conversions but it alternates between broken and half working in the mame source.", /* control_details */
10587   &mk2_get_ctrl_name
10588 };
10589 
mk2_get_ctrl_name(int type)10590 const char *mk2_get_ctrl_name(int type)
10591 {
10592   switch(type)
10593   {
10594     case IPT_BUTTON1: return BTN1 "High Punch";
10595     case IPT_BUTTON2: return BTN2 "Block";
10596     case IPT_BUTTON3: return BTN3 "High Kick";
10597     case IPT_BUTTON4: return BTN4 "Low Punch";
10598     case IPT_BUTTON5: return BTN5 "Low Kick";
10599     case IPT_JOYSTICK_UP: return "Jump";
10600     case IPT_JOYSTICK_DOWN: return "Duck";
10601     case IPT_JOYSTICK_LEFT: return "Move Left";
10602     case IPT_JOYSTICK_RIGHT: return "Move Right";
10603   } /* end of switch */
10604 
10605   return "";
10606 }
10607 
10608 const struct ControlInfo mtrap_ctrl =
10609 {
10610   false, /* 45_degree_rotation for joystick(s) */
10611   true, /* alternating_controls */
10612   true, /* mirrored_controls */
10613   "On the original control panel, the order was (from left to right) red, yellow, blue... Not the order that mame has (yellow, red, blue).", /* control_details */
10614   &mtrap_get_ctrl_name
10615 };
10616 
mtrap_get_ctrl_name(int type)10617 const char *mtrap_get_ctrl_name(int type)
10618 {
10619   switch(type)
10620   {
10621     case IPT_BUTTON1: return BTN1 "Dog";
10622     case IPT_BUTTON2: return BTN2 "Doors - Yellow";
10623     case IPT_BUTTON3: return BTN3 "Doors - Red";
10624     case IPT_BUTTON4: return BTN4 "Doors - Blue";
10625   } /* end of switch */
10626 
10627   return joy4way_labels(type);
10628 }
10629 
10630 const struct ControlInfo mrdo_ctrl =
10631 {
10632   false, /* 45_degree_rotation for joystick(s) */
10633   true, /* alternating_controls */
10634   true, /* mirrored_controls */
10635   "", /* control_details */
10636   &mrdo_get_ctrl_name
10637 };
10638 
mrdo_get_ctrl_name(int type)10639 const char *mrdo_get_ctrl_name(int type)
10640 {
10641   switch(type)
10642   {
10643     case IPT_BUTTON1: return BTN1 "Throw";
10644   } /* end of switch */
10645 
10646   return joy4way_labels(type);
10647 }
10648 
10649 const struct ControlInfo docastle_ctrl =
10650 {
10651   false, /* 45_degree_rotation for joystick(s) */
10652   true, /* alternating_controls */
10653   true, /* mirrored_controls */
10654   "The button is actually unlabeled.", /* control_details */
10655   &docastle_get_ctrl_name
10656 };
10657 
docastle_get_ctrl_name(int type)10658 const char *docastle_get_ctrl_name(int type)
10659 {
10660   switch(type)
10661   {
10662     case IPT_BUTTON1: return BTN1 "Fire";
10663   } /* end of switch */
10664 
10665   return joy4way_labels(type);
10666 }
10667 
10668 const struct ControlInfo dowild_ctrl =
10669 {
10670   false, /* 45_degree_rotation for joystick(s) */
10671   true, /* alternating_controls */
10672   true, /* mirrored_controls */
10673   "", /* control_details */
10674   &dowild_get_ctrl_name
10675 };
10676 
dowild_get_ctrl_name(int type)10677 const char *dowild_get_ctrl_name(int type)
10678 {
10679   switch(type)
10680   {
10681     case IPT_BUTTON1: return BTN1 "Run";
10682   } /* end of switch */
10683 
10684   return joy4way_labels(type);
10685 }
10686 
10687 const struct ControlInfo mrdrillr_ctrl =
10688 {
10689   false, /* 45_degree_rotation for joystick(s) */
10690   true, /* alternating_controls */
10691   true, /* mirrored_controls */
10692   "The drill button is actually unlabeled as the game was only sold in a conversion kit with a very generic namco overlay.", /* control_details */
10693   &mrdrillr_get_ctrl_name
10694 };
10695 
mrdrillr_get_ctrl_name(int type)10696 const char *mrdrillr_get_ctrl_name(int type)
10697 {
10698   switch(type)
10699   {
10700     case IPT_BUTTON1: return BTN1 "Drill";
10701   } /* end of switch */
10702 
10703   return joy4way_labels(type);
10704 }
10705 
10706 const struct ControlInfo mspacman_ctrl =
10707 {
10708   false, /* 45_degree_rotation for joystick(s) */
10709   true, /* alternating_controls */
10710   true, /* mirrored_controls */
10711   "", /* control_details */
10712   &mspacman_get_ctrl_name
10713 };
10714 
mspacman_get_ctrl_name(int type)10715 const char *mspacman_get_ctrl_name(int type)
10716 {
10717   return joy4way_labels(type);
10718 }
10719 
10720 const struct ControlInfo mvp_ctrl =
10721 {
10722   false, /* 45_degree_rotation for joystick(s) */
10723   false, /* alternating_controls */
10724   true, /* mirrored_controls */
10725   "The buttons aren't labeled red, yellow and blue rather that is their color. The instruction card uses these colors to explain the various functions of the buttons.", /* control_details */
10726   &mvp_get_ctrl_name
10727 };
10728 
mvp_get_ctrl_name(int type)10729 const char *mvp_get_ctrl_name(int type)
10730 {
10731   switch(type)
10732   {
10733     case IPT_BUTTON1: return BTN1 "Red";
10734     case IPT_BUTTON2: return BTN2 "Yellow";
10735     case IPT_BUTTON3: return BTN3 "Blue";
10736   } /* end of switch */
10737 
10738   return joy4way_labels(type);
10739 }
10740 
10741 const struct ControlInfo mx5000_ctrl =
10742 {
10743   false, /* 45_degree_rotation for joystick(s) */
10744   true, /* alternating_controls */
10745   true, /* mirrored_controls */
10746   "Air-to-air and air-to-ground refer to missiles.", /* control_details */
10747   &mx5000_get_ctrl_name
10748 };
10749 
mx5000_get_ctrl_name(int type)10750 const char *mx5000_get_ctrl_name(int type)
10751 {
10752   switch(type)
10753   {
10754     case IPT_BUTTON1: return BTN1 "Air - to - Air";
10755     case IPT_BUTTON2: return BTN2 "Air - to - Ground";
10756   } /* end of switch */
10757 
10758   return joy4way_labels(type);
10759 }
10760 
10761 const struct ControlInfo mysticm_ctrl =
10762 {
10763   false, /* 45_degree_rotation for joystick(s) */
10764   true, /* alternating_controls */
10765   true, /* mirrored_controls */
10766   "", /* control_details */
10767   &mysticm_get_ctrl_name
10768 };
10769 
mysticm_get_ctrl_name(int type)10770 const char *mysticm_get_ctrl_name(int type)
10771 {
10772   switch(type)
10773   {
10774     case IPT_BUTTON1: return BTN1 "Jump";
10775   } /* end of switch */
10776 
10777   return joy4way_labels(type);
10778 }
10779 
10780 const struct ControlInfo mystwarr_ctrl =
10781 {
10782   false, /* 45_degree_rotation for joystick(s) */
10783   false, /* alternating_controls */
10784   true, /* mirrored_controls */
10785   "Mame has three buttons, but only uses the first two. There is a dipswitch to change between 2 and 4 players.", /* control_details */
10786   &mystwarr_get_ctrl_name
10787 };
10788 
mystwarr_get_ctrl_name(int type)10789 const char *mystwarr_get_ctrl_name(int type)
10790 {
10791   switch(type)
10792   {
10793     case IPT_BUTTON1: return BTN1 "Shoot";
10794     case IPT_BUTTON2: return BTN2 "Jump";
10795     case IPT_BUTTON3: return BTN3 "NA";
10796   } /* end of switch */
10797 
10798   return joy4way_labels(type);
10799 }
10800 
10801 const struct ControlInfo nametune_ctrl =
10802 {
10803   false, /* 45_degree_rotation for joystick(s) */
10804   false, /* alternating_controls */
10805   true, /* mirrored_controls */
10806   "The game used special lighted buttons for the tune buttons.", /* control_details */
10807   &nametune_get_ctrl_name
10808 };
10809 
nametune_get_ctrl_name(int type)10810 const char *nametune_get_ctrl_name(int type)
10811 {
10812   switch(type)
10813   {
10814     case IPT_BUTTON1: return BTN1 "1";
10815     case IPT_BUTTON2: return BTN2 "2";
10816     case IPT_BUTTON3: return BTN3 "3";
10817     case IPT_BUTTON4: return BTN4 "4";
10818   } /* end of switch */
10819 
10820   return "";
10821 }
10822 
10823 const struct ControlInfo narc_ctrl =
10824 {
10825   false, /* 45_degree_rotation for joystick(s) */
10826   false, /* alternating_controls */
10827   true, /* mirrored_controls */
10828   "", /* control_details */
10829   &narc_get_ctrl_name
10830 };
10831 
narc_get_ctrl_name(int type)10832 const char *narc_get_ctrl_name(int type)
10833 {
10834   switch(type)
10835   {
10836     case IPT_BUTTON1: return BTN1 "Fire";
10837     case IPT_BUTTON2: return BTN2 "Jump";
10838     case IPT_BUTTON3: return BTN3 "Crouch";
10839     case IPT_BUTTON4: return BTN4 "Rocket Bomb";
10840   } /* end of switch */
10841 
10842   return joy4way_labels(type);
10843 }
10844 
10845 const struct ControlInfo nastar_ctrl =
10846 {
10847   false, /* 45_degree_rotation for joystick(s) */
10848   true, /* alternating_controls */
10849   true, /* mirrored_controls */
10850   "The orignal cpo lacks labels.", /* control_details */
10851   &nastar_get_ctrl_name
10852 };
10853 
nastar_get_ctrl_name(int type)10854 const char *nastar_get_ctrl_name(int type)
10855 {
10856   switch(type)
10857   {
10858     case IPT_BUTTON1: return BTN1 "Attack";
10859     case IPT_BUTTON2: return BTN2 "Jump";
10860   } /* end of switch */
10861 
10862   return joy4way_labels(type);
10863 }
10864 
10865 const struct ControlInfo natodef_ctrl =
10866 {
10867   false, /* 45_degree_rotation for joystick(s) */
10868   true, /* alternating_controls */
10869   true, /* mirrored_controls */
10870   "The cpo actually had pictures of the tank going in various directions for the joystick labels.", /* control_details */
10871   &natodef_get_ctrl_name
10872 };
10873 
natodef_get_ctrl_name(int type)10874 const char *natodef_get_ctrl_name(int type)
10875 {
10876   switch(type)
10877   {
10878     case IPT_BUTTON1: return BTN1 "1";
10879   } /* end of switch */
10880 
10881   return joy4way_labels(type);
10882 }
10883 
10884 const struct ControlInfo naughtyb_ctrl =
10885 {
10886   false, /* 45_degree_rotation for joystick(s) */
10887   true, /* alternating_controls */
10888   true, /* mirrored_controls */
10889   "", /* control_details */
10890   &naughtyb_get_ctrl_name
10891 };
10892 
naughtyb_get_ctrl_name(int type)10893 const char *naughtyb_get_ctrl_name(int type)
10894 {
10895   switch(type)
10896   {
10897     case IPT_BUTTON1: return BTN1 "Throw";
10898   } /* end of switch */
10899 
10900   return joy4way_labels(type);
10901 }
10902 
10903 const struct ControlInfo nbahangt_ctrl =
10904 {
10905   false, /* 45_degree_rotation for joystick(s) */
10906   false, /* alternating_controls */
10907   true, /* mirrored_controls */
10908   "Default setting is for 2-player cabinet but this can be changed to 4-player as a dip switch setting", /* control_details */
10909   &nbahangt_get_ctrl_name
10910 };
10911 
nbahangt_get_ctrl_name(int type)10912 const char *nbahangt_get_ctrl_name(int type)
10913 {
10914   switch(type)
10915   {
10916     case IPT_BUTTON1: return BTN1 "Turbo";
10917     case IPT_BUTTON2: return BTN2 "Shoot / Block";
10918     case IPT_BUTTON3: return BTN3 "Pass / Steal";
10919   } /* end of switch */
10920 
10921   return joy4way_labels(type);
10922 }
10923 
10924 const struct ControlInfo nbajam_ctrl =
10925 {
10926   false, /* 45_degree_rotation for joystick(s) */
10927   false, /* alternating_controls */
10928   true, /* mirrored_controls */
10929   "", /* control_details */
10930   &nbajam_get_ctrl_name
10931 };
10932 
nbajam_get_ctrl_name(int type)10933 const char *nbajam_get_ctrl_name(int type)
10934 {
10935   switch(type)
10936   {
10937     case IPT_BUTTON1: return BTN1 "Turbo";
10938     case IPT_BUTTON2: return BTN2 "Shoot / Block";
10939     case IPT_BUTTON3: return BTN3 "Pass / Steal";
10940   } /* end of switch */
10941 
10942   return joy4way_labels(type);
10943 }
10944 
10945 const struct ControlInfo neckneck_ctrl =
10946 {
10947   false, /* 45_degree_rotation for joystick(s) */
10948   false, /* alternating_controls */
10949   true, /* mirrored_controls */
10950   "Even though this game allows 6 players, it is wired to a single player layout in mame, due to the odd layout. Each numbered button represents a horse a player can control. it also doubles as a start button for that player. All the button does is jump. There is also a global start button that starts the race without giving others time to join. This is mapped to player 1 start in mame.", /* control_details */
10951   &neckneck_get_ctrl_name
10952 };
10953 
neckneck_get_ctrl_name(int type)10954 const char *neckneck_get_ctrl_name(int type)
10955 {
10956   switch(type)
10957   {
10958     case IPT_BUTTON1: return BTN1 "1";
10959     case IPT_BUTTON2: return BTN2 "2";
10960     case IPT_BUTTON3: return BTN3 "3";
10961     case IPT_BUTTON4: return BTN4 "4";
10962     case IPT_BUTTON5: return BTN5 "5";
10963     case IPT_BUTTON6: return BTN6 "6";
10964   } /* end of switch */
10965 
10966   return "";
10967 }
10968 
10969 const struct ControlInfo neogeo_ctrl =
10970 {
10971   false, /* 45_degree_rotation for joystick(s) */
10972   false, /* alternating_controls */
10973   true, /* mirrored_controls */
10974   "The Neo Geo MVS system is a generic cabinet that can have games swapped out very easily, similar to console games. A single game cabinet, a 2 game, 4 game, and 6 game variation were manufactured. The multi-cart versions had buttons to switch to a new game prior to inserting your quarter. This feature is unemulated as of MAME 0.141. Neo Geo cabinets all used the same control layout and relied upon inserts to explain to the consumer what button had what function. Most Neo Geo games begin with a 'How to Play' screen with gameplay information.", /* control_details */
10975   &neogeo_get_ctrl_name
10976 };
10977 
neogeo_get_ctrl_name(int type)10978 const char *neogeo_get_ctrl_name(int type)
10979 {
10980   switch(type)
10981   {
10982     case IPT_BUTTON1: return BTN1 "Neo Geo A";
10983     case IPT_BUTTON2: return BTN2 "Neo Geo B";
10984     case IPT_BUTTON3: return BTN3 "Neo Geo C";
10985     case IPT_BUTTON4: return BTN4 "Neo Geo D";
10986   } /* end of switch */
10987 
10988   return joy4way_labels(type);
10989 }
10990 
10991 
10992 const struct ControlInfo nyny_ctrl =
10993 {
10994   false, /* 45_degree_rotation for joystick(s) */
10995   true, /* alternating_controls */
10996   true, /* mirrored_controls */
10997   "The cpo also has a general caption for the joystick, but it's unreadable.", /* control_details */
10998   &nyny_get_ctrl_name
10999 };
11000 
nyny_get_ctrl_name(int type)11001 const char *nyny_get_ctrl_name(int type)
11002 {
11003   switch(type)
11004   {
11005     case IPT_BUTTON1: return BTN1 "Fire";
11006   } /* end of switch */
11007 
11008   return joy2way_labels(type);
11009 }
11010 
11011 const struct ControlInfo blitz_ctrl =
11012 {
11013   false, /* 45_degree_rotation for joystick(s) */
11014   false, /* alternating_controls */
11015   true, /* mirrored_controls */
11016   "OTHER:  There is a dipswitch to use either two 49-way or two 8-way joysticks for direction control. AFAIK, all blitz dedicated cabs came with 49-way stick /* control_details */ some upgrade kits came with 49-way sticks, others without any sticks (I guess assumed operator would use already installed 8-ways). Mame currently (0.82u3) only emulates the 8-way. In-game instructions sometimes refer to the buttons by their color instead of the label. Turbo = White, Jump = Blue, Pass = Red. When choosing the offensive play: the Turbo (White) button switches between the two pages of plays, Jump (Blue) flips the play directions left to right, and Pass (Red) chooses the highlighted play. When choosing the defensive play: any button chooses the highlighted play (only one page, and plays can't be flipped). When choosing either offense and defense you can turn off showing which play is highlighted by pressing up on the joystick three times (useful when playing against another player). Turbo + Pass when running with the ball gives a stiff arm. Tapping Turbo twice when running with the ball gives a spin.", /* control_details */
11017   &blitz_get_ctrl_name
11018 };
11019 
blitz_get_ctrl_name(int type)11020 const char *blitz_get_ctrl_name(int type)
11021 {
11022   switch(type)
11023   {
11024     case IPT_BUTTON1: return BTN1 "Turbo";
11025     case IPT_BUTTON2: return BTN2 "Jump/Tackle";
11026     case IPT_BUTTON3: return BTN3 "Pass/Change Player";
11027   } /* end of switch */
11028 
11029   return joy4way_labels(type);
11030 }
11031 
11032 const struct ControlInfo nibbler_ctrl =
11033 {
11034   false, /* 45_degree_rotation for joystick(s) */
11035   true, /* alternating_controls */
11036   true, /* mirrored_controls */
11037   "", /* control_details */
11038   &nibbler_get_ctrl_name
11039 };
11040 
nibbler_get_ctrl_name(int type)11041 const char *nibbler_get_ctrl_name(int type)
11042 {
11043   return joy4way_labels(type);
11044 }
11045 
11046 const struct ControlInfo nss_ctrl =
11047 {
11048   false, /* 45_degree_rotation for joystick(s) */
11049   false, /* alternating_controls */
11050   true, /* mirrored_controls */
11051   "The Nintendo Super System is the super nintendo version of the playchoice system and it runs on basically the same concept. The control panel has 2 (or 4) industrial versions of the snes control pad mounted to it. Please note that as of this posting, the mame driver doesn't emulate the nss fully. Game select buttons aren't implemented yet. Also note that the gamepad's select buttons are mapped to service buttons 1-4 respectively.", /* control_details */
11052   &nss_get_ctrl_name
11053 };
11054 
nss_get_ctrl_name(int type)11055 const char *nss_get_ctrl_name(int type)
11056 {
11057   switch(type)
11058   {
11059     case IPT_BUTTON1: return BTN1 "B";
11060     case IPT_BUTTON2: return BTN2 "Y";
11061     case IPT_BUTTON3: return BTN3 "A";
11062     case IPT_BUTTON4: return BTN4 "X";
11063     case IPT_BUTTON5: return BTN5 "L";
11064     case IPT_BUTTON6: return BTN6 "R";
11065     case IPT_SERVICE1: return "Select (Player 1)";
11066     case IPT_SERVICE2: return "Select (Player 2)";
11067     case IPT_SERVICE3: return "Select (Player 3)";
11068     case IPT_SERVICE4: return "Select (Player 4)";
11069   } /* end of switch */
11070 
11071   return joy4way_labels(type);
11072 }
11073 
11074 const struct ControlInfo nomnlnd_ctrl =
11075 {
11076   false, /* 45_degree_rotation for joystick(s) */
11077   true, /* alternating_controls */
11078   true, /* mirrored_controls */
11079   "", /* control_details */
11080   &nomnlnd_get_ctrl_name
11081 };
11082 
nomnlnd_get_ctrl_name(int type)11083 const char *nomnlnd_get_ctrl_name(int type)
11084 {
11085   switch(type)
11086   {
11087     case IPT_BUTTON1: return BTN1 "Fire!";
11088   } /* end of switch */
11089 
11090   return joy4way_labels(type);
11091 }
11092 
11093 const struct ControlInfo nova2001_ctrl =
11094 {
11095   false, /* 45_degree_rotation for joystick(s) */
11096   true, /* alternating_controls */
11097   true, /* mirrored_controls */
11098   "This game had a pause button (unlabeled on the cpo) but apparently the feature isn't working in mame.", /* control_details */
11099   &nova2001_get_ctrl_name
11100 };
11101 
nova2001_get_ctrl_name(int type)11102 const char *nova2001_get_ctrl_name(int type)
11103 {
11104   switch(type)
11105   {
11106     case IPT_BUTTON1: return BTN1 "Fire";
11107     case IPT_BUTTON2: return BTN2 "Pause";
11108   } /* end of switch */
11109 
11110   return joy4way_labels(type);
11111 }
11112 
11113 const struct ControlInfo olibochu_ctrl =
11114 {
11115   false, /* 45_degree_rotation for joystick(s) */
11116   true, /* alternating_controls */
11117   true, /* mirrored_controls */
11118   "", /* control_details */
11119   &olibochu_get_ctrl_name
11120 };
11121 
olibochu_get_ctrl_name(int type)11122 const char *olibochu_get_ctrl_name(int type)
11123 {
11124   return joy4way_labels(type);
11125 }
11126 
11127 const struct ControlInfo omegrace_ctrl =
11128 {
11129   false, /* 45_degree_rotation for joystick(s) */
11130   true, /* alternating_controls */
11131   true, /* mirrored_controls */
11132   "This game acutally uses one of the very rare optical dials. No it doesn't really spin, you turn it like a paddle. Ironically, I believe that this was one of mame's first optical games and thus the 2 way optical was named 'dial' instead of 'spinner,' which is what most optical mame games have.", /* control_details */
11133   &omegrace_get_ctrl_name
11134 };
11135 
omegrace_get_ctrl_name(int type)11136 const char *omegrace_get_ctrl_name(int type)
11137 {
11138   switch(type)
11139   {
11140     case IPT_BUTTON1: return BTN1 "Fire";
11141     case IPT_BUTTON2: return BTN2 "Thrust";
11142     case IPT_DIAL: return "Left";
11143     case (IPT_DIAL + IPT_EXTENSION): return "Right";
11144   } /* end of switch */
11145 
11146   return "";
11147 }
11148 
11149 const struct ControlInfo oneshot_ctrl =
11150 {
11151   false, /* 45_degree_rotation for joystick(s) */
11152   false, /* alternating_controls */
11153   true, /* mirrored_controls */
11154   "", /* control_details */
11155   &oneshot_get_ctrl_name
11156 };
11157 
oneshot_get_ctrl_name(int type)11158 const char *oneshot_get_ctrl_name(int type)
11159 {
11160   switch(type)
11161   {
11162     case IPT_BUTTON1: return BTN1 "Fire";
11163     case IPT_LIGHTGUN_X: return "Aim Left";
11164     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
11165     case IPT_LIGHTGUN_Y: return "Aim Up";
11166     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
11167   } /* end of switch */
11168 
11169   return "";
11170 }
11171 
11172 const struct ControlInfo othunder_ctrl =
11173 {
11174   false, /* 45_degree_rotation for joystick(s) */
11175   false, /* alternating_controls */
11176   true, /* mirrored_controls */
11177   "", /* control_details */
11178   &othunder_get_ctrl_name
11179 };
11180 
othunder_get_ctrl_name(int type)11181 const char *othunder_get_ctrl_name(int type)
11182 {
11183   switch(type)
11184   {
11185     case IPT_BUTTON1: return BTN1 "Fire";
11186     case IPT_BUTTON2: return BTN2 "Grenade";
11187     case IPT_LIGHTGUN_X: return "Aim Left";
11188     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
11189     case IPT_LIGHTGUN_Y: return "Aim Up";
11190     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
11191   } /* end of switch */
11192 
11193   return "";
11194 }
11195 
11196 const struct ControlInfo opwolf_ctrl =
11197 {
11198   false, /* 45_degree_rotation for joystick(s) */
11199   false, /* alternating_controls */
11200   false, /* mirrored_controls */
11201   "", /* control_details */
11202   &opwolf_get_ctrl_name
11203 };
11204 
opwolf_get_ctrl_name(int type)11205 const char *opwolf_get_ctrl_name(int type)
11206 {
11207   switch(type)
11208   {
11209     case IPT_BUTTON1: return BTN1 "Fire";
11210     case IPT_BUTTON2: return BTN2 "Rocket Gun";
11211     case IPT_LIGHTGUN_X: return "Aim Left";
11212     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
11213     case IPT_LIGHTGUN_Y: return "Aim Up";
11214     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
11215   } /* end of switch */
11216 
11217   return "";
11218 }
11219 
11220 const struct ControlInfo opwolf3_ctrl =
11221 {
11222   false, /* 45_degree_rotation for joystick(s) */
11223   false, /* alternating_controls */
11224   true, /* mirrored_controls */
11225   "The bomb button is actually the reload cock on the gun. Yes this doesn't make any sense, just go with it.", /* control_details */
11226   &opwolf3_get_ctrl_name
11227 };
11228 
opwolf3_get_ctrl_name(int type)11229 const char *opwolf3_get_ctrl_name(int type)
11230 {
11231   switch(type)
11232   {
11233     case IPT_BUTTON1: return BTN1 "Shoot";
11234     case IPT_BUTTON2: return BTN2 "Bomb";
11235     case IPT_LIGHTGUN_X: return "Aim Left";
11236     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
11237     case IPT_LIGHTGUN_Y: return "Aim Up";
11238     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
11239   } /* end of switch */
11240 
11241   return "";
11242 }
11243 
11244 const struct ControlInfo outrun_ctrl =
11245 {
11246   false, /* 45_degree_rotation for joystick(s) */
11247   false, /* alternating_controls */
11248   false, /* mirrored_controls */
11249   "The shifter is hard-coded to the space-bar to avoid conflicts.", /* control_details */
11250   &outrun_get_ctrl_name
11251 };
11252 
outrun_get_ctrl_name(int type)11253 const char *outrun_get_ctrl_name(int type)
11254 {
11255   switch(type)
11256   {
11257     case IPT_BUTTON1: return BTN1 "High / Low";
11258     case IPT_PADDLE: return "Left";
11259     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
11260     case IPT_PEDAL: return "Accelerate";
11261     case IPT_PEDAL2: return "Brake";
11262   } /* end of switch */
11263 
11264   return "";
11265 }
11266 
11267 const struct ControlInfo overdriv_ctrl =
11268 {
11269   false, /* 45_degree_rotation for joystick(s) */
11270   false, /* alternating_controls */
11271   false, /* mirrored_controls */
11272   "", /* control_details */
11273   &overdriv_get_ctrl_name
11274 };
11275 
overdriv_get_ctrl_name(int type)11276 const char *overdriv_get_ctrl_name(int type)
11277 {
11278   switch(type)
11279   {
11280     case IPT_BUTTON1: return BTN1 "Accelerate";
11281     case IPT_BUTTON2: return BTN2 "Brake";
11282     case IPT_BUTTON3: return BTN3 "High / Low";
11283     case IPT_DIAL: return "Left";
11284     case (IPT_DIAL + IPT_EXTENSION): return "Right";
11285   } /* end of switch */
11286 
11287   return "";
11288 }
11289 
11290 const struct ControlInfo pow_ctrl =
11291 {
11292   false, /* 45_degree_rotation for joystick(s) */
11293   false, /* alternating_controls */
11294   true, /* mirrored_controls */
11295   "On the original cpo, the buttons are in 'Double Dragon' configuration (jump on the top row, punch and kick on the bottom). You may wish to remap for comfort", /* control_details */
11296   &pow_get_ctrl_name
11297 };
11298 
pow_get_ctrl_name(int type)11299 const char *pow_get_ctrl_name(int type)
11300 {
11301   switch(type)
11302   {
11303     case IPT_BUTTON1: return BTN1 "Kick";
11304     case IPT_BUTTON2: return BTN2 "Jump";
11305     case IPT_BUTTON3: return BTN3 "Punch";
11306   } /* end of switch */
11307 
11308   return joy4way_labels(type);
11309 }
11310 
11311 const struct ControlInfo pacland_ctrl =
11312 {
11313   false, /* 45_degree_rotation for joystick(s) */
11314   true, /* alternating_controls */
11315   true, /* mirrored_controls */
11316   "", /* control_details */
11317   &pacland_get_ctrl_name
11318 };
11319 
pacland_get_ctrl_name(int type)11320 const char *pacland_get_ctrl_name(int type)
11321 {
11322   switch(type)
11323   {
11324     case IPT_BUTTON1: return BTN1 "Jump";
11325     case IPT_JOYSTICK_LEFT: return "Run Left";
11326     case IPT_JOYSTICK_RIGHT: return "Run Right";
11327   } /* end of switch */
11328 
11329   return "";
11330 }
11331 
11332 const struct ControlInfo pacplus_ctrl =
11333 {
11334   false, /* 45_degree_rotation for joystick(s) */
11335   true, /* alternating_controls */
11336   true, /* mirrored_controls */
11337   "", /* control_details */
11338   &pacplus_get_ctrl_name
11339 };
11340 
pacplus_get_ctrl_name(int type)11341 const char *pacplus_get_ctrl_name(int type)
11342 {
11343   return joy4way_labels(type);
11344 }
11345 
11346 const struct ControlInfo pacmania_ctrl =
11347 {
11348   false, /* 45_degree_rotation for joystick(s) */
11349   true, /* alternating_controls */
11350   true, /* mirrored_controls */
11351   "The original CP had one button on either side of the CP for Bounce. Note By HowarC:  This seems to be a glitch in mame caused by a sloppy macro. For now three buttons is ok, but I will submit a new driver which ditches the other two.", /* control_details */
11352   &pacmania_get_ctrl_name
11353 };
11354 
pacmania_get_ctrl_name(int type)11355 const char *pacmania_get_ctrl_name(int type)
11356 {
11357   switch(type)
11358   {
11359     case IPT_BUTTON1: return BTN1 "Bounce";
11360     case IPT_BUTTON2: return BTN2 "Bounce";
11361     case IPT_BUTTON3: return BTN3 "Bounce";
11362   } /* end of switch */
11363 
11364   return joy4way_labels(type);
11365 }
11366 
11367 const struct ControlInfo paddlema_ctrl =
11368 {
11369   false, /* 45_degree_rotation for joystick(s) */
11370   false, /* alternating_controls */
11371   true, /* mirrored_controls */
11372   "This game is 4 player but only one start button is used. Upon inserting a coin and presing start, you are presented with a menu to choose the number of players and play mode.", /* control_details */
11373   &paddlema_get_ctrl_name
11374 };
11375 
paddlema_get_ctrl_name(int type)11376 const char *paddlema_get_ctrl_name(int type)
11377 {
11378   switch(type)
11379   {
11380     case IPT_BUTTON1: return BTN1 "Bounce";
11381   } /* end of switch */
11382 
11383   return joy4way_labels(type);
11384 }
11385 
11386 const struct ControlInfo pandoras_ctrl =
11387 {
11388   false, /* 45_degree_rotation for joystick(s) */
11389   true, /* alternating_controls */
11390   true, /* mirrored_controls */
11391   "", /* control_details */
11392   &pandoras_get_ctrl_name
11393 };
11394 
pandoras_get_ctrl_name(int type)11395 const char *pandoras_get_ctrl_name(int type)
11396 {
11397   switch(type)
11398   {
11399     case IPT_BUTTON1: return BTN1 "Jump";
11400   } /* end of switch */
11401 
11402   return joy4way_labels(type);
11403 }
11404 
11405 const struct ControlInfo paperboy_ctrl =
11406 {
11407   false, /* 45_degree_rotation for joystick(s) */
11408   true, /* alternating_controls */
11409   true, /* mirrored_controls */
11410   "Game used a handlebar controller, Pushing forward on the handles made the bike speed up, pulling back slowed it down.", /* control_details */
11411   &paperboy_get_ctrl_name
11412 };
11413 
paperboy_get_ctrl_name(int type)11414 const char *paperboy_get_ctrl_name(int type)
11415 {
11416   switch(type)
11417   {
11418     case IPT_BUTTON1: return BTN1 "Throw";
11419     case IPT_BUTTON2: return BTN2 "Throw";
11420     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
11421     case IPT_AD_STICK_X: return "Left";
11422     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Break";
11423     case IPT_AD_STICK_Y: return "Accelerate";
11424   } /* end of switch */
11425 
11426   return "";
11427 }
11428 
11429 const struct ControlInfo pastelg_ctrl =
11430 {
11431   false, /* 45_degree_rotation for joystick(s) */
11432   true, /* alternating_controls */
11433   true, /* mirrored_controls */
11434   "Mahjong games are NOT compatable with ctrlr files. As a matter of fact they pretty much all have the same layout and all have the same controls. The controls are hardcoded, so remapping isn't reccomended, especially considering the fact that a full keyboard of buttons are required to play.", /* control_details */
11435   &pastelg_get_ctrl_name
11436 };
11437 
pastelg_get_ctrl_name(int type)11438 const char *pastelg_get_ctrl_name(int type)
11439 {
11440   return "";
11441 }
11442 
11443 const struct ControlInfo pengo_ctrl =
11444 {
11445   false, /* 45_degree_rotation for joystick(s) */
11446   true, /* alternating_controls */
11447   true, /* mirrored_controls */
11448   "", /* control_details */
11449   &pengo_get_ctrl_name
11450 };
11451 
pengo_get_ctrl_name(int type)11452 const char *pengo_get_ctrl_name(int type)
11453 {
11454   switch(type)
11455   {
11456     case IPT_BUTTON1: return BTN1 "Push";
11457   } /* end of switch */
11458 
11459   return joy4way_labels(type);
11460 }
11461 
11462 const struct ControlInfo pepper2_ctrl =
11463 {
11464   false, /* 45_degree_rotation for joystick(s) */
11465   true, /* alternating_controls */
11466   true, /* mirrored_controls */
11467   "", /* control_details */
11468   &pepper2_get_ctrl_name
11469 };
11470 
pepper2_get_ctrl_name(int type)11471 const char *pepper2_get_ctrl_name(int type)
11472 {
11473   return joy4way_labels(type);
11474 }
11475 
11476 const struct ControlInfo peterpak_ctrl =
11477 {
11478   false, /* 45_degree_rotation for joystick(s) */
11479   true, /* alternating_controls */
11480   true, /* mirrored_controls */
11481   "This game uses a unique type of trigger stick that is rarely used. Although it looks different, the diagrams show similar mounting and throw of a more standard tron stick.", /* control_details */
11482   &peterpak_get_ctrl_name
11483 };
11484 
peterpak_get_ctrl_name(int type)11485 const char *peterpak_get_ctrl_name(int type)
11486 {
11487   switch(type)
11488   {
11489     case IPT_BUTTON1: return BTN1 "Throw";
11490     case IPT_BUTTON2: return BTN2 "Jump";
11491   } /* end of switch */
11492 
11493   return joy4way_labels(type);
11494 }
11495 
11496 const struct ControlInfo phoenix_ctrl =
11497 {
11498   false, /* 45_degree_rotation for joystick(s) */
11499   true, /* alternating_controls */
11500   true, /* mirrored_controls */
11501   "", /* control_details */
11502   &phoenix_get_ctrl_name
11503 };
11504 
phoenix_get_ctrl_name(int type)11505 const char *phoenix_get_ctrl_name(int type)
11506 {
11507   switch(type)
11508   {
11509     case IPT_BUTTON1: return BTN1 "Fire";
11510     case IPT_BUTTON2: return BTN2 "Force Field";
11511   } /* end of switch */
11512 
11513   return joy2way_labels(type);
11514 }
11515 
11516 const struct ControlInfo pigout_ctrl =
11517 {
11518   false, /* 45_degree_rotation for joystick(s) */
11519   false, /* alternating_controls */
11520   true, /* mirrored_controls */
11521   "", /* control_details */
11522   &pigout_get_ctrl_name
11523 };
11524 
pigout_get_ctrl_name(int type)11525 const char *pigout_get_ctrl_name(int type)
11526 {
11527   switch(type)
11528   {
11529     case IPT_BUTTON1: return BTN1 "Jump";
11530     case IPT_BUTTON2: return BTN2 "Throw";
11531   } /* end of switch */
11532 
11533   return joy4way_labels(type);
11534 }
11535 
11536 const struct ControlInfo pigskin_ctrl =
11537 {
11538   false, /* 45_degree_rotation for joystick(s) */
11539   false, /* alternating_controls */
11540   true, /* mirrored_controls */
11541   "OTHER: This game used a 49-way joystick. This game was recently updated to accomidate true analog inputs to better emulate the 49-way joystick. Unfortunately, they turned an othewise tidy driver into an ungodly mess. The stick is there and oddly enough three joystick directions (up, down, and only left) and now the normal 'button 1' labels are overwritten with the game selection labels, which are secondary functions and should NOT be the custom labels for the buttons. For the love of all things good, someone PLEASE fix this driver. The joystick controls one player, but when you punch, the rest of the team also punches. If another teammate has the ball and you press the pass button, he passes the ball to you. If you have the ball and press and hold the pass button, the choices rolls between long, short, back passes, and a drop kick, which happens when you let go of the button.", /* control_details */
11542   &pigskin_get_ctrl_name
11543 };
11544 
pigskin_get_ctrl_name(int type)11545 const char *pigskin_get_ctrl_name(int type)
11546 {
11547   switch(type)
11548   {
11549     case IPT_BUTTON1: return BTN1 "Punch";
11550     case IPT_BUTTON2: return BTN2 "Pass";
11551     case IPT_BUTTON3: return BTN3 "Team Attitude";
11552     case IPT_AD_STICK_X: return "Left";
11553     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
11554     case IPT_AD_STICK_Y: return "Up";
11555     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
11556   } /* end of switch */
11557 
11558   return "";
11559 }
11560 
11561 const struct ControlInfo pbaction_ctrl =
11562 {
11563   false, /* 45_degree_rotation for joystick(s) */
11564   true, /* alternating_controls */
11565   true, /* mirrored_controls */
11566   "The cpo lables are a little misleading. By 'Start' it actually refers to launching the pinball, not the start button, which the game actually has two of. Also, although there are two buttons on each side Labeled 'Start And Shake' apparently, only the left button starts and only the right button shakes. This may be a mame issue though. My best guess is on the original cpo, each button was cross-wired to both switches as a last-minute layout decision.", /* control_details */
11567   &pbaction_get_ctrl_name
11568 };
11569 
pbaction_get_ctrl_name(int type)11570 const char *pbaction_get_ctrl_name(int type)
11571 {
11572   switch(type)
11573   {
11574     case IPT_BUTTON1: return BTN1 "Left Flipper Button";
11575     case IPT_BUTTON2: return BTN2 "Right Flipper Button";
11576     case IPT_BUTTON3: return BTN3 "Shake and Start Button (Left)";
11577     case IPT_BUTTON4: return BTN4 "Shake and Start Button (Right)";
11578   } /* end of switch */
11579 
11580   return "";
11581 }
11582 
11583 const struct ControlInfo piratetr_ctrl =
11584 {
11585   false, /* 45_degree_rotation for joystick(s) */
11586   true, /* alternating_controls */
11587   true, /* mirrored_controls */
11588   "The games cpo didn't have any directional arrows, nor did it have any labels, probably due to the simplistic layout.", /* control_details */
11589   &piratetr_get_ctrl_name
11590 };
11591 
piratetr_get_ctrl_name(int type)11592 const char *piratetr_get_ctrl_name(int type)
11593 {
11594   return joy4way_labels(type);
11595 }
11596 
11597 const struct ControlInfo pitfight_ctrl =
11598 {
11599   false, /* 45_degree_rotation for joystick(s) */
11600   false, /* alternating_controls */
11601   true, /* mirrored_controls */
11602   "Although in the arcades the start buton was also the jump button, this is not the case in mame. My guess is in the arcades two inputs were wired to the same button to save space much like in other 3 and 4 player games. This game only had a 2 player verison in japan, but often the 3 player us version was also used in a 2 player cabinet because of the way the menu is setup. Unlike most multiplayer games, the coin slots are shared and you can select each character regardless of which stick you press start at.", /* control_details */
11603   &pitfight_get_ctrl_name
11604 };
11605 
pitfight_get_ctrl_name(int type)11606 const char *pitfight_get_ctrl_name(int type)
11607 {
11608   switch(type)
11609   {
11610     case IPT_BUTTON1: return BTN1 "Punch";
11611     case IPT_BUTTON2: return BTN2 "Kick";
11612     case IPT_BUTTON3: return BTN3 "Start / Jump";
11613   } /* end of switch */
11614 
11615   return joy4way_labels(type);
11616 }
11617 
11618 const struct ControlInfo pitfall2_ctrl =
11619 {
11620   false, /* 45_degree_rotation for joystick(s) */
11621   true, /* alternating_controls */
11622   true, /* mirrored_controls */
11623   "The actual cpo for this game didn't have a label for the button, nor a visual hint of what it's for. Also the manual doesn't explicitly say that the button is the 'jump' button. This is probably due to the fact that the pitfall series is one of the most popular in early gaming history and you'd have to live in a cave not to know that the button is for jumping.", /* control_details */
11624   &pitfall2_get_ctrl_name
11625 };
11626 
pitfall2_get_ctrl_name(int type)11627 const char *pitfall2_get_ctrl_name(int type)
11628 {
11629   switch(type)
11630   {
11631     case IPT_BUTTON1: return BTN1 "Jump";
11632   } /* end of switch */
11633 
11634   return joy4way_labels(type);
11635 }
11636 
11637 const struct ControlInfo playch10_ctrl =
11638 {
11639   false, /* 45_degree_rotation for joystick(s) */
11640   false, /* alternating_controls */
11641   false, /* mirrored_controls */
11642   "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.", /* control_details */
11643   &playch10_get_ctrl_name
11644 };
11645 
playch10_get_ctrl_name(int type)11646 const char *playch10_get_ctrl_name(int type)
11647 {
11648   switch(type)
11649   {
11650     case (IPT_BUTTON1 | IPF_PLAYER2): return "A";
11651     case (IPT_BUTTON2 | IPF_PLAYER2): return "B";
11652     case (IPT_JOYSTICK_UP | IPF_PLAYER2): return "Up";
11653     case (IPT_JOYSTICK_DOWN | IPF_PLAYER2): return "Down";
11654     case (IPT_JOYSTICK_LEFT | IPF_PLAYER2): return "Left";
11655     case (IPT_JOYSTICK_RIGHT | IPF_PLAYER2): return "Right";
11656     case IPT_BUTTON1: return BTN1 "A";
11657     case IPT_BUTTON2: return BTN2 "B";
11658     case IPT_JOYSTICK_RIGHT: return "Right";
11659     case IPT_JOYSTICK_LEFT: return "Left";
11660     case IPT_JOYSTICK_DOWN: return "Down";
11661     case IPT_JOYSTICK_UP: return "Up";
11662     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
11663     case IPT_LIGHTGUN_X: return "Left";
11664     case IPT_LIGHTGUN_Y: return "Up";
11665     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
11666     case IPT_SERVICE1: return "Service Coin";
11667     case IPT_SERVICE2: return "Channel Select";
11668     case IPT_SERVICE3: return "Enter";
11669     case IPT_SERVICE4: return "Reset";
11670   } /* end of switch */
11671 
11672   return "";
11673 }
11674 
11675 const struct ControlInfo pleiads_ctrl =
11676 {
11677   false, /* 45_degree_rotation for joystick(s) */
11678   true, /* alternating_controls */
11679   true, /* mirrored_controls */
11680   "", /* control_details */
11681   &pleiads_get_ctrl_name
11682 };
11683 
pleiads_get_ctrl_name(int type)11684 const char *pleiads_get_ctrl_name(int type)
11685 {
11686   switch(type)
11687   {
11688     case IPT_BUTTON1: return BTN1 "Fire";
11689     case IPT_BUTTON2: return BTN2 "Warp";
11690   } /* end of switch */
11691 
11692   return joy2way_labels(type);
11693 }
11694 
11695 const struct ControlInfo plotting_ctrl =
11696 {
11697   false, /* 45_degree_rotation for joystick(s) */
11698   false, /* alternating_controls */
11699   true, /* mirrored_controls */
11700   "", /* control_details */
11701   &plotting_get_ctrl_name
11702 };
11703 
plotting_get_ctrl_name(int type)11704 const char *plotting_get_ctrl_name(int type)
11705 {
11706   switch(type)
11707   {
11708     case IPT_BUTTON1: return BTN1 "Fire";
11709   } /* end of switch */
11710 
11711   return joy4way_labels(type);
11712 }
11713 
11714 const struct ControlInfo ptblank_ctrl =
11715 {
11716   false, /* 45_degree_rotation for joystick(s) */
11717   false, /* alternating_controls */
11718   true, /* mirrored_controls */
11719   "To reload fire offscreen.", /* control_details */
11720   &ptblank_get_ctrl_name
11721 };
11722 
ptblank_get_ctrl_name(int type)11723 const char *ptblank_get_ctrl_name(int type)
11724 {
11725   switch(type)
11726   {
11727     case IPT_BUTTON1: return BTN1 "Fire";
11728     case IPT_LIGHTGUN_X: return "Left";
11729     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
11730     case IPT_LIGHTGUN_Y: return "Up";
11731     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
11732   } /* end of switch */
11733 
11734   return "";
11735 }
11736 
11737 const struct ControlInfo polaris_ctrl =
11738 {
11739   false, /* 45_degree_rotation for joystick(s) */
11740   true, /* alternating_controls */
11741   true, /* mirrored_controls */
11742   "The original cpo simply labeled the joystick 'control'", /* control_details */
11743   &polaris_get_ctrl_name
11744 };
11745 
polaris_get_ctrl_name(int type)11746 const char *polaris_get_ctrl_name(int type)
11747 {
11748   switch(type)
11749   {
11750     case IPT_BUTTON1: return BTN1 "Fire";
11751   } /* end of switch */
11752 
11753   return joy4way_labels(type);
11754 }
11755 
11756 const struct ControlInfo polepos_ctrl =
11757 {
11758   false, /* 45_degree_rotation for joystick(s) */
11759   false, /* alternating_controls */
11760   false, /* mirrored_controls */
11761   "Button 1 is actually the spacebar by default to avoid conflicts with the pedals. The high/low shifter is emulated by a single toggle input in mame.", /* control_details */
11762   &polepos_get_ctrl_name
11763 };
11764 
polepos_get_ctrl_name(int type)11765 const char *polepos_get_ctrl_name(int type)
11766 {
11767   switch(type)
11768   {
11769     case IPT_BUTTON1: return BTN1 "High / Low";
11770     case (IPT_DIAL + IPT_EXTENSION): return "Right";
11771     case IPT_DIAL: return "Left";
11772     case IPT_PEDAL: return "Accelerate";
11773     case IPT_PEDAL2: return "Brake";
11774   } /* end of switch */
11775 
11776   return "";
11777 }
11778 
11779 const struct ControlInfo polepos2_ctrl =
11780 {
11781   false, /* 45_degree_rotation for joystick(s) */
11782   false, /* alternating_controls */
11783   false, /* mirrored_controls */
11784   "Button1 is actually spacbar by default in this game to avoid conflicts with the pedals. The high / low shifter is emulated in mame by a single button toggle. The upright cab only uses the gas pedal while the cockpit uses both. This is a dipswitch setting that you can alter if you wish to better suit your layout.", /* control_details */
11785   &polepos2_get_ctrl_name
11786 };
11787 
polepos2_get_ctrl_name(int type)11788 const char *polepos2_get_ctrl_name(int type)
11789 {
11790   switch(type)
11791   {
11792     case IPT_BUTTON1: return BTN1 "High / Low";
11793     case (IPT_DIAL + IPT_EXTENSION): return "Right";
11794     case IPT_DIAL: return "Left";
11795     case IPT_PEDAL: return "Accelerate";
11796     case IPT_PEDAL2: return "Brake";
11797   } /* end of switch */
11798 
11799   return "";
11800 }
11801 
11802 const struct ControlInfo policetr_ctrl =
11803 {
11804   false, /* 45_degree_rotation for joystick(s) */
11805   false, /* alternating_controls */
11806   true, /* mirrored_controls */
11807   "Fire offscreen to reload.", /* control_details */
11808   &policetr_get_ctrl_name
11809 };
11810 
policetr_get_ctrl_name(int type)11811 const char *policetr_get_ctrl_name(int type)
11812 {
11813   switch(type)
11814   {
11815     case IPT_BUTTON1: return BTN1 "Fire";
11816     case IPT_LIGHTGUN_X: return "Left";
11817     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
11818     case IPT_LIGHTGUN_Y: return "Up";
11819     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
11820   } /* end of switch */
11821 
11822   return "";
11823 }
11824 
11825 const struct ControlInfo polyplay_ctrl =
11826 {
11827   false, /* 45_degree_rotation for joystick(s) */
11828   false, /* alternating_controls */
11829   false, /* mirrored_controls */
11830   "Note that this game didn't have any labels. The poly play system was the second East-German arcade machine. Quite, frankly it was a slapped-together piece of crap. It used inferior russian computer hardware, an old television converted to rgb and a cabient made out of chip-board laminated to look like fake wood. We use the terms 'arcade contols' in a generic sense on this one. The joystick and button were salvaged from industrial machines and are nothing like real arcade controls.", /* control_details */
11831   &polyplay_get_ctrl_name
11832 };
11833 
polyplay_get_ctrl_name(int type)11834 const char *polyplay_get_ctrl_name(int type)
11835 {
11836   switch(type)
11837   {
11838     case IPT_BUTTON1: return BTN1 "A";
11839   } /* end of switch */
11840 
11841   return joy4way_labels(type);
11842 }
11843 
11844 const struct ControlInfo ponpoko_ctrl =
11845 {
11846   false, /* 45_degree_rotation for joystick(s) */
11847   true, /* alternating_controls */
11848   true, /* mirrored_controls */
11849   "", /* control_details */
11850   &ponpoko_get_ctrl_name
11851 };
11852 
ponpoko_get_ctrl_name(int type)11853 const char *ponpoko_get_ctrl_name(int type)
11854 {
11855   switch(type)
11856   {
11857     case IPT_BUTTON1: return BTN1 "Jump";
11858   } /* end of switch */
11859 
11860   return joy4way_labels(type);
11861 }
11862 
11863 const struct ControlInfo pooyan_ctrl =
11864 {
11865   false, /* 45_degree_rotation for joystick(s) */
11866   true, /* alternating_controls */
11867   true, /* mirrored_controls */
11868   "", /* control_details */
11869   &pooyan_get_ctrl_name
11870 };
11871 
pooyan_get_ctrl_name(int type)11872 const char *pooyan_get_ctrl_name(int type)
11873 {
11874   switch(type)
11875   {
11876     case IPT_BUTTON1: return BTN1 "Fire";
11877     case IPT_JOYSTICK_UP: return "Up";
11878     case IPT_JOYSTICK_DOWN: return "Down";
11879   } /* end of switch */
11880 
11881   return "";
11882 }
11883 
11884 const struct ControlInfo popeye_ctrl =
11885 {
11886   false, /* 45_degree_rotation for joystick(s) */
11887   true, /* alternating_controls */
11888   true, /* mirrored_controls */
11889   "", /* control_details */
11890   &popeye_get_ctrl_name
11891 };
11892 
popeye_get_ctrl_name(int type)11893 const char *popeye_get_ctrl_name(int type)
11894 {
11895   switch(type)
11896   {
11897     case IPT_BUTTON1: return BTN1 "Punch";
11898   } /* end of switch */
11899 
11900   return joy4way_labels(type);
11901 }
11902 
11903 const struct ControlInfo popper_ctrl =
11904 {
11905   false, /* 45_degree_rotation for joystick(s) */
11906   true, /* alternating_controls */
11907   true, /* mirrored_controls */
11908   "For you Q-Bert fans that don't have a diagonal joystick mounted this is the game for you. It is essentailly the same game only an 8-way joystick is used.", /* control_details */
11909   &popper_get_ctrl_name
11910 };
11911 
popper_get_ctrl_name(int type)11912 const char *popper_get_ctrl_name(int type)
11913 {
11914   switch(type)
11915   {
11916     case IPT_BUTTON1: return BTN1 "Throw";
11917     case IPT_JOYSTICK_UP: return "Move Up";
11918     case IPT_JOYSTICK_DOWN: return "Move Down";
11919     case IPT_JOYSTICK_LEFT: return "Move Left";
11920     case IPT_JOYSTICK_RIGHT: return "Move Right";
11921   } /* end of switch */
11922 
11923   return "";
11924 }
11925 
11926 const struct ControlInfo pdrift_ctrl =
11927 {
11928   false, /* 45_degree_rotation for joystick(s) */
11929   false, /* alternating_controls */
11930   false, /* mirrored_controls */
11931   "", /* control_details */
11932   &pdrift_get_ctrl_name
11933 };
11934 
pdrift_get_ctrl_name(int type)11935 const char *pdrift_get_ctrl_name(int type)
11936 {
11937   switch(type)
11938   {
11939     case IPT_BUTTON1: return BTN1 "High / Low";
11940     case IPT_PADDLE: return "Left";
11941     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
11942     case IPT_PEDAL: return "Accelerate";
11943     case IPT_PEDAL2: return "Brake";
11944   } /* end of switch */
11945 
11946   return "";
11947 }
11948 
11949 const struct ControlInfo powerdrv_ctrl =
11950 {
11951   false, /* 45_degree_rotation for joystick(s) */
11952   false, /* alternating_controls */
11953   true, /* mirrored_controls */
11954   "Tap the front and back tires rapidly to acelerate and use the shifter to change gearing for obstacles. Pop a wheelie with the wheelie button.", /* control_details */
11955   &powerdrv_get_ctrl_name
11956 };
11957 
powerdrv_get_ctrl_name(int type)11958 const char *powerdrv_get_ctrl_name(int type)
11959 {
11960   switch(type)
11961   {
11962     case IPT_BUTTON1: return BTN1 "Back Tire";
11963     case IPT_BUTTON2: return BTN2 "Front Tire";
11964     case IPT_BUTTON3: return BTN3 "Wheelie";
11965     case IPT_BUTTON4: return BTN4 "2wd/4wd";
11966   } /* end of switch */
11967 
11968   return "";
11969 }
11970 
11971 const struct ControlInfo pclubj_ctrl =
11972 {
11973   false, /* 45_degree_rotation for joystick(s) */
11974   false, /* alternating_controls */
11975   false, /* mirrored_controls */
11976   "Even though the label indicates that this is a 4 way joystick it is really a two way. The joystick is desginated as a 4 way because the cpo actually had arrows in all 4 directions. This isn't even a game, it is a photo booth in which users select a overlay and have theri pciture printed with it in front. Considering mame's 'arcade machine only' policy, it is suprising that it is included in mame.", /* control_details */
11977   &pclubj_get_ctrl_name
11978 };
11979 
pclubj_get_ctrl_name(int type)11980 const char *pclubj_get_ctrl_name(int type)
11981 {
11982   switch(type)
11983   {
11984     case IPT_BUTTON1: return BTN1 "Ok / Print";
11985     case IPT_BUTTON2: return BTN2 "Cancel";
11986   } /* end of switch */
11987 
11988   return joy4way_labels(type);
11989 }
11990 
11991 const struct ControlInfo profpac_ctrl =
11992 {
11993   false, /* 45_degree_rotation for joystick(s) */
11994   false, /* alternating_controls */
11995   true, /* mirrored_controls */
11996   "Something of note is that on this layout the first player is on the right side instead of the left. Note:  As of mame 0.83 this game isn't working yet... I am just preparing for when it does.", /* control_details */
11997   &profpac_get_ctrl_name
11998 };
11999 
profpac_get_ctrl_name(int type)12000 const char *profpac_get_ctrl_name(int type)
12001 {
12002   switch(type)
12003   {
12004     case IPT_BUTTON1: return BTN1 "A";
12005     case IPT_BUTTON2: return BTN2 "B";
12006     case IPT_BUTTON3: return BTN3 "C";
12007   } /* end of switch */
12008 
12009   return "";
12010 }
12011 
12012 const struct ControlInfo psychos_ctrl =
12013 {
12014   false, /* 45_degree_rotation for joystick(s) */
12015   false, /* alternating_controls */
12016   true, /* mirrored_controls */
12017   "The player starts as a flying-saucer which the player can fly anywhere in the screen. After a few seconds, the flying-saucer drops the main character that runs/jumps/drops between the platforms. After a life is lost, the player returns to the saucer.", /* control_details */
12018   &psychos_get_ctrl_name
12019 };
12020 
psychos_get_ctrl_name(int type)12021 const char *psychos_get_ctrl_name(int type)
12022 {
12023   switch(type)
12024   {
12025     case IPT_BUTTON1: return BTN1 "Primary Fire";
12026     case IPT_BUTTON2: return BTN2 "Secondary Fire ";
12027     case IPT_JOYSTICK_RIGHT: return "Move Right";
12028     case IPT_JOYSTICK_LEFT: return "Move Left";
12029     case IPT_JOYSTICK_DOWN: return "Move Down";
12030     case IPT_JOYSTICK_UP: return "Move Up";
12031   } /* end of switch */
12032 
12033   return "";
12034 }
12035 
12036 const struct ControlInfo puckman_ctrl =
12037 {
12038   false, /* 45_degree_rotation for joystick(s) */
12039   true, /* alternating_controls */
12040   true, /* mirrored_controls */
12041   "", /* control_details */
12042   &puckman_get_ctrl_name
12043 };
12044 
puckman_get_ctrl_name(int type)12045 const char *puckman_get_ctrl_name(int type)
12046 {
12047   return joy4way_labels(type);
12048 }
12049 
12050 const struct ControlInfo pulsar_ctrl =
12051 {
12052   false, /* 45_degree_rotation for joystick(s) */
12053   true, /* alternating_controls */
12054   true, /* mirrored_controls */
12055   "The original game had the fire button on the left and the joystick on the right.", /* control_details */
12056   &pulsar_get_ctrl_name
12057 };
12058 
pulsar_get_ctrl_name(int type)12059 const char *pulsar_get_ctrl_name(int type)
12060 {
12061   switch(type)
12062   {
12063     case IPT_BUTTON1: return BTN1 "Fire";
12064   } /* end of switch */
12065 
12066   return joy4way_labels(type);
12067 }
12068 
12069 const struct ControlInfo punchout_ctrl =
12070 {
12071   false, /* 45_degree_rotation for joystick(s) */
12072   false, /* alternating_controls */
12073   false, /* mirrored_controls */
12074   "The Hook Uppercut is also referred to as the 'knockout blow' on the control panel and can only be used when your ko meter flashes. The button is a large gameshow type of button.", /* control_details */
12075   &punchout_get_ctrl_name
12076 };
12077 
punchout_get_ctrl_name(int type)12078 const char *punchout_get_ctrl_name(int type)
12079 {
12080   switch(type)
12081   {
12082     case IPT_BUTTON1: return BTN1 "Left Blow To Head/Body";
12083     case IPT_BUTTON2: return BTN2 "Right Blow to Head/Body";
12084     case IPT_BUTTON3: return BTN3 "Hook Uppercut";
12085     case IPT_JOYSTICK_UP: return "Guard Up";
12086     case IPT_JOYSTICK_DOWN: return "Guard Down";
12087     case IPT_JOYSTICK_LEFT: return "Dodge Left";
12088     case IPT_JOYSTICK_RIGHT: return "Dodge Right";
12089   } /* end of switch */
12090 
12091   return "";
12092 }
12093 
12094 const struct ControlInfo punkshot_ctrl =
12095 {
12096   false, /* 45_degree_rotation for joystick(s) */
12097   false, /* alternating_controls */
12098   true, /* mirrored_controls */
12099   "", /* control_details */
12100   &punkshot_get_ctrl_name
12101 };
12102 
punkshot_get_ctrl_name(int type)12103 const char *punkshot_get_ctrl_name(int type)
12104 {
12105   switch(type)
12106   {
12107     case IPT_BUTTON1: return BTN1 "Pass / Hit";
12108     case IPT_BUTTON2: return BTN2 "Shoot / Block";
12109   } /* end of switch */
12110 
12111   return joy4way_labels(type);
12112 }
12113 
12114 const struct ControlInfo pbobble_ctrl =
12115 {
12116   false, /* 45_degree_rotation for joystick(s) */
12117   false, /* alternating_controls */
12118   true, /* mirrored_controls */
12119   "", /* control_details */
12120   &pbobble_get_ctrl_name
12121 };
12122 
pbobble_get_ctrl_name(int type)12123 const char *pbobble_get_ctrl_name(int type)
12124 {
12125   switch(type)
12126   {
12127     case IPT_BUTTON1: return BTN1 "Shoot";
12128   } /* end of switch */
12129 
12130   return joy2way_labels(type);
12131 }
12132 
12133 const struct ControlInfo pbobble2_ctrl =
12134 {
12135   false, /* 45_degree_rotation for joystick(s) */
12136   false, /* alternating_controls */
12137   true, /* mirrored_controls */
12138   "Puzzle Bobble 2 is listed as using an 8-way joystick and 4 buttons, though only left, right and 1 button are used for gameplay. Up, down and buttons 2 and 3 are only used during Test Mode. I can find no references to button 4.", /* control_details */
12139   &pbobble2_get_ctrl_name
12140 };
12141 
pbobble2_get_ctrl_name(int type)12142 const char *pbobble2_get_ctrl_name(int type)
12143 {
12144   switch(type)
12145   {
12146     case IPT_BUTTON1: return BTN1 "Fire";
12147     case IPT_BUTTON2: return BTN2 "NA";
12148     case IPT_BUTTON3: return BTN3 "NA";
12149     case IPT_BUTTON4: return BTN4 "NA";
12150   } /* end of switch */
12151 
12152   return joy4way_labels(type);
12153 }
12154 
12155 const struct ControlInfo pbobble3_ctrl =
12156 {
12157   false, /* 45_degree_rotation for joystick(s) */
12158   false, /* alternating_controls */
12159   true, /* mirrored_controls */
12160   "Mame lists Puzzle Bobble 3 as having 4 buttons and an 8-way joystick (because it is a Taito F3 System game) /* control_details */ only one button is used during gameplay, Test Mode lists 3 buttons. Only left and right are used during gameplay, up and down are used during Test Mode. I can find no references to button 4.", /* control_details */
12161   &pbobble3_get_ctrl_name
12162 };
12163 
pbobble3_get_ctrl_name(int type)12164 const char *pbobble3_get_ctrl_name(int type)
12165 {
12166   switch(type)
12167   {
12168     case IPT_BUTTON1: return BTN1 "Shoot";
12169     case IPT_BUTTON2: return BTN2 "NA";
12170     case IPT_BUTTON3: return BTN3 "NA";
12171     case IPT_BUTTON4: return BTN4 "NA";
12172   } /* end of switch */
12173 
12174   return joy4way_labels(type);
12175 }
12176 
12177 const struct ControlInfo qix_ctrl =
12178 {
12179   false, /* 45_degree_rotation for joystick(s) */
12180   true, /* alternating_controls */
12181   true, /* mirrored_controls */
12182   "", /* control_details */
12183   &qix_get_ctrl_name
12184 };
12185 
qix_get_ctrl_name(int type)12186 const char *qix_get_ctrl_name(int type)
12187 {
12188   switch(type)
12189   {
12190     case IPT_BUTTON1: return BTN1 "Fast Draw";
12191     case IPT_BUTTON2: return BTN2 "Slow Draw";
12192   } /* end of switch */
12193 
12194   return joy4way_labels(type);
12195 }
12196 
12197 const struct ControlInfo quantum_ctrl =
12198 {
12199   false, /* 45_degree_rotation for joystick(s) */
12200   true, /* alternating_controls */
12201   true, /* mirrored_controls */
12202   "This game did not use buttons, the only input is a trackball.", /* control_details */
12203   &quantum_get_ctrl_name
12204 };
12205 
quantum_get_ctrl_name(int type)12206 const char *quantum_get_ctrl_name(int type)
12207 {
12208   switch(type)
12209   {
12210     case IPT_TRACKBALL_X: return "Left";
12211     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
12212     case IPT_TRACKBALL_Y: return "Up";
12213     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
12214   } /* end of switch */
12215 
12216   return "";
12217 }
12218 
12219 #if 0
12220 const struct ControlInfo quarterb_ctrl =
12221 {
12222   false, /* 45_degree_rotation for joystick(s) */
12223   false, /* alternating_controls */
12224   false, /* mirrored_controls */
12225   "Note that the buttons do various things based on the gameplay scenario. Also both buttons were labeled 'Action' so 'A' and 'B' were added to avoid confusion. Also the kicker only labeled the three actions it is used for, not how to aim, ect. This was added for your benefit.", /* control_details */
12226   &quarterb_get_ctrl_name
12227 };
12228 
12229 const char *quarterb_get_ctrl_name(int type)
12230 {
12231   switch(type)
12232   {
12233     case (IPT_BUTTON1 | IPF_PLAYER2): return "Action A";
12234     case (IPT_BUTTON2 | IPF_PLAYER2): return "Action B";
12235     case IPT_JOYSTICK_UP: return "Up";
12236     case IPT_JOYSTICK_DOWN: return "Down";
12237     case IPT_JOYSTICK_LEFT: return "Left";
12238     case IPT_JOYSTICK_RIGHT: return "Right";
12239     case IPT_BUTTON1: return BTN1 "Action A";
12240     case IPT_BUTTON2: return BTN2 "Action B";
12241     case IPT_JOYSTICK_UP: return "Up";
12242     case IPT_JOYSTICK_DOWN: return "Down";
12243     case IPT_JOYSTICK_LEFT: return "Left";
12244     case IPT_JOYSTICK_RIGHT: return "Right";
12245     case IPT_AD_STICK_X: return "Aim Left";
12246     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Aim Right";
12247     case IPT_AD_STICK_Y: return "Pass / Punt / Kick";
12248     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Set Power";
12249   } /* end of switch */
12250 
12251   return "";
12252 }
12253 #endif
12254 
12255 const struct ControlInfo quartet_ctrl =
12256 {
12257   false, /* 45_degree_rotation for joystick(s) */
12258   false, /* alternating_controls */
12259   true, /* mirrored_controls */
12260   "Ironically this game is also available in a 2 player variety. Wouldn't that make it a duo?", /* control_details */
12261   &quartet_get_ctrl_name
12262 };
12263 
quartet_get_ctrl_name(int type)12264 const char *quartet_get_ctrl_name(int type)
12265 {
12266   switch(type)
12267   {
12268     case IPT_BUTTON1: return BTN1 "Jump / Start";
12269     case IPT_BUTTON2: return BTN2 "Shoot";
12270   } /* end of switch */
12271 
12272   return joy4way_labels(type);
12273 }
12274 
12275 const struct ControlInfo quasar_ctrl =
12276 {
12277   false, /* 45_degree_rotation for joystick(s) */
12278   true, /* alternating_controls */
12279   true, /* mirrored_controls */
12280   "The 'forward' button appears to be broken in mame.", /* control_details */
12281   &quasar_get_ctrl_name
12282 };
12283 
quasar_get_ctrl_name(int type)12284 const char *quasar_get_ctrl_name(int type)
12285 {
12286   switch(type)
12287   {
12288     case IPT_BUTTON1: return BTN1 "Fire";
12289     case IPT_BUTTON2: return BTN2 "Forward";
12290   } /* end of switch */
12291 
12292   return joy2way_labels(type);
12293 }
12294 
12295 const struct ControlInfo qad_ctrl =
12296 {
12297   false, /* 45_degree_rotation for joystick(s) */
12298   false, /* alternating_controls */
12299   true, /* mirrored_controls */
12300   "You may wonder why the control type is listed as 'Just Buttons' instead of 'Trivia Buttons'. This is one of the few arcade trivia games that doesn't use trivia-style buttons. It uses standard pushbuttons.", /* control_details */
12301   &qad_get_ctrl_name
12302 };
12303 
qad_get_ctrl_name(int type)12304 const char *qad_get_ctrl_name(int type)
12305 {
12306   switch(type)
12307   {
12308     case IPT_BUTTON1: return BTN1 "1";
12309     case IPT_BUTTON2: return BTN2 "2";
12310     case IPT_BUTTON3: return BTN3 "3";
12311     case IPT_BUTTON4: return BTN4 "4";
12312   } /* end of switch */
12313 
12314   return "";
12315 }
12316 
12317 const struct ControlInfo qndream_ctrl =
12318 {
12319   false, /* 45_degree_rotation for joystick(s) */
12320   false, /* alternating_controls */
12321   true, /* mirrored_controls */
12322   "Like all capcom quiz games, this game's cp uses regular push buttons instead of trivia-style buttons.", /* control_details */
12323   &qndream_get_ctrl_name
12324 };
12325 
qndream_get_ctrl_name(int type)12326 const char *qndream_get_ctrl_name(int type)
12327 {
12328   switch(type)
12329   {
12330     case IPT_BUTTON1: return BTN1 "1";
12331     case IPT_BUTTON2: return BTN2 "2";
12332     case IPT_BUTTON3: return BTN3 "3";
12333     case IPT_BUTTON4: return BTN4 "4";
12334   } /* end of switch */
12335 
12336   return "";
12337 }
12338 
12339 const struct ControlInfo rtype_ctrl =
12340 {
12341   false, /* 45_degree_rotation for joystick(s) */
12342   true, /* alternating_controls */
12343   true, /* mirrored_controls */
12344   "The longer you hold down the fire button, the stronger the shot. The force button 'shoots' or recalls a power-up piece from and to your ship. Mame has four buttons for this game for some reason, but only uses the first two. The game has the fire and force buttons on both sides of the joystick, but not 'mirrored': the force is to the left of the fire button on both sides of the joystick. NOTE  In Mame this game actually has four buttons. This is due to some sloppy code and nothing more. The dipswitches between this game and a similar game running on the same system were identical, so the input function was simply re-routed to that game. This needs to be removed asap.", /* control_details */
12345   &rtype_get_ctrl_name
12346 };
12347 
rtype_get_ctrl_name(int type)12348 const char *rtype_get_ctrl_name(int type)
12349 {
12350   switch(type)
12351   {
12352     case IPT_BUTTON1: return BTN1 "Fire";
12353     case IPT_BUTTON2: return BTN2 "Force";
12354   } /* end of switch */
12355 
12356   return joy4way_labels(type);
12357 }
12358 
12359 const struct ControlInfo radarscp_ctrl =
12360 {
12361   false, /* 45_degree_rotation for joystick(s) */
12362   true, /* alternating_controls */
12363   true, /* mirrored_controls */
12364   "Note by HowardC:  As of mame version .77 this game should us a 2-way stick. If it doesn't contact me.", /* control_details */
12365   &radarscp_get_ctrl_name
12366 };
12367 
radarscp_get_ctrl_name(int type)12368 const char *radarscp_get_ctrl_name(int type)
12369 {
12370   switch(type)
12371   {
12372     case IPT_BUTTON1: return BTN1 "Fire";
12373   } /* end of switch */
12374 
12375   return joy2way_labels(type);
12376 }
12377 
12378 const struct ControlInfo radrad_ctrl =
12379 {
12380   false, /* 45_degree_rotation for joystick(s) */
12381   true, /* alternating_controls */
12382   true, /* mirrored_controls */
12383   "", /* control_details */
12384   &radrad_get_ctrl_name
12385 };
12386 
radrad_get_ctrl_name(int type)12387 const char *radrad_get_ctrl_name(int type)
12388 {
12389   switch(type)
12390   {
12391     case IPT_BUTTON1: return BTN1 "Shoot";
12392   } /* end of switch */
12393 
12394   return joy4way_labels(type);
12395 }
12396 
12397 const struct ControlInfo rchase_ctrl =
12398 {
12399   false, /* 45_degree_rotation for joystick(s) */
12400   false, /* alternating_controls */
12401   true, /* mirrored_controls */
12402   "The game didn't have a gun, rather a joystick with a crosshair on the screen. The machine also had a bench the players sat on with two solenoids mounted underneath to give the illusion of them sitting in the mine cart.", /* control_details */
12403   &rchase_get_ctrl_name
12404 };
12405 
rchase_get_ctrl_name(int type)12406 const char *rchase_get_ctrl_name(int type)
12407 {
12408   switch(type)
12409   {
12410     case IPT_BUTTON1: return BTN1 "Fire";
12411     case IPT_LIGHTGUN_X: return "Aim Left";
12412     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
12413     case IPT_LIGHTGUN_Y: return "Aim Up";
12414     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
12415   } /* end of switch */
12416 
12417   return "";
12418 }
12419 
12420 const struct ControlInfo rainbow_ctrl =
12421 {
12422   false, /* 45_degree_rotation for joystick(s) */
12423   true, /* alternating_controls */
12424   true, /* mirrored_controls */
12425   "", /* control_details */
12426   &rainbow_get_ctrl_name
12427 };
12428 
rainbow_get_ctrl_name(int type)12429 const char *rainbow_get_ctrl_name(int type)
12430 {
12431   switch(type)
12432   {
12433     case IPT_BUTTON1: return BTN1 "Rainbow";
12434     case IPT_BUTTON2: return BTN2 "Jump";
12435   } /* end of switch */
12436 
12437   return joy2way_labels(type);
12438 }
12439 
12440 const struct ControlInfo rallyx_ctrl =
12441 {
12442   false, /* 45_degree_rotation for joystick(s) */
12443   true, /* alternating_controls */
12444   true, /* mirrored_controls */
12445   "", /* control_details */
12446   &rallyx_get_ctrl_name
12447 };
12448 
rallyx_get_ctrl_name(int type)12449 const char *rallyx_get_ctrl_name(int type)
12450 {
12451   switch(type)
12452   {
12453     case IPT_BUTTON1: return BTN1 "Smoke Screen";
12454     case IPT_JOYSTICK_DOWN: return "Down";
12455     case IPT_JOYSTICK_UP: return "Up";
12456   } /* end of switch */
12457 
12458   return joy2way_labels(type);
12459 }
12460 
12461 const struct ControlInfo rampage_ctrl =
12462 {
12463   false, /* 45_degree_rotation for joystick(s) */
12464   false, /* alternating_controls */
12465   true, /* mirrored_controls */
12466   "", /* control_details */
12467   &rampage_get_ctrl_name
12468 };
12469 
rampage_get_ctrl_name(int type)12470 const char *rampage_get_ctrl_name(int type)
12471 {
12472   switch(type)
12473   {
12474     case IPT_BUTTON1: return BTN1 "Punch";
12475     case IPT_BUTTON2: return BTN2 "Jump";
12476     case IPT_JOYSTICK_UP: return "Climb";
12477     case IPT_JOYSTICK_DOWN: return "Down";
12478     case IPT_JOYSTICK_LEFT: return "Left";
12479     case IPT_JOYSTICK_RIGHT: return "Right";
12480   } /* end of switch */
12481 
12482   return "";
12483 }
12484 
12485 const struct ControlInfo rmpgwt_ctrl =
12486 {
12487   false, /* 45_degree_rotation for joystick(s) */
12488   false, /* alternating_controls */
12489   true, /* mirrored_controls */
12490   "The tilt in mame does not work.", /* control_details */
12491   &rmpgwt_get_ctrl_name
12492 };
12493 
rmpgwt_get_ctrl_name(int type)12494 const char *rmpgwt_get_ctrl_name(int type)
12495 {
12496   switch(type)
12497   {
12498     case IPT_BUTTON1: return BTN1 "Jump";
12499     case IPT_BUTTON2: return BTN2 "Punch";
12500     case IPT_BUTTON3: return BTN3 "Kick";
12501   } /* end of switch */
12502 
12503   return joy4way_labels(type);
12504 }
12505 
12506 const struct ControlInfo rampart_ctrl =
12507 {
12508   false, /* 45_degree_rotation for joystick(s) */
12509   false, /* alternating_controls */
12510   true, /* mirrored_controls */
12511   "The player's Place Piece/Fire button is also the start button. There are three basic different CP layouts for this game: 3 player trackball, 2 player trackball (dipswitch with same ROM as 3 player TB), and 2 player 8-way joystick (with ramprt2p and rampartj). The 3 player dedicated TB CP had two buttons per player on the left side of the TB. The kit highly recomends mirroring the buttons on both sides the joystick, with two buttons wired to each button input, but this was not always followed. Button2 (Rotate Peice/Fire) is labeled as the 3 player TB CP /* control_details */ for the joystick CP, this button was 'Rotate Piece/Speed Up' instead to give the joystick two movement speeds in the shooting part of the game.", /* control_details */
12512   &rampart_get_ctrl_name
12513 };
12514 
rampart_get_ctrl_name(int type)12515 const char *rampart_get_ctrl_name(int type)
12516 {
12517   switch(type)
12518   {
12519     case IPT_BUTTON1: return BTN1 "Place Piece/Fire/Start";
12520     case IPT_BUTTON2: return BTN2 "Rotate Piece/Fire";
12521     case IPT_TRACKBALL_X: return "Left";
12522     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
12523     case IPT_TRACKBALL_Y: return "Up";
12524     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
12525   } /* end of switch */
12526 
12527   return "";
12528 }
12529 
12530 const struct ControlInfo rastan_ctrl =
12531 {
12532   false, /* 45_degree_rotation for joystick(s) */
12533   true, /* alternating_controls */
12534   true, /* mirrored_controls */
12535   "Joystick in center of Panel, with attack and jump buttons on both sides, for both left and right handed players. Player start buttons were on RIGHT side of CP, with P1 at top, and P2 at bottom", /* control_details */
12536   &rastan_get_ctrl_name
12537 };
12538 
rastan_get_ctrl_name(int type)12539 const char *rastan_get_ctrl_name(int type)
12540 {
12541   switch(type)
12542   {
12543     case IPT_BUTTON1: return BTN1 "Attack";
12544     case IPT_BUTTON2: return BTN2 "Jump";
12545   } /* end of switch */
12546 
12547   return joy4way_labels(type);
12548 }
12549 
12550 const struct ControlInfo reactor_ctrl =
12551 {
12552   false, /* 45_degree_rotation for joystick(s) */
12553   true, /* alternating_controls */
12554   true, /* mirrored_controls */
12555   "The action buttons are 'mirrored' on both sides of the trackball like normal, and double as start buttons. However, the start half of the buttons are not mirrored: the start buttons go 1 2 1 2 from left to right, and the left side start buttons give you 3 ships for one credit, while the right side buttons give you 7 ships for two credits. So the layout, from left to right, is (energy / 1 player with 3 ships), (decoy / 2 players with 3 ships each), trackball, (decoy / 1 player with 7 ships), (energy / 2 players with 7 ships each). Mame's emulated buttons go start1, start2, trackball, p1 button2, p1 button1, following the above layout. So the start buttons are also action buttons, and the action buttons are start buttons, but they are 4 different buttons, even though there are two different actions.", /* control_details */
12556   &reactor_get_ctrl_name
12557 };
12558 
reactor_get_ctrl_name(int type)12559 const char *reactor_get_ctrl_name(int type)
12560 {
12561   switch(type)
12562   {
12563     case IPT_BUTTON1: return BTN1 "Energy";
12564     case IPT_BUTTON2: return BTN2 "Decoy";
12565     case IPT_TRACKBALL_X: return "Left";
12566     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
12567     case IPT_TRACKBALL_Y: return "Up";
12568     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
12569   } /* end of switch */
12570 
12571   return "";
12572 }
12573 
12574 const struct ControlInfo redlin2p_ctrl =
12575 {
12576   false, /* 45_degree_rotation for joystick(s) */
12577   false, /* alternating_controls */
12578   true, /* mirrored_controls */
12579   "", /* control_details */
12580   &redlin2p_get_ctrl_name
12581 };
12582 
redlin2p_get_ctrl_name(int type)12583 const char *redlin2p_get_ctrl_name(int type)
12584 {
12585   switch(type)
12586   {
12587     case IPT_DIAL: return "Left";
12588     case (IPT_DIAL + IPT_EXTENSION): return "Right";
12589     case IPT_PEDAL: return "Accelerate";
12590   } /* end of switch */
12591 
12592   return "";
12593 }
12594 
12595 const struct ControlInfo regulus_ctrl =
12596 {
12597   false, /* 45_degree_rotation for joystick(s) */
12598   true, /* alternating_controls */
12599   true, /* mirrored_controls */
12600   "This game doesn't have any labels, probably because the controls are so self-explainatory.", /* control_details */
12601   &regulus_get_ctrl_name
12602 };
12603 
regulus_get_ctrl_name(int type)12604 const char *regulus_get_ctrl_name(int type)
12605 {
12606   switch(type)
12607   {
12608     case IPT_BUTTON1: return BTN1 "Fire";
12609     case IPT_BUTTON2: return BTN2 "Bomb";
12610   } /* end of switch */
12611 
12612   return joy4way_labels(type);
12613 }
12614 
12615 const struct ControlInfo renegade_ctrl =
12616 {
12617   false, /* 45_degree_rotation for joystick(s) */
12618   true, /* alternating_controls */
12619   true, /* mirrored_controls */
12620   "", /* control_details */
12621   &renegade_get_ctrl_name
12622 };
12623 
renegade_get_ctrl_name(int type)12624 const char *renegade_get_ctrl_name(int type)
12625 {
12626   switch(type)
12627   {
12628     case IPT_BUTTON1: return BTN1 "Attack Left";
12629     case IPT_BUTTON2: return BTN2 "Jump";
12630     case IPT_BUTTON3: return BTN3 "Attack Right";
12631   } /* end of switch */
12632 
12633   return joy4way_labels(type);
12634 }
12635 
12636 const struct ControlInfo rescue_ctrl =
12637 {
12638   false, /* 45_degree_rotation for joystick(s) */
12639   true, /* alternating_controls */
12640   true, /* mirrored_controls */
12641   "", /* control_details */
12642   &rescue_get_ctrl_name
12643 };
12644 
rescue_get_ctrl_name(int type)12645 const char *rescue_get_ctrl_name(int type)
12646 {
12647   switch(type)
12648   {
12649     case IPT_BUTTON1: return BTN1 "Bomb";
12650     case IPT_JOYSTICKLEFT_UP: return "Up";
12651     case IPT_JOYSTICKLEFT_DOWN: return "Down";
12652     case IPT_JOYSTICKLEFT_LEFT: return "Left";
12653     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
12654     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
12655     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
12656     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
12657     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
12658   } /* end of switch */
12659 
12660   return "";
12661 }
12662 
12663 const struct ControlInfo rescraid_ctrl =
12664 {
12665   false, /* 45_degree_rotation for joystick(s) */
12666   true, /* alternating_controls */
12667   true, /* mirrored_controls */
12668   "The CP has the steering stick on the left side, shooting stick on the right. Mame has it emulated the opposite, so the labels are not mixed up.", /* control_details */
12669   &rescraid_get_ctrl_name
12670 };
12671 
rescraid_get_ctrl_name(int type)12672 const char *rescraid_get_ctrl_name(int type)
12673 {
12674   switch(type)
12675   {
12676     case IPT_BUTTON1: return BTN1 "Select Weapons";
12677     case IPT_JOYSTICKLEFT_UP: return "Shooting Up";
12678     case IPT_JOYSTICKLEFT_DOWN: return "Shooting Down";
12679     case IPT_JOYSTICKLEFT_LEFT: return "Shooting Left";
12680     case IPT_JOYSTICKLEFT_RIGHT: return "Shooting Right";
12681     case IPT_JOYSTICKRIGHT_UP: return "Steering Up";
12682     case IPT_JOYSTICKRIGHT_DOWN: return "Steering Down";
12683     case IPT_JOYSTICKRIGHT_LEFT: return "Steering Left";
12684     case IPT_JOYSTICKRIGHT_RIGHT: return "Steering Right";
12685   } /* end of switch */
12686 
12687   return "";
12688 }
12689 
12690 const struct ControlInfo jedi_ctrl =
12691 {
12692   false, /* 45_degree_rotation for joystick(s) */
12693   false, /* alternating_controls */
12694   true, /* mirrored_controls */
12695   "Triggers fire cannon on all levels. Thumb buttons usually also fire cannon, except on the AT-Walker stages, where they rotate the turret.", /* control_details */
12696   &jedi_get_ctrl_name
12697 };
12698 
jedi_get_ctrl_name(int type)12699 const char *jedi_get_ctrl_name(int type)
12700 {
12701   switch(type)
12702   {
12703     case IPT_BUTTON1: return BTN1 "Fire / Rotate Left";
12704     case IPT_BUTTON2: return BTN2 "Fire";
12705     case IPT_BUTTON3: return BTN3 "Fire / Rotate Right";
12706     case IPT_AD_STICK_Y: return "Up";
12707     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
12708     case IPT_AD_STICK_X: return "Left";
12709     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
12710   } /* end of switch */
12711 
12712   return "";
12713 }
12714 
12715 const struct ControlInfo revx_ctrl =
12716 {
12717   false, /* 45_degree_rotation for joystick(s) */
12718   false, /* alternating_controls */
12719   true, /* mirrored_controls */
12720   "The 'bomb' button actually shoots a compact disc. But that's what it is labeled in the game.", /* control_details */
12721   &revx_get_ctrl_name
12722 };
12723 
revx_get_ctrl_name(int type)12724 const char *revx_get_ctrl_name(int type)
12725 {
12726   switch(type)
12727   {
12728     case IPT_BUTTON1: return BTN1 "Fire";
12729     case IPT_BUTTON2: return BTN2 "Bomb";
12730     case IPT_LIGHTGUN_X: return "Aim Left";
12731     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
12732     case IPT_LIGHTGUN_Y: return "Aim Up";
12733     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
12734   } /* end of switch */
12735 
12736   return "";
12737 }
12738 
12739 const struct ControlInfo ripoff_ctrl =
12740 {
12741   false, /* 45_degree_rotation for joystick(s) */
12742   false, /* alternating_controls */
12743   true, /* mirrored_controls */
12744   "This is a two player cooperative game. You cannot shoot the other player, but if you crash into him, you both blow up. Prevent the small tanks from stealing the triangular fuel pods by shooting them. The game ends when all the pods are gone.", /* control_details */
12745   &ripoff_get_ctrl_name
12746 };
12747 
ripoff_get_ctrl_name(int type)12748 const char *ripoff_get_ctrl_name(int type)
12749 {
12750   switch(type)
12751   {
12752     case IPT_BUTTON1: return BTN1 "Fire";
12753     case IPT_BUTTON2: return BTN2 "Forward";
12754   } /* end of switch */
12755 
12756   return joy2way_labels(type);
12757 }
12758 
12759 const struct ControlInfo roadblst_ctrl =
12760 {
12761   false, /* 45_degree_rotation for joystick(s) */
12762   false, /* alternating_controls */
12763   false, /* mirrored_controls */
12764   "Steering wheel is unique in that it uses optics but is restricted to ~270 degrees, and it returns to the center position using springs. Also, it has 2 triggers (Fire Lasers), and 2 thumb buttons (Activate Special Weapon). Each trigger / thumb button does the same action.", /* control_details */
12765   &roadblst_get_ctrl_name
12766 };
12767 
roadblst_get_ctrl_name(int type)12768 const char *roadblst_get_ctrl_name(int type)
12769 {
12770   switch(type)
12771   {
12772     case IPT_BUTTON1: return BTN1 "Fire Lasers";
12773     case IPT_BUTTON2: return BTN2 "Activate Special Weapon";
12774     case (IPT_DIAL + IPT_EXTENSION): return "Right";
12775     case IPT_DIAL: return "Left";
12776     case IPT_PEDAL: return "Accelerate";
12777   } /* end of switch */
12778 
12779   return "";
12780 }
12781 
12782 const struct ControlInfo roadf_ctrl =
12783 {
12784   false, /* 45_degree_rotation for joystick(s) */
12785   true, /* alternating_controls */
12786   true, /* mirrored_controls */
12787   "Game used a joystick and two pushbuttons for Low Gear and High Gear. No Shifter. High Gear cannot be pressed until the car has started and built up some RPM's.", /* control_details */
12788   &roadf_get_ctrl_name
12789 };
12790 
roadf_get_ctrl_name(int type)12791 const char *roadf_get_ctrl_name(int type)
12792 {
12793   switch(type)
12794   {
12795     case IPT_BUTTON1: return BTN1 "Low Gear";
12796     case IPT_BUTTON2: return BTN2 "High Gear";
12797     case IPT_JOYSTICK_UP: return "Speed Up";
12798     case IPT_JOYSTICK_DOWN: return "Slow Down";
12799     case IPT_JOYSTICK_LEFT: return "Left";
12800     case IPT_JOYSTICK_RIGHT: return "Right";
12801   } /* end of switch */
12802 
12803   return "";
12804 }
12805 
12806 const struct ControlInfo roadrunn_ctrl =
12807 {
12808   false, /* 45_degree_rotation for joystick(s) */
12809   true, /* alternating_controls */
12810   true, /* mirrored_controls */
12811   "Mame includes buttons 2 & 3, but they are not used. The original game has the hop button mirrored on both sides of the joystick. The left side jump button is also 1 player start button /* control_details */ mame emulates this as two buttons, button1 and start1. The right side hop button is also 2 players start button; mame emulates this as only the 'start2' button, even though pressing mame's start2 button also makes RoadRunner hop. The original joystick was a Hall Effect joystick: an analog joystick that used magnetics to vary the resistance instead of the usual POT.", /* control_details */
12812   &roadrunn_get_ctrl_name
12813 };
12814 
roadrunn_get_ctrl_name(int type)12815 const char *roadrunn_get_ctrl_name(int type)
12816 {
12817   switch(type)
12818   {
12819     case IPT_BUTTON1: return BTN1 "Hop";
12820     case IPT_BUTTON2: return BTN2 "??not used";
12821     case IPT_BUTTON3: return BTN3 "??not used";
12822     case IPT_AD_STICK_X: return "Left";
12823     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
12824     case IPT_AD_STICK_Y: return "Up";
12825     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
12826   } /* end of switch */
12827 
12828   return "";
12829 }
12830 
12831 const struct ControlInfo robby_ctrl =
12832 {
12833   false, /* 45_degree_rotation for joystick(s) */
12834   true, /* alternating_controls */
12835   true, /* mirrored_controls */
12836   "", /* control_details */
12837   &robby_get_ctrl_name
12838 };
12839 
robby_get_ctrl_name(int type)12840 const char *robby_get_ctrl_name(int type)
12841 {
12842   switch(type)
12843   {
12844     case IPT_BUTTON1: return BTN1 "Magic";
12845     case IPT_JOYSTICK_UP: return "Move Up";
12846     case IPT_JOYSTICK_DOWN: return "Move Down";
12847     case IPT_JOYSTICK_LEFT: return "Move Left";
12848     case IPT_JOYSTICK_RIGHT: return "Move Right";
12849   } /* end of switch */
12850 
12851   return "";
12852 }
12853 
12854 const struct ControlInfo robocop_ctrl =
12855 {
12856   false, /* 45_degree_rotation for joystick(s) */
12857   true, /* alternating_controls */
12858   true, /* mirrored_controls */
12859   "", /* control_details */
12860   &robocop_get_ctrl_name
12861 };
12862 
robocop_get_ctrl_name(int type)12863 const char *robocop_get_ctrl_name(int type)
12864 {
12865   switch(type)
12866   {
12867     case IPT_BUTTON1: return BTN1 "Shoot/Punch";
12868     case IPT_BUTTON2: return BTN2 "Jump";
12869   } /* end of switch */
12870 
12871   return joy4way_labels(type);
12872 }
12873 
12874 const struct ControlInfo robocop2_ctrl =
12875 {
12876   false, /* 45_degree_rotation for joystick(s) */
12877   false, /* alternating_controls */
12878   true, /* mirrored_controls */
12879   "", /* control_details */
12880   &robocop2_get_ctrl_name
12881 };
12882 
robocop2_get_ctrl_name(int type)12883 const char *robocop2_get_ctrl_name(int type)
12884 {
12885   switch(type)
12886   {
12887     case IPT_BUTTON1: return BTN1 "Shoot Left";
12888     case IPT_BUTTON2: return BTN2 "Shoot Right";
12889     case IPT_BUTTON3: return BTN3 "Jump";
12890   } /* end of switch */
12891 
12892   return joy4way_labels(type);
12893 }
12894 
12895 const struct ControlInfo robotron_ctrl =
12896 {
12897   false, /* 45_degree_rotation for joystick(s) */
12898   true, /* alternating_controls */
12899   true, /* mirrored_controls */
12900   "The drivers in mame don't have a cocktail mode, but klov shows a cocktail cab, and the robotron drawing set shows two (cocktail) sets of dual joysticks.", /* control_details */
12901   &robotron_get_ctrl_name
12902 };
12903 
robotron_get_ctrl_name(int type)12904 const char *robotron_get_ctrl_name(int type)
12905 {
12906   switch(type)
12907   {
12908     case IPT_JOYSTICKLEFT_UP:     return "Move Up";
12909     case IPT_JOYSTICKLEFT_DOWN:   return "Move Down";
12910     case IPT_JOYSTICKLEFT_LEFT:   return "Move Left";
12911     case IPT_JOYSTICKLEFT_RIGHT:  return "Move Right";
12912     case IPT_JOYSTICKRIGHT_UP:    return "Fire Up";
12913     case IPT_JOYSTICKRIGHT_DOWN:  return "Fire Down";
12914     case IPT_JOYSTICKRIGHT_LEFT:  return "Fire Left";
12915     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
12916   } /* end of switch */
12917 
12918   return "";
12919 }
12920 
12921 const struct ControlInfo rocnrope_ctrl =
12922 {
12923   false, /* 45_degree_rotation for joystick(s) */
12924   true, /* alternating_controls */
12925   true, /* mirrored_controls */
12926   "", /* control_details */
12927   &rocnrope_get_ctrl_name
12928 };
12929 
rocnrope_get_ctrl_name(int type)12930 const char *rocnrope_get_ctrl_name(int type)
12931 {
12932   switch(type)
12933   {
12934     case IPT_BUTTON1: return BTN1 "Rope";
12935     case IPT_BUTTON2: return BTN2 "Flash";
12936   } /* end of switch */
12937 
12938   return joy4way_labels(type);
12939 }
12940 
12941 const struct ControlInfo rollerg_ctrl =
12942 {
12943   false, /* 45_degree_rotation for joystick(s) */
12944   false, /* alternating_controls */
12945   true, /* mirrored_controls */
12946   "The two buttons have other uses besides those labeled, but you will be prompted on how to use them during gameplay.", /* control_details */
12947   &rollerg_get_ctrl_name
12948 };
12949 
rollerg_get_ctrl_name(int type)12950 const char *rollerg_get_ctrl_name(int type)
12951 {
12952   switch(type)
12953   {
12954     case IPT_BUTTON1: return BTN1 "Attack";
12955     case IPT_BUTTON2: return BTN2 "Jump";
12956   } /* end of switch */
12957 
12958   return joy4way_labels(type);
12959 }
12960 
12961 const struct ControlInfo rthunder_ctrl =
12962 {
12963   false, /* 45_degree_rotation for joystick(s) */
12964   true, /* alternating_controls */
12965   true, /* mirrored_controls */
12966   "The buttons are mirrored on both sides of the joystick. There are three settings for the type of control panel: 'Type A Upright' (1 joystick, alternating), 'Type B Cocktail--no flip' (2 joysticks, alternating), and 'Type C Cocktail--flip' (2 joysticks, alternating). Those with normal 2 joystick upright cabs will be happy with the Type B setting.", /* control_details */
12967   &rthunder_get_ctrl_name
12968 };
12969 
rthunder_get_ctrl_name(int type)12970 const char *rthunder_get_ctrl_name(int type)
12971 {
12972   switch(type)
12973   {
12974     case IPT_BUTTON1: return BTN1 "Shoot";
12975     case IPT_BUTTON2: return BTN2 "Jump";
12976   } /* end of switch */
12977 
12978   return joy4way_labels(type);
12979 }
12980 
12981 const struct ControlInfo rranger_ctrl =
12982 {
12983   false, /* 45_degree_rotation for joystick(s) */
12984   false, /* alternating_controls */
12985   true, /* mirrored_controls */
12986   "The original cpo used icons, but they are very cryptic. 'Shoot' sported a rather understandable gun icon, but 'Jump' had an icon of overlapping up and down arrows.", /* control_details */
12987   &rranger_get_ctrl_name
12988 };
12989 
rranger_get_ctrl_name(int type)12990 const char *rranger_get_ctrl_name(int type)
12991 {
12992   switch(type)
12993   {
12994     case IPT_BUTTON1: return BTN1 "Jump";
12995     case IPT_BUTTON2: return BTN2 "Shoot";
12996   } /* end of switch */
12997 
12998   return joy4way_labels(type);
12999 }
13000 
13001 const struct ControlInfo roundup_ctrl =
13002 {
13003   false, /* 45_degree_rotation for joystick(s) */
13004   true, /* alternating_controls */
13005   true, /* mirrored_controls */
13006   "The original panel has the same button either side of the joystick so can be played with either hand", /* control_details */
13007   &roundup_get_ctrl_name
13008 };
13009 
roundup_get_ctrl_name(int type)13010 const char *roundup_get_ctrl_name(int type)
13011 {
13012   switch(type)
13013   {
13014     case IPT_BUTTON1: return BTN1 "Cube Color Select";
13015   } /* end of switch */
13016 
13017   return joy4way_labels(type);
13018 }
13019 
13020 const struct ControlInfo rungun_ctrl =
13021 {
13022   false, /* 45_degree_rotation for joystick(s) */
13023   false, /* alternating_controls */
13024   true, /* mirrored_controls */
13025   "Please note that although all 4 player inputs are in mame you can NOT play a 2 on 2 game. The original 4-player cab was actually two cabinets linked together. Since mame doesn't emulate the link or the second monitor, this game is 2 player only.", /* control_details */
13026   &rungun_get_ctrl_name
13027 };
13028 
rungun_get_ctrl_name(int type)13029 const char *rungun_get_ctrl_name(int type)
13030 {
13031   switch(type)
13032   {
13033     case IPT_BUTTON1: return BTN1 "A";
13034     case IPT_BUTTON2: return BTN2 "B";
13035     case IPT_BUTTON3: return BTN3 "C";
13036   } /* end of switch */
13037 
13038   return joy4way_labels(type);
13039 }
13040 
13041 const struct ControlInfo runaway_ctrl =
13042 {
13043   false, /* 45_degree_rotation for joystick(s) */
13044   true, /* alternating_controls */
13045   true, /* mirrored_controls */
13046   "The hi / low shifter was actually a plastic switch, but it operates just like a high / low shifter in mame so it's mapped it to that. The jump button was unlabeled on the original cpo.", /* control_details */
13047   &runaway_get_ctrl_name
13048 };
13049 
runaway_get_ctrl_name(int type)13050 const char *runaway_get_ctrl_name(int type)
13051 {
13052   switch(type)
13053   {
13054     case IPT_BUTTON1: return BTN1 "Switcher";
13055     case IPT_BUTTON2: return BTN2 "Jump";
13056     case IPT_BUTTON3: return BTN3 "Forward / Reverse";
13057   } /* end of switch */
13058 
13059   return "";
13060 }
13061 
13062 const struct ControlInfo stunrun_ctrl =
13063 {
13064   false, /* 45_degree_rotation for joystick(s) */
13065   false, /* alternating_controls */
13066   false, /* mirrored_controls */
13067   "Even though the yoke's buttons have seperate inputs, they seem to both perform the same function.", /* control_details */
13068   &stunrun_get_ctrl_name
13069 };
13070 
stunrun_get_ctrl_name(int type)13071 const char *stunrun_get_ctrl_name(int type)
13072 {
13073   switch(type)
13074   {
13075     case IPT_BUTTON1: return BTN1 "Fire (left)";
13076     case IPT_BUTTON2: return BTN2 "Fire (right)";
13077     case IPT_AD_STICK_X: return "Left";
13078     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
13079     case IPT_AD_STICK_Y: return "Up";
13080     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
13081   } /* end of switch */
13082 
13083   return "";
13084 }
13085 
13086 const struct ControlInfo salamand_ctrl =
13087 {
13088   false, /* 45_degree_rotation for joystick(s) */
13089   false, /* alternating_controls */
13090   true, /* mirrored_controls */
13091   "", /* control_details */
13092   &salamand_get_ctrl_name
13093 };
13094 
salamand_get_ctrl_name(int type)13095 const char *salamand_get_ctrl_name(int type)
13096 {
13097   switch(type)
13098   {
13099     case IPT_BUTTON1: return BTN1 "Fire";
13100     case IPT_BUTTON2: return BTN2 "Missile";
13101   } /* end of switch */
13102 
13103   return joy4way_labels(type);
13104 }
13105 
13106 const struct ControlInfo searchar_ctrl =
13107 {
13108   false, /* 45_degree_rotation for joystick(s) */
13109   false, /* alternating_controls */
13110   true, /* mirrored_controls */
13111   "", /* control_details */
13112   &searchar_get_ctrl_name
13113 };
13114 
searchar_get_ctrl_name(int type)13115 const char *searchar_get_ctrl_name(int type)
13116 {
13117   switch(type)
13118   {
13119     case IPT_BUTTON1: return BTN1 "Fire";
13120     case IPT_BUTTON2: return BTN2 "Jump";
13121     case IPT_DIAL: return "Left";
13122     case (IPT_DIAL + IPT_EXTENSION): return "Right";
13123   } /* end of switch */
13124 
13125   return joy4way_labels(type);
13126 }
13127 
13128 const struct ControlInfo sarge_ctrl =
13129 {
13130   false, /* 45_degree_rotation for joystick(s) */
13131   false, /* alternating_controls */
13132   true, /* mirrored_controls */
13133   "The buttons are mirrored across both sticks. They are labeled generically because you can control various vehicles in the game and they have different functions for each. This game driver has hacked in inputs that allow you to play the game with a regular joystick. To disable these hacked inputs you need to either disable cheats or remap the hacked inputs to 'none' in the input menu.", /* control_details */
13134   &sarge_get_ctrl_name
13135 };
13136 
sarge_get_ctrl_name(int type)13137 const char *sarge_get_ctrl_name(int type)
13138 {
13139   switch(type)
13140   {
13141     case IPT_BUTTON1: return BTN1 "Trigger Switch";
13142     case IPT_BUTTON2: return BTN2 "Thumb Button";
13143     case IPT_JOYSTICKLEFT_UP: return "Left Tread Forward";
13144     case IPT_JOYSTICKLEFT_DOWN: return "Left Tread Backward";
13145     case IPT_JOYSTICKRIGHT_UP: return "Right Tread Forward";
13146     case IPT_JOYSTICKRIGHT_DOWN: return "Right Tread Backward";
13147   } /* end of switch */
13148 
13149   return "";
13150 }
13151 
13152 const struct ControlInfo satansat_ctrl =
13153 {
13154   false, /* 45_degree_rotation for joystick(s) */
13155   true, /* alternating_controls */
13156   true, /* mirrored_controls */
13157   "The joystick had the typical generic 'control' caption below it.", /* control_details */
13158   &satansat_get_ctrl_name
13159 };
13160 
satansat_get_ctrl_name(int type)13161 const char *satansat_get_ctrl_name(int type)
13162 {
13163   switch(type)
13164   {
13165     case IPT_BUTTON1: return BTN1 "Firing Button";
13166     case IPT_BUTTON2: return BTN2 "Laser Beam";
13167   } /* end of switch */
13168 
13169   return joy2way_labels(type);
13170 }
13171 
13172 const struct ControlInfo shollow_ctrl =
13173 {
13174   false, /* 45_degree_rotation for joystick(s) */
13175   true, /* alternating_controls */
13176   true, /* mirrored_controls */
13177   "This game actually uses a gorf-style trigger stick, but a restrictor is used to make it 2-way.", /* control_details */
13178   &shollow_get_ctrl_name
13179 };
13180 
shollow_get_ctrl_name(int type)13181 const char *shollow_get_ctrl_name(int type)
13182 {
13183   switch(type)
13184   {
13185     case IPT_BUTTON1: return BTN1 "Fire";
13186     case IPT_BUTTON2: return BTN2 "Shield";
13187   } /* end of switch */
13188 
13189   return joy2way_labels(type);
13190 }
13191 
13192 const struct ControlInfo scramble_ctrl =
13193 {
13194   false, /* 45_degree_rotation for joystick(s) */
13195   true, /* alternating_controls */
13196   true, /* mirrored_controls */
13197   "", /* control_details */
13198   &scramble_get_ctrl_name
13199 };
13200 
scramble_get_ctrl_name(int type)13201 const char *scramble_get_ctrl_name(int type)
13202 {
13203   switch(type)
13204   {
13205     case IPT_BUTTON1: return BTN1 "Laser";
13206     case IPT_BUTTON2: return BTN2 "Bombs";
13207     case IPT_JOYSTICK_UP: return "Up";
13208     case IPT_JOYSTICK_DOWN: return "Down";
13209     case IPT_JOYSTICK_LEFT: return "Slow";
13210     case IPT_JOYSTICK_RIGHT: return "Fast";
13211   } /* end of switch */
13212 
13213   return "";
13214 }
13215 
13216 const struct ControlInfo sdi_ctrl =
13217 {
13218   false, /* 45_degree_rotation for joystick(s) */
13219   false, /* alternating_controls */
13220   true, /* mirrored_controls */
13221   "For those of you who have 'fraken-panels' this is the game for you. This game uses the extremely odd combination of a top-fire 8-way joystick and a trackball. All controls are required too so forget about playing this game unless you have those controls.", /* control_details */
13222   &sdi_get_ctrl_name
13223 };
13224 
sdi_get_ctrl_name(int type)13225 const char *sdi_get_ctrl_name(int type)
13226 {
13227   switch(type)
13228   {
13229     case IPT_BUTTON1: return BTN1 "Fire";
13230     case IPT_JOYSTICK_UP: return "Move Up";
13231     case IPT_JOYSTICK_DOWN: return "Move Down";
13232     case IPT_JOYSTICK_LEFT: return "Move Left";
13233     case IPT_JOYSTICK_RIGHT: return "Move Right";
13234     case IPT_TRACKBALL_X: return "Aim Left";
13235     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Aim Right";
13236     case IPT_TRACKBALL_Y: return "Aim Up";
13237     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Aim Down";
13238   } /* end of switch */
13239 
13240   return "";
13241 }
13242 
13243 const struct ControlInfo seawolf_ctrl =
13244 {
13245   false, /* 45_degree_rotation for joystick(s) */
13246   false, /* alternating_controls */
13247   false, /* mirrored_controls */
13248   "The 'paddle' is actually a periscope you look through and turn. The field of view you have when looking through the scope helps you aim. Mame displays a cross hair to help you aim, you can turn it off with the F1 key.", /* control_details */
13249   &seawolf_get_ctrl_name
13250 };
13251 
seawolf_get_ctrl_name(int type)13252 const char *seawolf_get_ctrl_name(int type)
13253 {
13254   switch(type)
13255   {
13256     case IPT_BUTTON1: return BTN1 "Fire Torpedo";
13257     case IPT_PADDLE: return "Left";
13258     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
13259   } /* end of switch */
13260 
13261   return "";
13262 }
13263 
13264 const struct ControlInfo seawolf2_ctrl =
13265 {
13266   false, /* 45_degree_rotation for joystick(s) */
13267   false, /* alternating_controls */
13268   true, /* mirrored_controls */
13269   "The 'paddle' is actually a periscope you look through and turn. The field of view you have when looking through the scope helps you aim. Mame displays a cross hair to help you aim, you can turn it off with the F1 key.", /* control_details */
13270   &seawolf2_get_ctrl_name
13271 };
13272 
seawolf2_get_ctrl_name(int type)13273 const char *seawolf2_get_ctrl_name(int type)
13274 {
13275   switch(type)
13276   {
13277     case IPT_BUTTON1: return BTN1 "Fire Torpedo";
13278     case IPT_PADDLE: return "Left";
13279     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
13280   } /* end of switch */
13281 
13282   return "";
13283 }
13284 
13285 const struct ControlInfo shdancer_ctrl =
13286 {
13287   false, /* 45_degree_rotation for joystick(s) */
13288   true, /* alternating_controls */
13289   true, /* mirrored_controls */
13290   "Pull joystick down and push ATTACK button to send your dog to attack your opponents. To wipe out everything on the screen use NINJA MAGIC button.", /* control_details */
13291   &shdancer_get_ctrl_name
13292 };
13293 
shdancer_get_ctrl_name(int type)13294 const char *shdancer_get_ctrl_name(int type)
13295 {
13296   switch(type)
13297   {
13298     case IPT_BUTTON1: return BTN1 "Attack";
13299     case IPT_BUTTON2: return BTN2 "Jump";
13300     case IPT_BUTTON3: return BTN3 "Ninja Magic";
13301   } /* end of switch */
13302 
13303   return joy4way_labels(type);
13304 }
13305 
13306 const struct ControlInfo shadoww_ctrl =
13307 {
13308   false, /* 45_degree_rotation for joystick(s) */
13309   false, /* alternating_controls */
13310   true, /* mirrored_controls */
13311   "Yes, although it is rare to see the game with it's original layout, it was designed to be played with a top-fire joystick.", /* control_details */
13312   &shadoww_get_ctrl_name
13313 };
13314 
shadoww_get_ctrl_name(int type)13315 const char *shadoww_get_ctrl_name(int type)
13316 {
13317   switch(type)
13318   {
13319     case IPT_BUTTON1: return BTN1 "Attack";
13320     case IPT_BUTTON2: return BTN2 "Jump";
13321     case IPT_BUTTON3: return BTN3 "Grab";
13322   } /* end of switch */
13323 
13324   return joy4way_labels(type);
13325 }
13326 
13327 const struct ControlInfo sharkatt_ctrl =
13328 {
13329   false, /* 45_degree_rotation for joystick(s) */
13330   true, /* alternating_controls */
13331   true, /* mirrored_controls */
13332   "The cpo labels the joystick as 'shark control.'  Above both buttons are the words 'press to'  (as in press to thrust or press to munch).", /* control_details */
13333   &sharkatt_get_ctrl_name
13334 };
13335 
sharkatt_get_ctrl_name(int type)13336 const char *sharkatt_get_ctrl_name(int type)
13337 {
13338   switch(type)
13339   {
13340     case IPT_BUTTON1: return BTN1 "Munch";
13341     case IPT_BUTTON2: return BTN2 "Thrust";
13342   } /* end of switch */
13343 
13344   return joy4way_labels(type);
13345 }
13346 
13347 const struct ControlInfo sshooter_ctrl =
13348 {
13349   false, /* 45_degree_rotation for joystick(s) */
13350   false, /* alternating_controls */
13351   true, /* mirrored_controls */
13352   "", /* control_details */
13353   &sshooter_get_ctrl_name
13354 };
13355 
sshooter_get_ctrl_name(int type)13356 const char *sshooter_get_ctrl_name(int type)
13357 {
13358   switch(type)
13359   {
13360     case IPT_BUTTON1: return BTN1 "Fire";
13361     case IPT_LIGHTGUN_X: return "Aim Left";
13362     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
13363     case IPT_LIGHTGUN_Y: return "Aim Up";
13364     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
13365   } /* end of switch */
13366 
13367   return "";
13368 }
13369 
13370 const struct ControlInfo sheriff_ctrl =
13371 {
13372   false, /* 45_degree_rotation for joystick(s) */
13373   true, /* alternating_controls */
13374   true, /* mirrored_controls */
13375   "NOTE  The input emulation is correct in mame, but this games real life controls are NOT dual 8-ways. The game used a 8 way joystick and a special rotary dial with a trigger, which used absolute positon. Basically it acted like an 8way joystick that stays in the direction you point it.", /* control_details */
13376   &sheriff_get_ctrl_name
13377 };
13378 
sheriff_get_ctrl_name(int type)13379 const char *sheriff_get_ctrl_name(int type)
13380 {
13381   switch(type)
13382   {
13383     case IPT_BUTTON1: return BTN1 "Fire";
13384     case IPT_JOYSTICKLEFT_UP: return "Up";
13385     case IPT_JOYSTICKLEFT_DOWN: return "Down";
13386     case IPT_JOYSTICKLEFT_LEFT: return "Left";
13387     case IPT_JOYSTICKLEFT_RIGHT: return "Right";
13388     case IPT_JOYSTICKRIGHT_UP: return "Aim Up";
13389     case IPT_JOYSTICKRIGHT_DOWN: return "Aim Down";
13390     case IPT_JOYSTICKRIGHT_LEFT: return "Aim Left";
13391     case IPT_JOYSTICKRIGHT_RIGHT: return "Aim Right";
13392   } /* end of switch */
13393 
13394   return "";
13395 }
13396 
13397 const struct ControlInfo shinobi_ctrl =
13398 {
13399   false, /* 45_degree_rotation for joystick(s) */
13400   true, /* alternating_controls */
13401   true, /* mirrored_controls */
13402   "CP is a generic SEGA CP, with buttons arranged in a triangle.", /* control_details */
13403   &shinobi_get_ctrl_name
13404 };
13405 
shinobi_get_ctrl_name(int type)13406 const char *shinobi_get_ctrl_name(int type)
13407 {
13408   switch(type)
13409   {
13410     case IPT_BUTTON1: return BTN1 "Attack";
13411     case IPT_BUTTON2: return BTN2 "Jump";
13412     case IPT_BUTTON3: return BTN3 "Ninja Magic";
13413   } /* end of switch */
13414 
13415   return joy4way_labels(type);
13416 }
13417 
13418 const struct ControlInfo shootout_ctrl =
13419 {
13420   false, /* 45_degree_rotation for joystick(s) */
13421   true, /* alternating_controls */
13422   true, /* mirrored_controls */
13423   "The 'jump' label is misleading. While moving left or right you press it to roll out of the way. The button is only effective while moving.", /* control_details */
13424   &shootout_get_ctrl_name
13425 };
13426 
shootout_get_ctrl_name(int type)13427 const char *shootout_get_ctrl_name(int type)
13428 {
13429   switch(type)
13430   {
13431     case IPT_BUTTON1: return BTN1 "Shoot";
13432     case IPT_BUTTON2: return BTN2 "Jump";
13433   } /* end of switch */
13434 
13435   return joy4way_labels(type);
13436 }
13437 
13438 const struct ControlInfo shootbul_ctrl =
13439 {
13440   false, /* 45_degree_rotation for joystick(s) */
13441   true, /* alternating_controls */
13442   true, /* mirrored_controls */
13443   "", /* control_details */
13444   &shootbul_get_ctrl_name
13445 };
13446 
shootbul_get_ctrl_name(int type)13447 const char *shootbul_get_ctrl_name(int type)
13448 {
13449   switch(type)
13450   {
13451     case IPT_TRACKBALL_X: return "Left";
13452     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13453     case IPT_TRACKBALL_Y: return "Up";
13454     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13455   } /* end of switch */
13456 
13457   return "";
13458 }
13459 
13460 const struct ControlInfo shuffle_ctrl =
13461 {
13462   false, /* 45_degree_rotation for joystick(s) */
13463   true, /* alternating_controls */
13464   true, /* mirrored_controls */
13465   "Please note that the actual cpo shows the generic arrows shooting out from the trackball with the caption 'control puck'  this has been left out for length reasons. Also the button caption may not exactly be 'game select' but this cpo was screened directly over the metal, and thus it's very difficult to find a completely readable one.", /* control_details */
13466   &shuffle_get_ctrl_name
13467 };
13468 
shuffle_get_ctrl_name(int type)13469 const char *shuffle_get_ctrl_name(int type)
13470 {
13471   switch(type)
13472   {
13473     case IPT_BUTTON1: return BTN1 "Game Select";
13474     case IPT_TRACKBALL_X: return "Left";
13475     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13476     case IPT_TRACKBALL_Y: return "Up";
13477     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13478   } /* end of switch */
13479 
13480   return "";
13481 }
13482 
13483 const struct ControlInfo shufshot_ctrl =
13484 {
13485   false, /* 45_degree_rotation for joystick(s) */
13486   true, /* alternating_controls */
13487   true, /* mirrored_controls */
13488   "", /* control_details */
13489   &shufshot_get_ctrl_name
13490 };
13491 
shufshot_get_ctrl_name(int type)13492 const char *shufshot_get_ctrl_name(int type)
13493 {
13494   switch(type)
13495   {
13496     case IPT_BUTTON1: return BTN1 "Zoom";
13497     case IPT_BUTTON2: return BTN2 "Wax";
13498     case IPT_TRACKBALL_X: return "Left";
13499     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13500     case IPT_TRACKBALL_Y: return "Up";
13501     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13502   } /* end of switch */
13503 
13504   return "";
13505 }
13506 
13507 const struct ControlInfo sidearms_ctrl =
13508 {
13509   false, /* 45_degree_rotation for joystick(s) */
13510   false, /* alternating_controls */
13511   true, /* mirrored_controls */
13512   "", /* control_details */
13513   &sidearms_get_ctrl_name
13514 };
13515 
sidearms_get_ctrl_name(int type)13516 const char *sidearms_get_ctrl_name(int type)
13517 {
13518   switch(type)
13519   {
13520     case IPT_BUTTON1: return BTN1 "Fire Left";
13521     case IPT_BUTTON2: return BTN2 "Fire Right";
13522     case IPT_BUTTON3: return BTN3 "Power";
13523   } /* end of switch */
13524 
13525   return joy4way_labels(type);
13526 }
13527 
13528 const struct ControlInfo sidetrac_ctrl =
13529 {
13530   false, /* 45_degree_rotation for joystick(s) */
13531   true, /* alternating_controls */
13532   true, /* mirrored_controls */
13533   "Note that the original game used a generic exidy panel and thus the button was unlabeled.", /* control_details */
13534   &sidetrac_get_ctrl_name
13535 };
13536 
sidetrac_get_ctrl_name(int type)13537 const char *sidetrac_get_ctrl_name(int type)
13538 {
13539   switch(type)
13540   {
13541     case IPT_BUTTON1: return BTN1 "Speed Up";
13542   } /* end of switch */
13543 
13544   return joy4way_labels(type);
13545 }
13546 
13547 const struct ControlInfo sinistar_ctrl =
13548 {
13549   false, /* 45_degree_rotation for joystick(s) */
13550   true, /* alternating_controls */
13551   true, /* mirrored_controls */
13552   "", /* control_details */
13553   &sinistar_get_ctrl_name
13554 };
13555 
sinistar_get_ctrl_name(int type)13556 const char *sinistar_get_ctrl_name(int type)
13557 {
13558   switch(type)
13559   {
13560     case IPT_BUTTON1: return BTN1 "Fire";
13561     case IPT_BUTTON2: return BTN2 "Sinibomb";
13562     case IPT_AD_STICK_X: return "Left";
13563     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
13564     case IPT_AD_STICK_Y: return "Up";
13565     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
13566   } /* end of switch */
13567 
13568   return "";
13569 }
13570 
13571 const struct ControlInfo skullxbo_ctrl =
13572 {
13573   false, /* 45_degree_rotation for joystick(s) */
13574   false, /* alternating_controls */
13575   true, /* mirrored_controls */
13576   "CP has 2 sword buttons either side of joystick, and 1 turn button directly below joystick. This just allows for left/right handed players - both sword buttons are wired to same input.", /* control_details */
13577   &skullxbo_get_ctrl_name
13578 };
13579 
skullxbo_get_ctrl_name(int type)13580 const char *skullxbo_get_ctrl_name(int type)
13581 {
13582   switch(type)
13583   {
13584     case IPT_BUTTON1: return BTN1 "Sword";
13585     case IPT_BUTTON2: return BTN2 "Turn";
13586   } /* end of switch */
13587 
13588   return joy4way_labels(type);
13589 }
13590 
13591 const struct ControlInfo skydiver_ctrl =
13592 {
13593   false, /* 45_degree_rotation for joystick(s) */
13594   false, /* alternating_controls */
13595   true, /* mirrored_controls */
13596   "This game actually used a parachute ripcord mounted as a 2-way joystick. You adjust for the wind by moving the cord left or right and pull up on it to release the chute.", /* control_details */
13597   &skydiver_get_ctrl_name
13598 };
13599 
skydiver_get_ctrl_name(int type)13600 const char *skydiver_get_ctrl_name(int type)
13601 {
13602   switch(type)
13603   {
13604     case IPT_BUTTON1: return BTN1 "Jump";
13605     case IPT_BUTTON2: return BTN2 "Open Chute";
13606   } /* end of switch */
13607 
13608   return joy2way_labels(type);
13609 }
13610 
13611 const struct ControlInfo skysoldr_ctrl =
13612 {
13613   false, /* 45_degree_rotation for joystick(s) */
13614   false, /* alternating_controls */
13615   true, /* mirrored_controls */
13616   "", /* control_details */
13617   &skysoldr_get_ctrl_name
13618 };
13619 
skysoldr_get_ctrl_name(int type)13620 const char *skysoldr_get_ctrl_name(int type)
13621 {
13622   switch(type)
13623   {
13624     case IPT_BUTTON1: return BTN1 "Cannon";
13625     case IPT_BUTTON2: return BTN2 "Missle";
13626   } /* end of switch */
13627 
13628   return joy4way_labels(type);
13629 }
13630 
13631 const struct ControlInfo slapfigh_ctrl =
13632 {
13633   false, /* 45_degree_rotation for joystick(s) */
13634   true, /* alternating_controls */
13635   true, /* mirrored_controls */
13636   "The game is 2 player alternating, with a cocktail mode. As with all alternating cocktail games, a separate input is for the second player when the video flips for the second player.", /* control_details */
13637   &slapfigh_get_ctrl_name
13638 };
13639 
slapfigh_get_ctrl_name(int type)13640 const char *slapfigh_get_ctrl_name(int type)
13641 {
13642   switch(type)
13643   {
13644     case IPT_BUTTON1: return BTN1 "Fire";
13645     case IPT_BUTTON2: return BTN2 "Weapon Select";
13646   } /* end of switch */
13647 
13648   return joy4way_labels(type);
13649 }
13650 
13651 const struct ControlInfo slikshot_ctrl =
13652 {
13653   false, /* 45_degree_rotation for joystick(s) */
13654   true, /* alternating_controls */
13655   true, /* mirrored_controls */
13656   "The 'trackball' is actually an entire section of a pool table, with a cue ball, cue stick, and various sensors to track their movement. The buttons are lighted when they are required and you are prompted on screen as to which to press.", /* control_details */
13657   &slikshot_get_ctrl_name
13658 };
13659 
slikshot_get_ctrl_name(int type)13660 const char *slikshot_get_ctrl_name(int type)
13661 {
13662   switch(type)
13663   {
13664     case IPT_BUTTON1: return BTN1 "Yellow";
13665     case IPT_BUTTON2: return BTN2 "Green";
13666     case IPT_BUTTON3: return BTN3 "Red";
13667     case IPT_TRACKBALL_X: return "Left";
13668     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13669     case IPT_TRACKBALL_Y: return "Up";
13670     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13671   } /* end of switch */
13672 
13673   return "";
13674 }
13675 
13676 const struct ControlInfo slither_ctrl =
13677 {
13678   false, /* 45_degree_rotation for joystick(s) */
13679   true, /* alternating_controls */
13680   true, /* mirrored_controls */
13681   "", /* control_details */
13682   &slither_get_ctrl_name
13683 };
13684 
slither_get_ctrl_name(int type)13685 const char *slither_get_ctrl_name(int type)
13686 {
13687   switch(type)
13688   {
13689     case IPT_BUTTON1: return BTN1 "Fire Down";
13690     case IPT_BUTTON2: return BTN2 "Fire Up";
13691     case IPT_TRACKBALL_X: return "Left";
13692     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13693     case IPT_TRACKBALL_Y: return "Up";
13694     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13695   } /* end of switch */
13696 
13697   return "";
13698 }
13699 
13700 const struct ControlInfo slyspy_ctrl =
13701 {
13702   false, /* 45_degree_rotation for joystick(s) */
13703   true, /* alternating_controls */
13704   true, /* mirrored_controls */
13705   "", /* control_details */
13706   &slyspy_get_ctrl_name
13707 };
13708 
slyspy_get_ctrl_name(int type)13709 const char *slyspy_get_ctrl_name(int type)
13710 {
13711   switch(type)
13712   {
13713     case IPT_BUTTON1: return BTN1 "Shoot";
13714     case IPT_BUTTON2: return BTN2 "Jump";
13715   } /* end of switch */
13716 
13717   return joy4way_labels(type);
13718 }
13719 
13720 const struct ControlInfo smashtv_ctrl =
13721 {
13722   false, /* 45_degree_rotation for joystick(s) */
13723   false, /* alternating_controls */
13724   true, /* mirrored_controls */
13725   "The joysticks were just globally labeled 'move' and 'fire'", /* control_details */
13726   &smashtv_get_ctrl_name
13727 };
13728 
smashtv_get_ctrl_name(int type)13729 const char *smashtv_get_ctrl_name(int type)
13730 {
13731   switch(type)
13732   {
13733     case IPT_JOYSTICKLEFT_UP: return "Move Up";
13734     case IPT_JOYSTICKLEFT_DOWN: return "Move Down";
13735     case IPT_JOYSTICKLEFT_LEFT: return "Move Left";
13736     case IPT_JOYSTICKLEFT_RIGHT: return "Move Right";
13737     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
13738     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
13739     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
13740     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
13741   } /* end of switch */
13742 
13743   return "";
13744 }
13745 
13746 const struct ControlInfo snakjack_ctrl =
13747 {
13748   false, /* 45_degree_rotation for joystick(s) */
13749   true, /* alternating_controls */
13750   true, /* mirrored_controls */
13751   "", /* control_details */
13752   &snakjack_get_ctrl_name
13753 };
13754 
snakjack_get_ctrl_name(int type)13755 const char *snakjack_get_ctrl_name(int type)
13756 {
13757   switch(type)
13758   {
13759     case IPT_BUTTON1: return BTN1 "Sneeze Button";
13760     case IPT_TRACKBALL_X: return "Left";
13761     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
13762     case IPT_TRACKBALL_Y: return "Up";
13763     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
13764   } /* end of switch */
13765 
13766   return "";
13767 }
13768 
13769 const struct ControlInfo snapjack_ctrl =
13770 {
13771   false, /* 45_degree_rotation for joystick(s) */
13772   true, /* alternating_controls */
13773   true, /* mirrored_controls */
13774   "The cpo generically labeled the entire joystick 'control'.", /* control_details */
13775   &snapjack_get_ctrl_name
13776 };
13777 
snapjack_get_ctrl_name(int type)13778 const char *snapjack_get_ctrl_name(int type)
13779 {
13780   return joy4way_labels(type);
13781 }
13782 
13783 const struct ControlInfo snowbros_ctrl =
13784 {
13785   false, /* 45_degree_rotation for joystick(s) */
13786   false, /* alternating_controls */
13787   true, /* mirrored_controls */
13788   "Snow Bros is listed as using an 8-way joystick, though only left and right are used during gameplay.", /* control_details */
13789   &snowbros_get_ctrl_name
13790 };
13791 
snowbros_get_ctrl_name(int type)13792 const char *snowbros_get_ctrl_name(int type)
13793 {
13794   switch(type)
13795   {
13796     case IPT_BUTTON1: return BTN1 "Shoot and Kick Snowball";
13797     case IPT_BUTTON2: return BTN2 "Jump";
13798   } /* end of switch */
13799 
13800   return joy2way_labels(type);
13801 }
13802 
13803 const struct ControlInfo solarfox_ctrl =
13804 {
13805   false, /* 45_degree_rotation for joystick(s) */
13806   true, /* alternating_controls */
13807   true, /* mirrored_controls */
13808   "it should be noted that the triger button was also mirrored on the control panel itself.", /* control_details */
13809   &solarfox_get_ctrl_name
13810 };
13811 
solarfox_get_ctrl_name(int type)13812 const char *solarfox_get_ctrl_name(int type)
13813 {
13814   switch(type)
13815   {
13816     case IPT_BUTTON1: return BTN1 "Fire";
13817     case IPT_BUTTON2: return BTN2 "Speed Control";
13818   } /* end of switch */
13819 
13820   return joy4way_labels(type);
13821 }
13822 
13823 const struct ControlInfo solarq_ctrl =
13824 {
13825   false, /* 45_degree_rotation for joystick(s) */
13826   false, /* alternating_controls */
13827   false, /* mirrored_controls */
13828   "", /* control_details */
13829   &solarq_get_ctrl_name
13830 };
13831 
solarq_get_ctrl_name(int type)13832 const char *solarq_get_ctrl_name(int type)
13833 {
13834   switch(type)
13835   {
13836     case IPT_BUTTON1: return BTN1 "Fire";
13837     case IPT_BUTTON2: return BTN2 "Thrust";
13838     case IPT_BUTTON3: return BTN3 "Hyper Space";
13839     case IPT_BUTTON4: return BTN4 "Nova";
13840   } /* end of switch */
13841 
13842   return joy2way_labels(type);
13843 }
13844 
13845 const struct ControlInfo amazon_ctrl =
13846 {
13847   false, /* 45_degree_rotation for joystick(s) */
13848   true, /* alternating_controls */
13849   true, /* mirrored_controls */
13850   "", /* control_details */
13851   &amazon_get_ctrl_name
13852 };
13853 
amazon_get_ctrl_name(int type)13854 const char *amazon_get_ctrl_name(int type)
13855 {
13856   switch(type)
13857   {
13858     case IPT_BUTTON1: return BTN1 "Fire";
13859     case IPT_BUTTON2: return BTN2 "Bomb";
13860   } /* end of switch */
13861 
13862   return joy4way_labels(type);
13863 }
13864 
13865 const struct ControlInfo sbm_ctrl =
13866 {
13867   false, /* 45_degree_rotation for joystick(s) */
13868   true, /* alternating_controls */
13869   true, /* mirrored_controls */
13870   "This game is unplayable on anyone's layout. It used a series of photo sensors and a punching pad, along with boxing gloves to make a 'punching sim'. Mame maps the impact position on the pad to the directional arrows and the speed is calculated by the photo sensors. Player 2 joystick may also do something. It doesn't really matter as the game is unplayable. Interesting side note.... The original machine was responsible for several lawsuits as the pad wasn't padded enough and people injured themselves hitting it.", /* control_details */
13871   &sbm_get_ctrl_name
13872 };
13873 
sbm_get_ctrl_name(int type)13874 const char *sbm_get_ctrl_name(int type)
13875 {
13876   switch(type)
13877   {
13878     case IPT_BUTTON1: return BTN1 "Sensor 1";
13879     case IPT_BUTTON2: return BTN2 "Sensor 2";
13880     case IPT_BUTTON3: return BTN3 "Sensor 3";
13881     case IPT_BUTTON4: return BTN4 "Sensor 4";
13882     case IPT_JOYSTICK_UP: return "Aim Up";
13883     case IPT_JOYSTICK_DOWN: return "Aim Down";
13884     case IPT_JOYSTICK_LEFT: return "Aim Left";
13885     case IPT_JOYSTICK_RIGHT: return "Aim Right";
13886   } /* end of switch */
13887 
13888   return "";
13889 }
13890 
13891 const struct ControlInfo souledge_ctrl =
13892 {
13893   false, /* 45_degree_rotation for joystick(s) */
13894   false, /* alternating_controls */
13895   true, /* mirrored_controls */
13896   "The original control panel actually has attack with arrows going left and right for 'Attack A' and attack with arrows going up and down for 'Attack B'  On some panels you will see this game with the labels A,B,K,G", /* control_details */
13897   &souledge_get_ctrl_name
13898 };
13899 
souledge_get_ctrl_name(int type)13900 const char *souledge_get_ctrl_name(int type)
13901 {
13902   switch(type)
13903   {
13904     case IPT_BUTTON1: return BTN1 "Attack A";
13905     case IPT_BUTTON2: return BTN2 "Attack B";
13906     case IPT_BUTTON3: return BTN3 "Kick";
13907     case IPT_BUTTON4: return BTN4 "Guard";
13908   } /* end of switch */
13909 
13910   return joy4way_labels(type);
13911 }
13912 
13913 const struct ControlInfo spacewar_ctrl =
13914 {
13915   false, /* 45_degree_rotation for joystick(s) */
13916   false, /* alternating_controls */
13917   true, /* mirrored_controls */
13918   "Two player only game where each player flies around space and tries to shoot each other. Features include partial damage, modifying gravity and inertia. Controls are fire, thrust, rotate left and right, hyperspace and reset.", /* control_details */
13919   &spacewar_get_ctrl_name
13920 };
13921 
spacewar_get_ctrl_name(int type)13922 const char *spacewar_get_ctrl_name(int type)
13923 {
13924   switch(type)
13925   {
13926     case IPT_BUTTON1: return BTN1 "Fire";
13927     case IPT_BUTTON2: return BTN2 "Thrust";
13928     case IPT_BUTTON3: return BTN3 "Hyper Space";
13929   } /* end of switch */
13930 
13931   return joy2way_labels(type);
13932 }
13933 
13934 const struct ControlInfo sspaceat_ctrl =
13935 {
13936   false, /* 45_degree_rotation for joystick(s) */
13937   true, /* alternating_controls */
13938   true, /* mirrored_controls */
13939   "Space Invader type game.", /* control_details */
13940   &sspaceat_get_ctrl_name
13941 };
13942 
sspaceat_get_ctrl_name(int type)13943 const char *sspaceat_get_ctrl_name(int type)
13944 {
13945   switch(type)
13946   {
13947     case IPT_BUTTON1: return BTN1 "Fire";
13948     case IPT_JOYSTICK_LEFT: return "Control Left";
13949     case IPT_JOYSTICK_RIGHT: return "Control Right";
13950   } /* end of switch */
13951 
13952   return "";
13953 }
13954 
13955 const struct ControlInfo spacduel_ctrl =
13956 {
13957   false, /* 45_degree_rotation for joystick(s) */
13958   false, /* alternating_controls */
13959   true, /* mirrored_controls */
13960   "Note that the 2 player start button does NOT function as a start button, rather a game select button. The good news is you can play a 2 player game on a single quarter!", /* control_details */
13961   &spacduel_get_ctrl_name
13962 };
13963 
spacduel_get_ctrl_name(int type)13964 const char *spacduel_get_ctrl_name(int type)
13965 {
13966   switch(type)
13967   {
13968     case IPT_BUTTON1: return BTN1 "Fire";
13969     case IPT_BUTTON2: return BTN2 "Thrust";
13970     case IPT_BUTTON3: return BTN3 "Shield";
13971     case IPT_JOYSTICK_LEFT: return "Rotate Left";
13972     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
13973   } /* end of switch */
13974 
13975   return "";
13976 }
13977 
13978 const struct ControlInfo spacefb_ctrl =
13979 {
13980   false, /* 45_degree_rotation for joystick(s) */
13981   true, /* alternating_controls */
13982   true, /* mirrored_controls */
13983   "The game's cpo used nautical labels above the directional buttons and arrows below them. Since we aren't all sailors, the arrow directions are included.", /* control_details */
13984   &spacefb_get_ctrl_name
13985 };
13986 
spacefb_get_ctrl_name(int type)13987 const char *spacefb_get_ctrl_name(int type)
13988 {
13989   switch(type)
13990   {
13991     case IPT_BUTTON1: return BTN1 "Fire";
13992     case IPT_BUTTON2: return BTN2 "Warp";
13993     case IPT_JOYSTICK_LEFT: return "Port (Left)";
13994     case IPT_JOYSTICK_RIGHT: return "Starboard (Right)";
13995   } /* end of switch */
13996 
13997   return "";
13998 }
13999 
14000 const struct ControlInfo spacfury_ctrl =
14001 {
14002   false, /* 45_degree_rotation for joystick(s) */
14003   true, /* alternating_controls */
14004   true, /* mirrored_controls */
14005   "", /* control_details */
14006   &spacfury_get_ctrl_name
14007 };
14008 
spacfury_get_ctrl_name(int type)14009 const char *spacfury_get_ctrl_name(int type)
14010 {
14011   switch(type)
14012   {
14013     case IPT_BUTTON1: return BTN1 "Fire";
14014     case IPT_BUTTON2: return BTN2 "Thrust";
14015     case IPT_JOYSTICK_LEFT: return "Rotate Left";
14016     case IPT_JOYSTICK_RIGHT: return "Rotate Right";
14017   } /* end of switch */
14018 
14019   return "";
14020 }
14021 
14022 const struct ControlInfo spacegun_ctrl =
14023 {
14024   false, /* 45_degree_rotation for joystick(s) */
14025   false, /* alternating_controls */
14026   true, /* mirrored_controls */
14027   "", /* control_details */
14028   &spacegun_get_ctrl_name
14029 };
14030 
spacegun_get_ctrl_name(int type)14031 const char *spacegun_get_ctrl_name(int type)
14032 {
14033   switch(type)
14034   {
14035     case IPT_BUTTON1: return BTN1 "Trigger";
14036     case IPT_BUTTON2: return BTN2 "Bomb Select";
14037     case IPT_BUTTON3: return BTN3 "Back Up";
14038     case IPT_LIGHTGUN_X: return "Aim Left";
14039     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
14040     case IPT_LIGHTGUN_Y: return "Aim Up";
14041     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
14042   } /* end of switch */
14043 
14044   return "";
14045 }
14046 
14047 const struct ControlInfo sharrier_ctrl =
14048 {
14049   false, /* 45_degree_rotation for joystick(s) */
14050   false, /* alternating_controls */
14051   false, /* mirrored_controls */
14052   "If you are wondering why there are three 'shot' buttons, you are not alone. The trigger on the flight stick shoots and there are two buttons on the control panel that also shoot. They all have the same function, but for documentation's sake all three will be included.", /* control_details */
14053   &sharrier_get_ctrl_name
14054 };
14055 
sharrier_get_ctrl_name(int type)14056 const char *sharrier_get_ctrl_name(int type)
14057 {
14058   switch(type)
14059   {
14060     case IPT_BUTTON1: return BTN1 "Shot";
14061     case IPT_BUTTON2: return BTN2 "Shot";
14062     case IPT_BUTTON3: return BTN3 "Shot";
14063     case IPT_AD_STICK_X: return "Left";
14064     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
14065     case IPT_AD_STICK_Y: return "Up";
14066     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
14067   } /* end of switch */
14068 
14069   return "";
14070 }
14071 
14072 const struct ControlInfo invaders_ctrl =
14073 {
14074   false, /* 45_degree_rotation for joystick(s) */
14075   true, /* alternating_controls */
14076   true, /* mirrored_controls */
14077   "The game cpo image uses 'control' as the label for the joystick. I modified it slightly to avoid confusion. The midway version of the game (invaders) actually used directional buttons instead of the joystick. The Taito version (Sitv) used the two-way joystick.", /* control_details */
14078   &invaders_get_ctrl_name
14079 };
14080 
invaders_get_ctrl_name(int type)14081 const char *invaders_get_ctrl_name(int type)
14082 {
14083   switch(type)
14084   {
14085     case IPT_BUTTON1: return BTN1 "Fire";
14086     case IPT_JOYSTICK_RIGHT: return "Control Right";
14087     case IPT_JOYSTICK_LEFT: return "Control Left";
14088   } /* end of switch */
14089 
14090   return "";
14091 }
14092 
14093 const struct ControlInfo spacedx_ctrl =
14094 {
14095   false, /* 45_degree_rotation for joystick(s) */
14096   false, /* alternating_controls */
14097   true, /* mirrored_controls */
14098   "", /* control_details */
14099   &spacedx_get_ctrl_name
14100 };
14101 
spacedx_get_ctrl_name(int type)14102 const char *spacedx_get_ctrl_name(int type)
14103 {
14104   switch(type)
14105   {
14106     case IPT_BUTTON1: return BTN1 "Fire";
14107   } /* end of switch */
14108 
14109   return joy4way_labels(type);
14110 }
14111 
14112 const struct ControlInfo invadpt2_ctrl =
14113 {
14114   false, /* 45_degree_rotation for joystick(s) */
14115   true, /* alternating_controls */
14116   true, /* mirrored_controls */
14117   "The Taito version of this game (invadpt2) used a directional joystick. The Midway version (invaddlx) replaced the joystick with directional buttons. The buttons were labelled 'Laser Base Control' with arrows.", /* control_details */
14118   &invadpt2_get_ctrl_name
14119 };
14120 
invadpt2_get_ctrl_name(int type)14121 const char *invadpt2_get_ctrl_name(int type)
14122 {
14123   switch(type)
14124   {
14125     case IPT_BUTTON1: return BTN1 "Fire Laser";
14126   } /* end of switch */
14127 
14128   return joy2way_labels(type);
14129 }
14130 
14131 const struct ControlInfo spacelnc_ctrl =
14132 {
14133   false, /* 45_degree_rotation for joystick(s) */
14134   true, /* alternating_controls */
14135   true, /* mirrored_controls */
14136   "", /* control_details */
14137   &spacelnc_get_ctrl_name
14138 };
14139 
spacelnc_get_ctrl_name(int type)14140 const char *spacelnc_get_ctrl_name(int type)
14141 {
14142   switch(type)
14143   {
14144     case IPT_BUTTON1: return BTN1 "Launch";
14145   } /* end of switch */
14146 
14147   return joy2way_labels(type);
14148 }
14149 
14150 const struct ControlInfo spaceod_ctrl =
14151 {
14152   false, /* 45_degree_rotation for joystick(s) */
14153   true, /* alternating_controls */
14154   true, /* mirrored_controls */
14155   "The cpo has very subtle icons integrated into the artwork. A death-ray like beam eminates from the 'laser' button while bombs appear to be dropping out of the 'bomb' button.", /* control_details */
14156   &spaceod_get_ctrl_name
14157 };
14158 
spaceod_get_ctrl_name(int type)14159 const char *spaceod_get_ctrl_name(int type)
14160 {
14161   switch(type)
14162   {
14163     case IPT_BUTTON1: return BTN1 "Laser";
14164     case IPT_BUTTON2: return BTN2 "Bomb";
14165   } /* end of switch */
14166 
14167   return joy4way_labels(type);
14168 }
14169 
14170 const struct ControlInfo panic_ctrl =
14171 {
14172   false, /* 45_degree_rotation for joystick(s) */
14173   true, /* alternating_controls */
14174   true, /* mirrored_controls */
14175   "This game has a cocktail mode, so player 2 inputs are defined in mame.", /* control_details */
14176   &panic_get_ctrl_name
14177 };
14178 
panic_get_ctrl_name(int type)14179 const char *panic_get_ctrl_name(int type)
14180 {
14181   switch(type)
14182   {
14183     case IPT_BUTTON1: return BTN1 "Holing";
14184     case IPT_BUTTON2: return BTN2 "Closing";
14185   } /* end of switch */
14186 
14187   return joy4way_labels(type);
14188 }
14189 
14190 const struct ControlInfo spacezap_ctrl =
14191 {
14192   false, /* 45_degree_rotation for joystick(s) */
14193   true, /* alternating_controls */
14194   true, /* mirrored_controls */
14195   "A very simple game. the directional buttons point the laser up, down, left or right. Shoot all the aliens before they destroy the base.", /* control_details */
14196   &spacezap_get_ctrl_name
14197 };
14198 
spacezap_get_ctrl_name(int type)14199 const char *spacezap_get_ctrl_name(int type)
14200 {
14201   switch(type)
14202   {
14203     case IPT_BUTTON1: return BTN1 "Fire";
14204   } /* end of switch */
14205 
14206   return joy4way_labels(type);
14207 }
14208 
14209 const struct ControlInfo speakres_ctrl =
14210 {
14211   false, /* 45_degree_rotation for joystick(s) */
14212   true, /* alternating_controls */
14213   true, /* mirrored_controls */
14214   "The cpo generically labels the joystick 'control.'", /* control_details */
14215   &speakres_get_ctrl_name
14216 };
14217 
speakres_get_ctrl_name(int type)14218 const char *speakres_get_ctrl_name(int type)
14219 {
14220   switch(type)
14221   {
14222     case IPT_BUTTON1: return BTN1 "Fire";
14223   } /* end of switch */
14224 
14225   return joy2way_labels(type);
14226 }
14227 
14228 const struct ControlInfo spectar_ctrl =
14229 {
14230   false, /* 45_degree_rotation for joystick(s) */
14231   true, /* alternating_controls */
14232   true, /* mirrored_controls */
14233   "The fire decal also has an icon of a rocket.", /* control_details */
14234   &spectar_get_ctrl_name
14235 };
14236 
spectar_get_ctrl_name(int type)14237 const char *spectar_get_ctrl_name(int type)
14238 {
14239   switch(type)
14240   {
14241     case IPT_BUTTON1: return BTN1 "Fire";
14242   } /* end of switch */
14243 
14244   return joy4way_labels(type);
14245 }
14246 
14247 const struct ControlInfo spdcoin_ctrl =
14248 {
14249   false, /* 45_degree_rotation for joystick(s) */
14250   true, /* alternating_controls */
14251   true, /* mirrored_controls */
14252   "", /* control_details */
14253   &spdcoin_get_ctrl_name
14254 };
14255 
spdcoin_get_ctrl_name(int type)14256 const char *spdcoin_get_ctrl_name(int type)
14257 {
14258   switch(type)
14259   {
14260   } /* end of switch */
14261 
14262   return joy2way_labels(type);
14263 }
14264 
14265 const struct ControlInfo speedfrk_ctrl =
14266 {
14267   false, /* 45_degree_rotation for joystick(s) */
14268   false, /* alternating_controls */
14269   false, /* mirrored_controls */
14270   "Speed is controlled by the shifter. Pressing the pedal makes the car move forward at the selected speed. Stay on the road and avoid all cars to avoid crashing.", /* control_details */
14271   &speedfrk_get_ctrl_name
14272 };
14273 
speedfrk_get_ctrl_name(int type)14274 const char *speedfrk_get_ctrl_name(int type)
14275 {
14276   switch(type)
14277   {
14278     case IPT_DIAL: return "Left";
14279     case (IPT_DIAL + IPT_EXTENSION): return "Right";
14280   } /* end of switch */
14281 
14282   return "";
14283 }
14284 
14285 const struct ControlInfo speedrcr_ctrl =
14286 {
14287   false, /* 45_degree_rotation for joystick(s) */
14288   false, /* alternating_controls */
14289   true, /* mirrored_controls */
14290   "The game has three volcano buttons mounted on the control panel, these buttons are used to fire the three weapons on your car. They are unlabeled but are referred to as A, B, and C in the game's test menu. The start button doubles as a jump button. In mame an extra button and an extra pedal are defined but this doesn't reflect the original hardware.", /* control_details */
14291   &speedrcr_get_ctrl_name
14292 };
14293 
speedrcr_get_ctrl_name(int type)14294 const char *speedrcr_get_ctrl_name(int type)
14295 {
14296   switch(type)
14297   {
14298     case IPT_BUTTON1: return BTN1 "A";
14299     case IPT_BUTTON2: return BTN2 "B";
14300     case IPT_BUTTON3: return BTN3 "C";
14301     case IPT_PADDLE: return "Left";
14302     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
14303     case IPT_PEDAL: return "Accelerate";
14304   } /* end of switch */
14305 
14306   return "";
14307 }
14308 
14309 const struct ControlInfo spidman_ctrl =
14310 {
14311   false, /* 45_degree_rotation for joystick(s) */
14312   false, /* alternating_controls */
14313   true, /* mirrored_controls */
14314   "", /* control_details */
14315   &spidman_get_ctrl_name
14316 };
14317 
spidman_get_ctrl_name(int type)14318 const char *spidman_get_ctrl_name(int type)
14319 {
14320   switch(type)
14321   {
14322     case IPT_BUTTON1: return BTN1 "Attack";
14323     case IPT_BUTTON2: return BTN2 "Jump";
14324   } /* end of switch */
14325 
14326   return joy4way_labels(type);
14327 }
14328 
14329 const struct ControlInfo spiders_ctrl =
14330 {
14331   false, /* 45_degree_rotation for joystick(s) */
14332   true, /* alternating_controls */
14333   true, /* mirrored_controls */
14334   "Teh original cpo simply depicts two arrows with the label 'Movement'.", /* control_details */
14335   &spiders_get_ctrl_name
14336 };
14337 
spiders_get_ctrl_name(int type)14338 const char *spiders_get_ctrl_name(int type)
14339 {
14340   switch(type)
14341   {
14342     case IPT_BUTTON1: return BTN1 "Fire";
14343     case IPT_JOYSTICK_LEFT: return "Move Left";
14344     case IPT_JOYSTICK_RIGHT: return "Move Right";
14345   } /* end of switch */
14346 
14347   return "";
14348 }
14349 
14350 const struct ControlInfo sprint1_ctrl =
14351 {
14352   false, /* 45_degree_rotation for joystick(s) */
14353   false, /* alternating_controls */
14354   false, /* mirrored_controls */
14355   "Note that the gear buttons are remapped from the button defaults. The number labels denote shift position.", /* control_details */
14356   &sprint1_get_ctrl_name
14357 };
14358 
sprint1_get_ctrl_name(int type)14359 const char *sprint1_get_ctrl_name(int type)
14360 {
14361   switch(type)
14362   {
14363     case IPT_BUTTON1: return BTN1 "Accelerate";
14364     case IPT_BUTTON2: return BTN2 "1";
14365     case IPT_BUTTON3: return BTN3 "2";
14366     case IPT_BUTTON4: return BTN4 "3";
14367     case IPT_BUTTON5: return BTN5 "4";
14368     case IPT_DIAL: return "Left";
14369     case (IPT_DIAL + IPT_EXTENSION): return "Right";
14370   } /* end of switch */
14371 
14372   return "";
14373 }
14374 
14375 const struct ControlInfo starcas_ctrl =
14376 {
14377   false, /* 45_degree_rotation for joystick(s) */
14378   true, /* alternating_controls */
14379   true, /* mirrored_controls */
14380   "Mame simulates this game using a 2-way joystick, but the actual game used Directional buttons labeled Left and Right. There was also a Rock-Ola version of the Control Panel (black background) which used pictograms for the button labels. Controls were the same, however.", /* control_details */
14381   &starcas_get_ctrl_name
14382 };
14383 
starcas_get_ctrl_name(int type)14384 const char *starcas_get_ctrl_name(int type)
14385 {
14386   switch(type)
14387   {
14388     case IPT_BUTTON1: return BTN1 "Fire";
14389     case IPT_BUTTON2: return BTN2 "Thrust";
14390   } /* end of switch */
14391 
14392   return joy2way_labels(type);
14393 }
14394 
14395 const struct ControlInfo starforc_ctrl =
14396 {
14397   false, /* 45_degree_rotation for joystick(s) */
14398   true, /* alternating_controls */
14399   true, /* mirrored_controls */
14400   "", /* control_details */
14401   &starforc_get_ctrl_name
14402 };
14403 
starforc_get_ctrl_name(int type)14404 const char *starforc_get_ctrl_name(int type)
14405 {
14406   switch(type)
14407   {
14408     case IPT_BUTTON1: return BTN1 "Fire";
14409   } /* end of switch */
14410 
14411   return joy4way_labels(type);
14412 }
14413 
14414 const struct ControlInfo stargrds_ctrl =
14415 {
14416   false, /* 45_degree_rotation for joystick(s) */
14417   false, /* alternating_controls */
14418   true, /* mirrored_controls */
14419   "The player start buttons double as the 'Weapon' button and the cpo labels it so.", /* control_details */
14420   &stargrds_get_ctrl_name
14421 };
14422 
stargrds_get_ctrl_name(int type)14423 const char *stargrds_get_ctrl_name(int type)
14424 {
14425   switch(type)
14426   {
14427     case IPT_JOYSTICKLEFT_UP: return "Move Up";
14428     case IPT_JOYSTICKLEFT_DOWN: return "Move Down";
14429     case IPT_JOYSTICKLEFT_LEFT: return "Move Left";
14430     case IPT_JOYSTICKLEFT_RIGHT: return "Move Right";
14431     case IPT_JOYSTICKRIGHT_UP: return "Shoot Up";
14432     case IPT_JOYSTICKRIGHT_DOWN: return "Shoot Down";
14433     case IPT_JOYSTICKRIGHT_LEFT: return "Shoot Left";
14434     case IPT_JOYSTICKRIGHT_RIGHT: return "Shoot Right";
14435   } /* end of switch */
14436 
14437   return "";
14438 }
14439 
14440 const struct ControlInfo starhawk_ctrl =
14441 {
14442   false, /* 45_degree_rotation for joystick(s) */
14443   false, /* alternating_controls */
14444   true, /* mirrored_controls */
14445   "Each player has an 8-way Joystick with a Fire Button on top. There are three buttons on the control panel that control the speed of the targeting crosshairs. Shoot as many ships as possible.", /* control_details */
14446   &starhawk_get_ctrl_name
14447 };
14448 
starhawk_get_ctrl_name(int type)14449 const char *starhawk_get_ctrl_name(int type)
14450 {
14451   switch(type)
14452   {
14453     case IPT_BUTTON1: return BTN1 "Fire";
14454     case IPT_BUTTON2: return BTN2 "Slow";
14455     case IPT_BUTTON3: return BTN3 "Medium";
14456     case IPT_BUTTON4: return BTN4 "Fast";
14457   } /* end of switch */
14458 
14459   return joy4way_labels(type);
14460 }
14461 
14462 const struct ControlInfo starjack_ctrl =
14463 {
14464   false, /* 45_degree_rotation for joystick(s) */
14465   true, /* alternating_controls */
14466   true, /* mirrored_controls */
14467   "On the original control panel, the start buttons were double-wired to the bomb buttons.", /* control_details */
14468   &starjack_get_ctrl_name
14469 };
14470 
starjack_get_ctrl_name(int type)14471 const char *starjack_get_ctrl_name(int type)
14472 {
14473   switch(type)
14474   {
14475     case IPT_BUTTON1: return BTN1 "Fire";
14476     case IPT_BUTTON2: return BTN2 "Bomb";
14477   } /* end of switch */
14478 
14479   return joy4way_labels(type);
14480 }
14481 
14482 const struct ControlInfo startrek_ctrl =
14483 {
14484   false, /* 45_degree_rotation for joystick(s) */
14485   true, /* alternating_controls */
14486   true, /* mirrored_controls */
14487   "", /* control_details */
14488   &startrek_get_ctrl_name
14489 };
14490 
startrek_get_ctrl_name(int type)14491 const char *startrek_get_ctrl_name(int type)
14492 {
14493   switch(type)
14494   {
14495     case IPT_BUTTON1: return BTN1 "Fire";
14496     case IPT_BUTTON2: return BTN2 "Thrust";
14497     case IPT_BUTTON3: return BTN3 "Photons";
14498     case IPT_BUTTON4: return BTN4 "Warp";
14499     case IPT_DIAL: return "Rotate Left";
14500     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
14501   } /* end of switch */
14502 
14503   return "";
14504 }
14505 
14506 const struct ControlInfo starwars_ctrl =
14507 {
14508   false, /* 45_degree_rotation for joystick(s) */
14509   false, /* alternating_controls */
14510   true, /* mirrored_controls */
14511   "Buttons correspond to the Trigger and Thumb buttons on the yoke. Aircraft style controls, moving control down moves aiming cursor up.", /* control_details */
14512   &starwars_get_ctrl_name
14513 };
14514 
starwars_get_ctrl_name(int type)14515 const char *starwars_get_ctrl_name(int type)
14516 {
14517   switch(type)
14518   {
14519     case IPT_BUTTON1: return BTN1 "Fire";
14520     case IPT_BUTTON2: return BTN2 "Fire";
14521     case IPT_BUTTON3: return BTN3 "Fire";
14522     case IPT_BUTTON4: return BTN4 "Fire";
14523     case IPT_AD_STICK_X: return "Left";
14524     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
14525     case IPT_AD_STICK_Y: return "Up";
14526     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
14527   } /* end of switch */
14528 
14529   return "";
14530 }
14531 
14532 const struct ControlInfo stargate_ctrl =
14533 {
14534   false, /* 45_degree_rotation for joystick(s) */
14535   true, /* alternating_controls */
14536   true, /* mirrored_controls */
14537   "Joystick is on left side of control panel with reverse button the the right of it so it can be hit with thumb. Fire and thrust are on right side of control panel with smart bomb, inviso, and hyperspace to the left in a 45 degree angle.", /* control_details */
14538   &stargate_get_ctrl_name
14539 };
14540 
stargate_get_ctrl_name(int type)14541 const char *stargate_get_ctrl_name(int type)
14542 {
14543   switch(type)
14544   {
14545     case IPT_BUTTON1: return BTN1 "FIRE";
14546     case IPT_BUTTON2: return BTN2 "THRUST";
14547     case IPT_BUTTON3: return BTN3 "SMART BOMB";
14548     case IPT_BUTTON4: return BTN4 "REVERSE";
14549     case IPT_BUTTON5: return BTN5 "INVISO";
14550     case IPT_BUTTON6: return BTN6 "HYPERSPACE";
14551     case IPT_JOYSTICK_UP: return "Up";
14552     case IPT_JOYSTICK_DOWN: return "Down";
14553   } /* end of switch */
14554 
14555   return "";
14556 }
14557 
14558 const struct ControlInfo sgunner_ctrl =
14559 {
14560   false, /* 45_degree_rotation for joystick(s) */
14561   false, /* alternating_controls */
14562   true, /* mirrored_controls */
14563   "", /* control_details */
14564   &sgunner_get_ctrl_name
14565 };
14566 
sgunner_get_ctrl_name(int type)14567 const char *sgunner_get_ctrl_name(int type)
14568 {
14569   switch(type)
14570   {
14571     case IPT_BUTTON1: return BTN1 "Fire";
14572     case IPT_BUTTON2: return BTN2 "Missile";
14573     case IPT_LIGHTGUN_X: return "Aim Left";
14574     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
14575     case IPT_LIGHTGUN_Y: return "Aim Up";
14576     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
14577   } /* end of switch */
14578 
14579   return "";
14580 }
14581 
14582 const struct ControlInfo sgunner2_ctrl =
14583 {
14584   false, /* 45_degree_rotation for joystick(s) */
14585   false, /* alternating_controls */
14586   true, /* mirrored_controls */
14587   "", /* control_details */
14588   &sgunner2_get_ctrl_name
14589 };
14590 
sgunner2_get_ctrl_name(int type)14591 const char *sgunner2_get_ctrl_name(int type)
14592 {
14593   switch(type)
14594   {
14595     case IPT_BUTTON1: return BTN1 "Fire";
14596     case IPT_BUTTON2: return BTN2 "Missile";
14597     case IPT_LIGHTGUN_X: return "Aim Left";
14598     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
14599     case IPT_LIGHTGUN_Y: return "Aim Up";
14600     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
14601   } /* end of switch */
14602 
14603   return "";
14604 }
14605 
14606 const struct ControlInfo stocker_ctrl =
14607 {
14608   false, /* 45_degree_rotation for joystick(s) */
14609   false, /* alternating_controls */
14610   false, /* mirrored_controls */
14611   "", /* control_details */
14612   &stocker_get_ctrl_name
14613 };
14614 
stocker_get_ctrl_name(int type)14615 const char *stocker_get_ctrl_name(int type)
14616 {
14617   switch(type)
14618   {
14619     case IPT_BUTTON1: return BTN1 "High / Low";
14620     case IPT_DIAL: return "Left";
14621     case (IPT_DIAL + IPT_EXTENSION): return "Right";
14622   } /* end of switch */
14623 
14624   return "";
14625 }
14626 
14627 const struct ControlInfo stratab_ctrl =
14628 {
14629   false, /* 45_degree_rotation for joystick(s) */
14630   true, /* alternating_controls */
14631   true, /* mirrored_controls */
14632   "This game only has one start button. You press it multiple times for up to 4 players. Mame has two player inputs for cocktail modes, so a person must assume that in cocktail mode teams take turns with the two control panels.", /* control_details */
14633   &stratab_get_ctrl_name
14634 };
14635 
stratab_get_ctrl_name(int type)14636 const char *stratab_get_ctrl_name(int type)
14637 {
14638   switch(type)
14639   {
14640     case IPT_BUTTON1: return BTN1 "Hook Left";
14641     case IPT_BUTTON2: return BTN2 "Hook Right";
14642     case IPT_TRACKBALL_Y: return "Up";
14643     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
14644     case IPT_TRACKBALL_X: return "Left";
14645     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
14646   } /* end of switch */
14647 
14648   return "";
14649 }
14650 
14651 const struct ControlInfo stratgyx_ctrl =
14652 {
14653   false, /* 45_degree_rotation for joystick(s) */
14654   true, /* alternating_controls */
14655   true, /* mirrored_controls */
14656   "This game used a very stylish, metal, top-fire joystick.", /* control_details */
14657   &stratgyx_get_ctrl_name
14658 };
14659 
stratgyx_get_ctrl_name(int type)14660 const char *stratgyx_get_ctrl_name(int type)
14661 {
14662   switch(type)
14663   {
14664     case IPT_BUTTON1: return BTN1 "Tank Fire";
14665     case IPT_BUTTON2: return BTN2 "Turrent Rotate Left";
14666     case IPT_BUTTON3: return BTN3 "Turrent Rotate Right";
14667   } /* end of switch */
14668 
14669   return joy4way_labels(type);
14670 }
14671 
14672 const struct ControlInfo sf_ctrl =
14673 {
14674   false, /* 45_degree_rotation for joystick(s) */
14675   false, /* alternating_controls */
14676   true, /* mirrored_controls */
14677   "The original, dedicated, Street Fighter cabinet only had two, giant, semi-analog buttons. How hard the button was pressed determined which of the three attack strengths registered. The conversion kit and second revision of this game used the classic sf2 layout well all know and love.", /* control_details */
14678   &sf_get_ctrl_name
14679 };
14680 
sf_get_ctrl_name(int type)14681 const char *sf_get_ctrl_name(int type)
14682 {
14683   switch(type)
14684   {
14685     case IPT_BUTTON1: return BTN1 "Light Punch";
14686     case IPT_BUTTON2: return BTN2 "Middle Punch";
14687     case IPT_BUTTON3: return BTN3 "Heavy Punch";
14688     case IPT_BUTTON4: return BTN4 "Light Kick";
14689     case IPT_BUTTON5: return BTN5 "Middle Kick";
14690     case IPT_BUTTON6: return BTN6 "Heavy Kick";
14691     case IPT_JOYSTICK_UP: return "Jump";
14692     case IPT_JOYSTICK_DOWN: return "Crouch";
14693     case IPT_JOYSTICK_LEFT: return "Left";
14694     case IPT_JOYSTICK_RIGHT: return "Right";
14695   } /* end of switch */
14696 
14697   return "";
14698 }
14699 
14700 const struct ControlInfo sfa2_ctrl =
14701 {
14702   false, /* 45_degree_rotation for joystick(s) */
14703   false, /* alternating_controls */
14704   true, /* mirrored_controls */
14705   "", /* control_details */
14706   &sfa2_get_ctrl_name
14707 };
14708 
sfa2_get_ctrl_name(int type)14709 const char *sfa2_get_ctrl_name(int type)
14710 {
14711   switch(type)
14712   {
14713     case IPT_BUTTON1: return BTN1 "Jab Punch";
14714     case IPT_BUTTON2: return BTN2 "Strong Punch";
14715     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14716     case IPT_BUTTON4: return BTN4 "Short Kick";
14717     case IPT_BUTTON5: return BTN5 "Strong Kick";
14718     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14719     case IPT_JOYSTICK_UP: return "Jump";
14720     case IPT_JOYSTICK_DOWN: return "Crouch";
14721     case IPT_JOYSTICK_LEFT: return "Left";
14722     case IPT_JOYSTICK_RIGHT: return "Right";
14723   } /* end of switch */
14724 
14725   return "";
14726 }
14727 
14728 const struct ControlInfo sfa3_ctrl =
14729 {
14730   false, /* 45_degree_rotation for joystick(s) */
14731   false, /* alternating_controls */
14732   true, /* mirrored_controls */
14733   "", /* control_details */
14734   &sfa3_get_ctrl_name
14735 };
14736 
sfa3_get_ctrl_name(int type)14737 const char *sfa3_get_ctrl_name(int type)
14738 {
14739   switch(type)
14740   {
14741     case IPT_BUTTON1: return BTN1 "Jab Punch";
14742     case IPT_BUTTON2: return BTN2 "Strong Punch";
14743     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14744     case IPT_BUTTON4: return BTN4 "Short Kick";
14745     case IPT_BUTTON5: return BTN5 "Strong Kick";
14746     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14747     case IPT_JOYSTICK_UP: return "Jump";
14748     case IPT_JOYSTICK_DOWN: return "Crouch";
14749     case IPT_JOYSTICK_LEFT: return "Left";
14750     case IPT_JOYSTICK_RIGHT: return "Right";
14751   } /* end of switch */
14752 
14753   return "";
14754 }
14755 
14756 const struct ControlInfo sfa_ctrl =
14757 {
14758   false, /* 45_degree_rotation for joystick(s) */
14759   false, /* alternating_controls */
14760   true, /* mirrored_controls */
14761   "", /* control_details */
14762   &sfa_get_ctrl_name
14763 };
14764 
sfa_get_ctrl_name(int type)14765 const char *sfa_get_ctrl_name(int type)
14766 {
14767   switch(type)
14768   {
14769     case IPT_BUTTON1: return BTN1 "Jab Punch";
14770     case IPT_BUTTON2: return BTN2 "Strong Punch";
14771     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14772     case IPT_BUTTON4: return BTN4 "Short Kick";
14773     case IPT_BUTTON5: return BTN5 "Strong Kick";
14774     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14775     case IPT_JOYSTICK_UP: return "Jump";
14776     case IPT_JOYSTICK_DOWN: return "Crouch";
14777     case IPT_JOYSTICK_LEFT: return "Left";
14778     case IPT_JOYSTICK_RIGHT: return "Right";
14779   } /* end of switch */
14780 
14781   return "";
14782 }
14783 
14784 
14785 const struct ControlInfo sf2_ctrl =
14786 {
14787   false, /* 45_degree_rotation for joystick(s) */
14788   false, /* alternating_controls */
14789   true, /* mirrored_controls */
14790   "", /* control_details */
14791   &sf2_get_ctrl_name
14792 };
14793 
14794 
sf2_get_ctrl_name(int type)14795 const char *sf2_get_ctrl_name(int type)
14796 {
14797   switch(type)
14798   {
14799     case IPT_BUTTON1: return BTN1 "Jab Punch";
14800     case IPT_BUTTON2: return BTN2 "Strong Punch";
14801     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14802     case IPT_BUTTON4: return BTN4 "Short Kick";
14803     case IPT_BUTTON5: return BTN5 "Forward Kick";
14804     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14805     case IPT_JOYSTICK_UP:    return "Jump";
14806     case IPT_JOYSTICK_DOWN:  return "Crouch";
14807     case IPT_JOYSTICK_LEFT:  return "Left";
14808     case IPT_JOYSTICK_RIGHT: return "Right";
14809   } /* end of switch */
14810 
14811   return "";
14812 }
14813 
14814 const struct ControlInfo sfiii2_ctrl =
14815 {
14816   false, /* 45_degree_rotation for joystick(s) */
14817   false, /* alternating_controls */
14818   true, /* mirrored_controls */
14819   "", /* control_details */
14820   &sfiii2_get_ctrl_name
14821 };
14822 
sfiii2_get_ctrl_name(int type)14823 const char *sfiii2_get_ctrl_name(int type)
14824 {
14825   switch(type)
14826   {
14827     case IPT_BUTTON1: return BTN1 "Jab Punch";
14828     case IPT_BUTTON2: return BTN2 "Strong Punch";
14829     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14830     case IPT_BUTTON4: return BTN4 "Short Kick";
14831     case IPT_BUTTON5: return BTN5 "Strong Kick";
14832     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14833     case IPT_JOYSTICK_UP: return "Jump";
14834     case IPT_JOYSTICK_DOWN: return "Crouch";
14835     case IPT_JOYSTICK_LEFT: return "Left";
14836     case IPT_JOYSTICK_RIGHT: return "Right";
14837   } /* end of switch */
14838 
14839   return "";
14840 }
14841 
14842 const struct ControlInfo sfiii3_ctrl =
14843 {
14844   false, /* 45_degree_rotation for joystick(s) */
14845   false, /* alternating_controls */
14846   true, /* mirrored_controls */
14847   "", /* control_details */
14848   &sfiii3_get_ctrl_name
14849 };
14850 
sfiii3_get_ctrl_name(int type)14851 const char *sfiii3_get_ctrl_name(int type)
14852 {
14853   switch(type)
14854   {
14855     case IPT_BUTTON1: return BTN1 "Jab Punch";
14856     case IPT_BUTTON2: return BTN2 "Strong Punch";
14857     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14858     case IPT_BUTTON4: return BTN4 "Short Kick";
14859     case IPT_BUTTON5: return BTN5 "Strong Kick";
14860     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14861     case IPT_JOYSTICK_UP: return "Jump";
14862     case IPT_JOYSTICK_DOWN: return "Crouch";
14863     case IPT_JOYSTICK_LEFT: return "Left";
14864     case IPT_JOYSTICK_RIGHT: return "Right";
14865   } /* end of switch */
14866 
14867   return "";
14868 }
14869 
14870 const struct ControlInfo sfiii_ctrl =
14871 {
14872   false, /* 45_degree_rotation for joystick(s) */
14873   false, /* alternating_controls */
14874   true, /* mirrored_controls */
14875   "", /* control_details */
14876   &sfiii_get_ctrl_name
14877 };
14878 
sfiii_get_ctrl_name(int type)14879 const char *sfiii_get_ctrl_name(int type)
14880 {
14881   switch(type)
14882   {
14883     case IPT_BUTTON1: return BTN1 "Jab Punch";
14884     case IPT_BUTTON2: return BTN2 "Strong Punch";
14885     case IPT_BUTTON3: return BTN3 "Fierce Punch";
14886     case IPT_BUTTON4: return BTN4 "Short Kick";
14887     case IPT_BUTTON5: return BTN5 "Strong Kick";
14888     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
14889     case IPT_JOYSTICK_UP: return "Jump";
14890     case IPT_JOYSTICK_DOWN: return "Crouch";
14891     case IPT_JOYSTICK_LEFT: return "Left";
14892     case IPT_JOYSTICK_RIGHT: return "Right";
14893   } /* end of switch */
14894 
14895   return "";
14896 }
14897 
14898 const struct ControlInfo sftm_ctrl =
14899 {
14900   false, /* 45_degree_rotation for joystick(s) */
14901   false, /* alternating_controls */
14902   true, /* mirrored_controls */
14903   "", /* control_details */
14904   &sftm_get_ctrl_name
14905 };
14906 
sftm_get_ctrl_name(int type)14907 const char *sftm_get_ctrl_name(int type)
14908 {
14909   switch(type)
14910   {
14911     case IPT_BUTTON1: return BTN1 "Light Punch";
14912     case IPT_BUTTON2: return BTN2 "Middle Punch";
14913     case IPT_BUTTON3: return BTN3 "Heavy Punch";
14914     case IPT_BUTTON4: return BTN4 "Light Kick";
14915     case IPT_BUTTON5: return BTN5 "Middle Kick";
14916     case IPT_BUTTON6: return BTN6 "Heavy Kick";
14917   } /* end of switch */
14918 
14919   return joy4way_labels(type);
14920 }
14921 
14922 const struct ControlInfo strider_ctrl =
14923 {
14924   false, /* 45_degree_rotation for joystick(s) */
14925   false, /* alternating_controls */
14926   true, /* mirrored_controls */
14927   "", /* control_details */
14928   &strider_get_ctrl_name
14929 };
14930 
strider_get_ctrl_name(int type)14931 const char *strider_get_ctrl_name(int type)
14932 {
14933   switch(type)
14934   {
14935     case IPT_BUTTON1: return BTN1 "Sword";
14936     case IPT_BUTTON2: return BTN2 "Jump";
14937   } /* end of switch */
14938 
14939   return joy4way_labels(type);
14940 }
14941 
14942 const struct ControlInfo sbowling_ctrl =
14943 {
14944   false, /* 45_degree_rotation for joystick(s) */
14945   true, /* alternating_controls */
14946   true, /* mirrored_controls */
14947   "", /* control_details */
14948   &sbowling_get_ctrl_name
14949 };
14950 
sbowling_get_ctrl_name(int type)14951 const char *sbowling_get_ctrl_name(int type)
14952 {
14953   switch(type)
14954   {
14955     case IPT_TRACKBALL_X: return "Left";
14956     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
14957     case IPT_TRACKBALL_Y: return "Up";
14958     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
14959   } /* end of switch */
14960 
14961   return "";
14962 }
14963 
14964 const struct ControlInfo strkforc_ctrl =
14965 {
14966   false, /* 45_degree_rotation for joystick(s) */
14967   false, /* alternating_controls */
14968   true, /* mirrored_controls */
14969   "The 'weapon' refers to your secondary weapon. Also note that the start button transforms your ship and on the original panel, the start button was labeled 'Start/Transform'", /* control_details */
14970   &strkforc_get_ctrl_name
14971 };
14972 
strkforc_get_ctrl_name(int type)14973 const char *strkforc_get_ctrl_name(int type)
14974 {
14975   switch(type)
14976   {
14977     case IPT_BUTTON1: return BTN1 "Weapon Select";
14978     case IPT_BUTTON2: return BTN2 "Fire";
14979     case IPT_BUTTON3: return BTN3 "Weapon";
14980   } /* end of switch */
14981 
14982   return joy4way_labels(type);
14983 }
14984 
14985 const struct ControlInfo s1945_ctrl =
14986 {
14987   false, /* 45_degree_rotation for joystick(s) */
14988   false, /* alternating_controls */
14989   true, /* mirrored_controls */
14990   "", /* control_details */
14991   &s1945_get_ctrl_name
14992 };
14993 
s1945_get_ctrl_name(int type)14994 const char *s1945_get_ctrl_name(int type)
14995 {
14996   switch(type)
14997   {
14998     case IPT_BUTTON1: return BTN1 "Shoot";
14999     case IPT_BUTTON2: return BTN2 "Bomb";
15000   } /* end of switch */
15001 
15002   return joy4way_labels(type);
15003 }
15004 
15005 const struct ControlInfo s1945iii_ctrl =
15006 {
15007   false, /* 45_degree_rotation for joystick(s) */
15008   false, /* alternating_controls */
15009   true, /* mirrored_controls */
15010   "", /* control_details */
15011   &s1945iii_get_ctrl_name
15012 };
15013 
s1945iii_get_ctrl_name(int type)15014 const char *s1945iii_get_ctrl_name(int type)
15015 {
15016   switch(type)
15017   {
15018     case IPT_BUTTON1: return BTN1 "Fire";
15019     case IPT_BUTTON2: return BTN2 "Loop";
15020     case IPT_BUTTON3: return BTN3 "Special";
15021   } /* end of switch */
15022 
15023   return joy4way_labels(type);
15024 }
15025 
15026 const struct ControlInfo subs_ctrl =
15027 {
15028   false, /* 45_degree_rotation for joystick(s) */
15029   false, /* alternating_controls */
15030   true, /* mirrored_controls */
15031   "This game is essentially unplayable in mame because in the original game, the two monitors were on opposite ends of the cab. Player 1 couldn't see player 2 and vice-versa. In mame the two monitors are combiend and thus it runs the effect.", /* control_details */
15032   &subs_get_ctrl_name
15033 };
15034 
subs_get_ctrl_name(int type)15035 const char *subs_get_ctrl_name(int type)
15036 {
15037   switch(type)
15038   {
15039     case IPT_BUTTON1: return BTN1 "Fire Torpedo";
15040     case IPT_DIAL: return "Left";
15041     case (IPT_DIAL + IPT_EXTENSION): return "Right";
15042   } /* end of switch */
15043 
15044   return "";
15045 }
15046 
15047 const struct ControlInfo ssriders_ctrl =
15048 {
15049   false, /* 45_degree_rotation for joystick(s) */
15050   false, /* alternating_controls */
15051   true, /* mirrored_controls */
15052   "", /* control_details */
15053   &ssriders_get_ctrl_name
15054 };
15055 
ssriders_get_ctrl_name(int type)15056 const char *ssriders_get_ctrl_name(int type)
15057 {
15058   switch(type)
15059   {
15060     case IPT_BUTTON1: return BTN1 "Shoot";
15061     case IPT_BUTTON2: return BTN2 "Jump";
15062   } /* end of switch */
15063 
15064   return joy4way_labels(type);
15065 }
15066 
15067 const struct ControlInfo sbagman_ctrl =
15068 {
15069   false, /* 45_degree_rotation for joystick(s) */
15070   true, /* alternating_controls */
15071   true, /* mirrored_controls */
15072   "The action button picks things up and drops them.", /* control_details */
15073   &sbagman_get_ctrl_name
15074 };
15075 
sbagman_get_ctrl_name(int type)15076 const char *sbagman_get_ctrl_name(int type)
15077 {
15078   switch(type)
15079   {
15080     case IPT_BUTTON1: return BTN1 "Action";
15081   } /* end of switch */
15082 
15083   return joy4way_labels(type);
15084 }
15085 
15086 const struct ControlInfo sbrkout_ctrl =
15087 {
15088   false, /* 45_degree_rotation for joystick(s) */
15089   true, /* alternating_controls */
15090   true, /* mirrored_controls */
15091   "The original game used a 3-position rotary switch to select between 3 different variations: Progressive, Double, and Cavity.", /* control_details */
15092   &sbrkout_get_ctrl_name
15093 };
15094 
sbrkout_get_ctrl_name(int type)15095 const char *sbrkout_get_ctrl_name(int type)
15096 {
15097   switch(type)
15098   {
15099     case IPT_BUTTON1: return BTN1 "Serve";
15100     case IPT_BUTTON2: return BTN2 "Progressive";
15101     case IPT_BUTTON3: return BTN3 "Double";
15102     case IPT_BUTTON4: return BTN4 "Cavity";
15103     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
15104     case IPT_PADDLE: return "Left";
15105   } /* end of switch */
15106 
15107   return "";
15108 }
15109 
15110 const struct ControlInfo scobra_ctrl =
15111 {
15112   false, /* 45_degree_rotation for joystick(s) */
15113   true, /* alternating_controls */
15114   true, /* mirrored_controls */
15115   "The original CP labelled both buttons as 'Discharge Buttons.'  Sidewinder Missile is a bit of an overstatement for little tiny blips.", /* control_details */
15116   &scobra_get_ctrl_name
15117 };
15118 
scobra_get_ctrl_name(int type)15119 const char *scobra_get_ctrl_name(int type)
15120 {
15121   switch(type)
15122   {
15123     case IPT_BUTTON1: return BTN1 "Sidewinder Missile";
15124     case IPT_BUTTON2: return BTN2 "Bombs";
15125   } /* end of switch */
15126 
15127   return joy4way_labels(type);
15128 }
15129 
15130 const struct ControlInfo scontra_ctrl =
15131 {
15132   false, /* 45_degree_rotation for joystick(s) */
15133   false, /* alternating_controls */
15134   true, /* mirrored_controls */
15135   "", /* control_details */
15136   &scontra_get_ctrl_name
15137 };
15138 
scontra_get_ctrl_name(int type)15139 const char *scontra_get_ctrl_name(int type)
15140 {
15141   switch(type)
15142   {
15143     case IPT_BUTTON1: return BTN1 "Shoot";
15144     case IPT_BUTTON2: return BTN2 "Jump";
15145   } /* end of switch */
15146 
15147   return joy4way_labels(type);
15148 }
15149 
15150 const struct ControlInfo spdodgeb_ctrl =
15151 {
15152   false, /* 45_degree_rotation for joystick(s) */
15153   false, /* alternating_controls */
15154   true, /* mirrored_controls */
15155   "Press boht buttons to jump.", /* control_details */
15156   &spdodgeb_get_ctrl_name
15157 };
15158 
spdodgeb_get_ctrl_name(int type)15159 const char *spdodgeb_get_ctrl_name(int type)
15160 {
15161   switch(type)
15162   {
15163     case IPT_BUTTON1: return BTN1 "Offensive Throw / Defensive Catch";
15164     case IPT_BUTTON2: return BTN2 "offensive Pass / Defensive Duck";
15165   } /* end of switch */
15166 
15167   return joy4way_labels(type);
15168 }
15169 
15170 const struct ControlInfo sgemf_ctrl =
15171 {
15172   false, /* 45_degree_rotation for joystick(s) */
15173   false, /* alternating_controls */
15174   true, /* mirrored_controls */
15175   "", /* control_details */
15176   &sgemf_get_ctrl_name
15177 };
15178 
sgemf_get_ctrl_name(int type)15179 const char *sgemf_get_ctrl_name(int type)
15180 {
15181   switch(type)
15182   {
15183     case IPT_BUTTON1: return BTN1 "Punch";
15184     case IPT_BUTTON2: return BTN2 "Kick";
15185     case IPT_BUTTON3: return BTN3 "Special";
15186   } /* end of switch */
15187 
15188   return joy4way_labels(type);
15189 }
15190 
15191 const struct ControlInfo shimpact_ctrl =
15192 {
15193   false, /* 45_degree_rotation for joystick(s) */
15194   false, /* alternating_controls */
15195   true, /* mirrored_controls */
15196   "Obviously the action depends upon the position you are playing and what team you are on.", /* control_details */
15197   &shimpact_get_ctrl_name
15198 };
15199 
shimpact_get_ctrl_name(int type)15200 const char *shimpact_get_ctrl_name(int type)
15201 {
15202   switch(type)
15203   {
15204     case IPT_BUTTON1: return BTN1 "Action";
15205   } /* end of switch */
15206 
15207   return joy4way_labels(type);
15208 }
15209 
15210 const struct ControlInfo smgp_ctrl =
15211 {
15212   false, /* 45_degree_rotation for joystick(s) */
15213   false, /* alternating_controls */
15214   false, /* mirrored_controls */
15215   "The shifter switches are formula 1 style, meaning that they are mounted behind the wheel for quick shifting.", /* control_details */
15216   &smgp_get_ctrl_name
15217 };
15218 
smgp_get_ctrl_name(int type)15219 const char *smgp_get_ctrl_name(int type)
15220 {
15221   switch(type)
15222   {
15223     case IPT_BUTTON1: return BTN1 "Shift Down";
15224     case IPT_BUTTON2: return BTN2 "Shift Up";
15225     case IPT_PADDLE: return "Left";
15226     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
15227     case IPT_PEDAL: return "Accelerate";
15228     case IPT_PEDAL2: return "Brake";
15229   } /* end of switch */
15230 
15231   return "";
15232 }
15233 
15234 const struct ControlInfo superpac_ctrl =
15235 {
15236   false, /* 45_degree_rotation for joystick(s) */
15237   true, /* alternating_controls */
15238   true, /* mirrored_controls */
15239   "", /* control_details */
15240   &superpac_get_ctrl_name
15241 };
15242 
superpac_get_ctrl_name(int type)15243 const char *superpac_get_ctrl_name(int type)
15244 {
15245   switch(type)
15246   {
15247     case IPT_BUTTON1: return BTN1 "Super Speed";
15248   } /* end of switch */
15249 
15250   return joy4way_labels(type);
15251 }
15252 
15253 const struct ControlInfo spbactn_ctrl =
15254 {
15255   false, /* 45_degree_rotation for joystick(s) */
15256   false, /* alternating_controls */
15257   false, /* mirrored_controls */
15258   "This game was actually a 'video pinball' table with real controls and everything. Note that this game is gonna be unplayable on a panel without pinball buttons.", /* control_details */
15259   &spbactn_get_ctrl_name
15260 };
15261 
spbactn_get_ctrl_name(int type)15262 const char *spbactn_get_ctrl_name(int type)
15263 {
15264   switch(type)
15265   {
15266     case IPT_BUTTON1: return BTN1 "Left Flipper";
15267     case IPT_BUTTON2: return BTN2 "Right Flipper";
15268     case IPT_BUTTON3: return BTN3 "Plunger";
15269   } /* end of switch */
15270 
15271   return "";
15272 }
15273 
15274 const struct ControlInfo spnchout_ctrl =
15275 {
15276   false, /* 45_degree_rotation for joystick(s) */
15277   false, /* alternating_controls */
15278   false, /* mirrored_controls */
15279   "Each button has a dual function. They are labeled in the order of netrual postion and up respectively. The Hook button only deleivers the knock out blow when the screen flashes to use it. The Hook button is a huge plunger button, similar to what you would see on a gameshow.", /* control_details */
15280   &spnchout_get_ctrl_name
15281 };
15282 
spnchout_get_ctrl_name(int type)15283 const char *spnchout_get_ctrl_name(int type)
15284 {
15285   switch(type)
15286   {
15287     case IPT_BUTTON1: return BTN1 "Left Blow to Head/Body";
15288     case IPT_BUTTON2: return BTN2 "Right Blow to Head/Body";
15289     case IPT_BUTTON3: return BTN3 "Uppercut / Hook / Knock Out Blow";
15290     case IPT_JOYSTICK_UP: return "Guard Up";
15291     case IPT_JOYSTICK_DOWN: return "Guard Down";
15292     case IPT_JOYSTICK_LEFT: return "Dodge Left";
15293     case IPT_JOYSTICK_RIGHT: return "Dodge Right";
15294   } /* end of switch */
15295 
15296   return "";
15297 }
15298 
15299 const struct ControlInfo sqix_ctrl =
15300 {
15301   false, /* 45_degree_rotation for joystick(s) */
15302   true, /* alternating_controls */
15303   true, /* mirrored_controls */
15304   "", /* control_details */
15305   &sqix_get_ctrl_name
15306 };
15307 
sqix_get_ctrl_name(int type)15308 const char *sqix_get_ctrl_name(int type)
15309 {
15310   switch(type)
15311   {
15312     case IPT_BUTTON1: return BTN1 "Draw";
15313   } /* end of switch */
15314 
15315   return joy4way_labels(type);
15316 }
15317 
15318 const struct ControlInfo sspeedr_ctrl =
15319 {
15320   false, /* 45_degree_rotation for joystick(s) */
15321   false, /* alternating_controls */
15322   false, /* mirrored_controls */
15323   "Please note that with default mame mappings, the shifter and gas pedal will interfere with each other.", /* control_details */
15324   &sspeedr_get_ctrl_name
15325 };
15326 
sspeedr_get_ctrl_name(int type)15327 const char *sspeedr_get_ctrl_name(int type)
15328 {
15329   switch(type)
15330   {
15331     case IPT_BUTTON1: return BTN1 "High / Low";
15332     case IPT_DIAL: return "Left";
15333     case (IPT_DIAL + IPT_EXTENSION): return "Right";
15334     case IPT_PEDAL: return "Accelerate";
15335   } /* end of switch */
15336 
15337   return "";
15338 }
15339 
15340 const struct ControlInfo ssprint_ctrl =
15341 {
15342   false, /* 45_degree_rotation for joystick(s) */
15343   false, /* alternating_controls */
15344   true, /* mirrored_controls */
15345   "Player one is blue, Player 2 is Red, Player 3 is yellow.", /* control_details */
15346   &ssprint_get_ctrl_name
15347 };
15348 
ssprint_get_ctrl_name(int type)15349 const char *ssprint_get_ctrl_name(int type)
15350 {
15351   switch(type)
15352   {
15353     case (IPT_DIAL + IPT_EXTENSION): return "Right";
15354     case IPT_DIAL: return "Left";
15355     case IPT_PEDAL: return "Gas";
15356   } /* end of switch */
15357 
15358   return "";
15359 }
15360 
15361 const struct ControlInfo ssf2_ctrl =
15362 {
15363   false, /* 45_degree_rotation for joystick(s) */
15364   false, /* alternating_controls */
15365   true, /* mirrored_controls */
15366   "The ssf2 cpo image I found was very fuzzy. If you have a DEDICATED ssf2 cpo image please correct any mistakes I might have made. The labels to this game are very important as not only is it one of the very last dedicated capcom fighter cabs, but it's labels become the 'universal standard' for future capcom fighters.", /* control_details */
15367   &ssf2_get_ctrl_name
15368 };
15369 
ssf2_get_ctrl_name(int type)15370 const char *ssf2_get_ctrl_name(int type)
15371 {
15372   switch(type)
15373   {
15374     case IPT_BUTTON1: return BTN1 "Jab Punch";
15375     case IPT_BUTTON2: return BTN2 "Strong Punch";
15376     case IPT_BUTTON3: return BTN3 "Fierce Punch";
15377     case IPT_BUTTON4: return BTN4 "Short Kick";
15378     case IPT_BUTTON5: return BTN5 "Strong Kick";
15379     case IPT_BUTTON6: return BTN6 "Roundhouse Kick";
15380     case IPT_JOYSTICK_UP: return "Jump";
15381     case IPT_JOYSTICK_DOWN: return "Crouch";
15382     case IPT_JOYSTICK_LEFT: return "Left";
15383     case IPT_JOYSTICK_RIGHT: return "Right";
15384   } /* end of switch */
15385 
15386   return "";
15387 }
15388 
15389 const struct ControlInfo sstrike_ctrl =
15390 {
15391   false, /* 45_degree_rotation for joystick(s) */
15392   true, /* alternating_controls */
15393   true, /* mirrored_controls */
15394   "The 'trackball' actually consists of a small scale version of the beginning of a bowling alley and a cue ball with various sensors to track it's movement. This game basically recycles the hardware of Slick Shot into a bowling game.", /* control_details */
15395   &sstrike_get_ctrl_name
15396 };
15397 
sstrike_get_ctrl_name(int type)15398 const char *sstrike_get_ctrl_name(int type)
15399 {
15400   switch(type)
15401   {
15402     case IPT_BUTTON1: return BTN1 "Right Hook";
15403     case IPT_BUTTON2: return BTN2 "Left Hook";
15404     case IPT_TRACKBALL_X: return "Left";
15405     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
15406     case IPT_TRACKBALL_Y: return "Up";
15407     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
15408   } /* end of switch */
15409 
15410   return "";
15411 }
15412 
15413 const struct ControlInfo stonebal_ctrl =
15414 {
15415   false, /* 45_degree_rotation for joystick(s) */
15416   false, /* alternating_controls */
15417   true,  /* mirrored_controls */
15418   "",    /* control_details */
15419   &stonebal_get_ctrl_name
15420 };
15421 
stonebal_get_ctrl_name(int type)15422 const char *stonebal_get_ctrl_name(int type)
15423 {
15424   switch(type)
15425   {
15426     case IPT_BUTTON1: return BTN1 "Shoot/Fight";
15427     case IPT_BUTTON2: return BTN2 "Pass/Tackle";
15428     case IPT_BUTTON3: return BTN3 "Push";
15429   } /* end of switch */
15430 
15431   return joy4way_labels(type);
15432 }
15433 
15434 const struct ControlInfo streakng_ctrl =
15435 {
15436   false, /* 45_degree_rotation for joystick(s) */
15437   false, /* alternating_controls */
15438   true,  /* mirrored_controls */
15439   "",    /* control_details */
15440   &streakng_get_ctrl_name
15441 };
15442 
streakng_get_ctrl_name(int type)15443 const char *streakng_get_ctrl_name(int type)
15444 {
15445   return joy4way_labels(type);
15446 }
15447 
15448 const struct ControlInfo szaxxon_ctrl =
15449 {
15450   false, /* 45_degree_rotation for joystick(s) */
15451   true, /* alternating_controls */
15452   true, /* mirrored_controls */
15453   "The control panel had duplicate Fire buttons on the panel, as well as the joystick trigger button. The Joystick had an LED that would light up when the trigger was pulled. Aircraft style controls - Pulling back on the joystick causes aircraft to climb.", /* control_details */
15454   &szaxxon_get_ctrl_name
15455 };
15456 
szaxxon_get_ctrl_name(int type)15457 const char *szaxxon_get_ctrl_name(int type)
15458 {
15459   switch(type)
15460   {
15461     case IPT_BUTTON1: return BTN1 "Fire";
15462   } /* end of switch */
15463 
15464   return joy4way_labels(type);
15465 }
15466 
15467 const struct ControlInfo superman_ctrl =
15468 {
15469   false, /* 45_degree_rotation for joystick(s) */
15470   false, /* alternating_controls */
15471   true, /* mirrored_controls */
15472   "Hold Punch button down momentarily to release Blast Punch. During shooting scenes the Kick button actually emits Heat Vision instead of kicking.", /* control_details */
15473   &superman_get_ctrl_name
15474 };
15475 
superman_get_ctrl_name(int type)15476 const char *superman_get_ctrl_name(int type)
15477 {
15478   switch(type)
15479   {
15480     case IPT_BUTTON1: return BTN1 "Punch";
15481     case IPT_BUTTON2: return BTN2 "Kick";
15482   } /* end of switch */
15483 
15484   return joy4way_labels(type);
15485 }
15486 
15487 const struct ControlInfo swimmer_ctrl =
15488 {
15489   false, /* 45_degree_rotation for joystick(s) */
15490   true, /* alternating_controls */
15491   true, /* mirrored_controls */
15492   "", /* control_details */
15493   &swimmer_get_ctrl_name
15494 };
15495 
swimmer_get_ctrl_name(int type)15496 const char *swimmer_get_ctrl_name(int type)
15497 {
15498   switch(type)
15499   {
15500     case IPT_BUTTON1: return BTN1 "Dive";
15501   } /* end of switch */
15502 
15503   return joy4way_labels(type);
15504 }
15505 
15506 const struct ControlInfo tnk3_ctrl =
15507 {
15508   false, /* 45_degree_rotation for joystick(s) */
15509   true, /* alternating_controls */
15510   true, /* mirrored_controls */
15511   "This rotary is a unique one. It almost looks like a dial at first glance, but the dial can also be shifted in 8 directions, just like a rotary 8-way.", /* control_details */
15512   &tnk3_get_ctrl_name
15513 };
15514 
tnk3_get_ctrl_name(int type)15515 const char *tnk3_get_ctrl_name(int type)
15516 {
15517   switch(type)
15518   {
15519     case IPT_BUTTON1: return BTN1 "Fire";
15520     case IPT_BUTTON2: return BTN2 "Cannon";
15521     case IPT_DIAL: return "Aim Left";
15522     case (IPT_DIAL + IPT_EXTENSION): return "Aim Right";
15523   } /* end of switch */
15524 
15525   return joy4way_labels(type);
15526 }
15527 
15528 const struct ControlInfo tailg_ctrl =
15529 {
15530   false, /* 45_degree_rotation for joystick(s) */
15531   false, /* alternating_controls */
15532   false, /* mirrored_controls */
15533   "The original game had an ambidexterous setup. The controls were setup as Shield, Fire, Site Control(Joystick), Fire, Shield.", /* control_details */
15534   &tailg_get_ctrl_name
15535 };
15536 
tailg_get_ctrl_name(int type)15537 const char *tailg_get_ctrl_name(int type)
15538 {
15539   switch(type)
15540   {
15541     case IPT_BUTTON1: return BTN1 "Fire";
15542     case IPT_BUTTON2: return BTN2 "Shield";
15543     case IPT_AD_STICK_X: return "Left";
15544     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
15545     case IPT_AD_STICK_Y: return "Up";
15546     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
15547   } /* end of switch */
15548 
15549   return "";
15550 }
15551 
15552 const struct ControlInfo tank8_ctrl =
15553 {
15554   false, /* 45_degree_rotation for joystick(s) */
15555   false, /* alternating_controls */
15556   true, /* mirrored_controls */
15557   "Note that this game lacks any labels. This is probably due to the self-explainatory layout. Also not that oddly enough, on this game the trigger button is NOT mirroed to the left stick. The only trigger is on the right one.", /* control_details */
15558   &tank8_get_ctrl_name
15559 };
15560 
tank8_get_ctrl_name(int type)15561 const char *tank8_get_ctrl_name(int type)
15562 {
15563   switch(type)
15564   {
15565     case IPT_BUTTON1: return BTN1 "Fire";
15566     case IPT_JOYSTICKLEFT_UP: return "Left Tread Forward";
15567     case IPT_JOYSTICKLEFT_DOWN: return "Left Tread Backward";
15568     case IPT_JOYSTICKRIGHT_UP: return "Right Tread Forward";
15569     case IPT_JOYSTICKRIGHT_DOWN: return "Right Tread Backward";
15570   } /* end of switch */
15571 
15572   return "";
15573 }
15574 
15575 const struct ControlInfo tankbatt_ctrl =
15576 {
15577   false, /* 45_degree_rotation for joystick(s) */
15578   true, /* alternating_controls */
15579   true, /* mirrored_controls */
15580   "", /* control_details */
15581   &tankbatt_get_ctrl_name
15582 };
15583 
tankbatt_get_ctrl_name(int type)15584 const char *tankbatt_get_ctrl_name(int type)
15585 {
15586   switch(type)
15587   {
15588     case IPT_BUTTON1: return BTN1 "Fire";
15589   } /* end of switch */
15590 
15591   return joy4way_labels(type);
15592 }
15593 
15594 const struct ControlInfo tapper_ctrl =
15595 {
15596   false, /* 45_degree_rotation for joystick(s) */
15597   true, /* alternating_controls */
15598   true, /* mirrored_controls */
15599   "This game used a real beer tap instead of a shifter. You pull down on the tap to pour and release to serve. In mame it's emulated as a single button.", /* control_details */
15600   &tapper_get_ctrl_name
15601 };
15602 
tapper_get_ctrl_name(int type)15603 const char *tapper_get_ctrl_name(int type)
15604 {
15605   switch(type)
15606   {
15607     case IPT_BUTTON1: return BTN1 "Pour / Serve";
15608   } /* end of switch */
15609 
15610   return joy4way_labels(type);
15611 }
15612 
15613 const struct ControlInfo targ_ctrl =
15614 {
15615   false, /* 45_degree_rotation for joystick(s) */
15616   true, /* alternating_controls */
15617   true, /* mirrored_controls */
15618   "", /* control_details */
15619   &targ_get_ctrl_name
15620 };
15621 
targ_get_ctrl_name(int type)15622 const char *targ_get_ctrl_name(int type)
15623 {
15624   switch(type)
15625   {
15626     case IPT_BUTTON1: return BTN1 "Fire";
15627   } /* end of switch */
15628 
15629   return joy4way_labels(type);
15630 }
15631 
15632 const struct ControlInfo tazmania_ctrl =
15633 {
15634   false, /* 45_degree_rotation for joystick(s) */
15635   true, /* alternating_controls */
15636   true, /* mirrored_controls */
15637   "", /* control_details */
15638   &tazmania_get_ctrl_name
15639 };
15640 
tazmania_get_ctrl_name(int type)15641 const char *tazmania_get_ctrl_name(int type)
15642 {
15643   switch(type)
15644   {
15645     case IPT_BUTTON1: return BTN1 "Fire";
15646     case IPT_BUTTON2: return BTN2 "Zapper";
15647   } /* end of switch */
15648 
15649   return joy4way_labels(type);
15650 }
15651 
15652 const struct ControlInfo tbowl_ctrl =
15653 {
15654   false, /* 45_degree_rotation for joystick(s) */
15655   false, /* alternating_controls */
15656   true, /* mirrored_controls */
15657   "", /* control_details */
15658   &tbowl_get_ctrl_name
15659 };
15660 
tbowl_get_ctrl_name(int type)15661 const char *tbowl_get_ctrl_name(int type)
15662 {
15663   switch(type)
15664   {
15665     case IPT_BUTTON1: return BTN1 "Start / Jump";
15666     case IPT_BUTTON2: return BTN2 "Snap / Pass / Tackle / Kick";
15667   } /* end of switch */
15668 
15669   return joy4way_labels(type);
15670 }
15671 
15672 const struct ControlInfo tmnt_ctrl =
15673 {
15674   false, /* 45_degree_rotation for joystick(s) */
15675   false, /* alternating_controls */
15676   true, /* mirrored_controls */
15677   "Pressing both buttons does a special attack.", /* control_details */
15678   &tmnt_get_ctrl_name
15679 };
15680 
tmnt_get_ctrl_name(int type)15681 const char *tmnt_get_ctrl_name(int type)
15682 {
15683   switch(type)
15684   {
15685     case IPT_BUTTON1: return BTN1 "Jump";
15686     case IPT_BUTTON2: return BTN2 "Attack";
15687   } /* end of switch */
15688 
15689   return joy4way_labels(type);
15690 }
15691 
15692 const struct ControlInfo tmnt2_ctrl =
15693 {
15694   false, /* 45_degree_rotation for joystick(s) */
15695   false, /* alternating_controls */
15696   true, /* mirrored_controls */
15697   "Both buttons do a special attack.", /* control_details */
15698   &tmnt2_get_ctrl_name
15699 };
15700 
tmnt2_get_ctrl_name(int type)15701 const char *tmnt2_get_ctrl_name(int type)
15702 {
15703   switch(type)
15704   {
15705     case IPT_BUTTON1: return BTN1 "Jump";
15706     case IPT_BUTTON2: return BTN2 "Attack";
15707   } /* end of switch */
15708 
15709   return joy4way_labels(type);
15710 }
15711 
15712 const struct ControlInfo tehkanwc_ctrl =
15713 {
15714   false, /* 45_degree_rotation for joystick(s) */
15715   false, /* alternating_controls */
15716   true, /* mirrored_controls */
15717   "Two buttons were usually wired to the same single button input per player, one on each side of the TB. Mame has a hack so you can play with 8-way joyaticks, but the original had trackballs /* control_details */ mame also has the trackballs, but since no keys are mapped to the TBs (to enable the joystick hack), the TBs don't show in the tab input menu. There apparently were joystick bootlegs of this game; mame only has one version, so the bootlegs might have been hardware hacks no just the inputs (or mame is missing the different ROMs).", /* control_details */
15718   &tehkanwc_get_ctrl_name
15719 };
15720 
tehkanwc_get_ctrl_name(int type)15721 const char *tehkanwc_get_ctrl_name(int type)
15722 {
15723   switch(type)
15724   {
15725     case IPT_BUTTON1: return BTN1 "Kick";
15726     case IPT_TRACKBALL_X: return "Left";
15727     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
15728     case IPT_TRACKBALL_Y: return "Up";
15729     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
15730   } /* end of switch */
15731 
15732   return "";
15733 }
15734 
15735 const struct ControlInfo tekken_ctrl =
15736 {
15737   false, /* 45_degree_rotation for joystick(s) */
15738   false, /* alternating_controls */
15739   true, /* mirrored_controls */
15740   "The cpo itself in this game labels the punch and kick buttons as just 'punch' and 'kick' grouped. The bezel labes them in detail. Please note that the punch buttons are on the top row of the tekken games, so remap accordingly.", /* control_details */
15741   &tekken_get_ctrl_name
15742 };
15743 
tekken_get_ctrl_name(int type)15744 const char *tekken_get_ctrl_name(int type)
15745 {
15746   switch(type)
15747   {
15748     case IPT_BUTTON1: return BTN1 "Left Punch";
15749     case IPT_BUTTON2: return BTN2 "Right Punch";
15750     case IPT_BUTTON3: return BTN3 "Left Kick";
15751     case IPT_BUTTON4: return BTN4 "Right Kick";
15752   } /* end of switch */
15753 
15754   return joy4way_labels(type);
15755 }
15756 
15757 const struct ControlInfo tekken2_ctrl =
15758 {
15759   false, /* 45_degree_rotation for joystick(s) */
15760   false, /* alternating_controls */
15761   true, /* mirrored_controls */
15762   "The cpo itself in this game labels the punch and kick buttons as just 'punch' and 'kick' grouped. The bezel labes them in detail. Please note that the punch buttons are on the top row of the tekken games, so remap accordingly.", /* control_details */
15763   &tekken2_get_ctrl_name
15764 };
15765 
tekken2_get_ctrl_name(int type)15766 const char *tekken2_get_ctrl_name(int type)
15767 {
15768   switch(type)
15769   {
15770     case IPT_BUTTON1: return BTN1 "Left Punch";
15771     case IPT_BUTTON2: return BTN2 "Right Punch";
15772     case IPT_BUTTON3: return BTN3 "Left Kick";
15773     case IPT_BUTTON4: return BTN4 "Right Kick";
15774   } /* end of switch */
15775 
15776   return joy4way_labels(type);
15777 }
15778 
15779 const struct ControlInfo tekken3_ctrl =
15780 {
15781   false, /* 45_degree_rotation for joystick(s) */
15782   false, /* alternating_controls */
15783   true, /* mirrored_controls */
15784   "The cpo itself in this game labels the punch and kick buttons as just 'punch' and 'kick' grouped. The bezel labes them in detail. Please note that the punch buttons are on the top row of the tekken games, so remap accordingly.", /* control_details */
15785   &tekken3_get_ctrl_name
15786 };
15787 
tekken3_get_ctrl_name(int type)15788 const char *tekken3_get_ctrl_name(int type)
15789 {
15790   switch(type)
15791   {
15792     case IPT_BUTTON1: return BTN1 "Left Punch";
15793     case IPT_BUTTON2: return BTN2 "Right Punch";
15794     case IPT_BUTTON3: return BTN3 "Left Kick";
15795     case IPT_BUTTON4: return BTN4 "Right Kick";
15796   } /* end of switch */
15797 
15798   return joy4way_labels(type);
15799 }
15800 
15801 const struct ControlInfo tempest_ctrl =
15802 {
15803   false, /* 45_degree_rotation for joystick(s) */
15804   true, /* alternating_controls */
15805   true, /* mirrored_controls */
15806   "Super Zapper kills all enemies. Three Zaps per level.", /* control_details */
15807   &tempest_get_ctrl_name
15808 };
15809 
tempest_get_ctrl_name(int type)15810 const char *tempest_get_ctrl_name(int type)
15811 {
15812   switch(type)
15813   {
15814     case IPT_BUTTON1: return BTN1 "Fire";
15815     case IPT_BUTTON2: return BTN2 "Super Zapper";
15816     case IPT_DIAL: return "Left";
15817     case (IPT_DIAL + IPT_EXTENSION): return "Right";
15818   } /* end of switch */
15819 
15820   return "";
15821 }
15822 
15823 const struct ControlInfo tengai_ctrl =
15824 {
15825   false, /* 45_degree_rotation for joystick(s) */
15826   false, /* alternating_controls */
15827   true, /* mirrored_controls */
15828   "Mame lists 3 buttons although only 2 actually work", /* control_details */
15829   &tengai_get_ctrl_name
15830 };
15831 
tengai_get_ctrl_name(int type)15832 const char *tengai_get_ctrl_name(int type)
15833 {
15834   switch(type)
15835   {
15836     case IPT_BUTTON1: return BTN1 "Fire";
15837     case IPT_BUTTON2: return BTN2 "Bomb";
15838     case IPT_BUTTON3: return BTN3 "??";
15839   } /* end of switch */
15840 
15841   return joy4way_labels(type);
15842 }
15843 
15844 const struct ControlInfo term2_ctrl =
15845 {
15846   false, /* 45_degree_rotation for joystick(s) */
15847   false, /* alternating_controls */
15848   true, /* mirrored_controls */
15849   "", /* control_details */
15850   &term2_get_ctrl_name
15851 };
15852 
term2_get_ctrl_name(int type)15853 const char *term2_get_ctrl_name(int type)
15854 {
15855   switch(type)
15856   {
15857     case IPT_BUTTON1: return BTN1 "Trigger";
15858     case IPT_BUTTON2: return BTN2 "Bomb";
15859     case IPT_LIGHTGUN_X: return "Aim Left";
15860     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
15861     case IPT_LIGHTGUN_Y: return "Aim Up";
15862     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
15863   } /* end of switch */
15864 
15865   return "";
15866 }
15867 
15868 const struct ControlInfo terracre_ctrl =
15869 {
15870   false, /* 45_degree_rotation for joystick(s) */
15871   true, /* alternating_controls */
15872   true, /* mirrored_controls */
15873   "", /* control_details */
15874   &terracre_get_ctrl_name
15875 };
15876 
terracre_get_ctrl_name(int type)15877 const char *terracre_get_ctrl_name(int type)
15878 {
15879   switch(type)
15880   {
15881     case IPT_BUTTON1: return BTN1 "Fire";
15882     case IPT_BUTTON2: return BTN2 "Formation";
15883   } /* end of switch */
15884 
15885   return joy4way_labels(type);
15886 }
15887 
15888 const struct ControlInfo terraf_ctrl =
15889 {
15890   false, /* 45_degree_rotation for joystick(s) */
15891   true, /* alternating_controls */
15892   true, /* mirrored_controls */
15893   "", /* control_details */
15894   &terraf_get_ctrl_name
15895 };
15896 
terraf_get_ctrl_name(int type)15897 const char *terraf_get_ctrl_name(int type)
15898 {
15899   switch(type)
15900   {
15901     case IPT_BUTTON1: return BTN1 "Fire";
15902     case IPT_BUTTON2: return BTN2 "Formation";
15903   } /* end of switch */
15904 
15905   return joy4way_labels(type);
15906 }
15907 
15908 const struct ControlInfo atetris_ctrl =
15909 {
15910   false, /* 45_degree_rotation for joystick(s) */
15911   false, /* alternating_controls */
15912   true, /* mirrored_controls */
15913   "Atari Tetris uses a 4-way joystick, though only 3 positions are connected/used (left,right,down). Also the rotate button starts the game. We don't label it start though because on every single tetris machine there is a seperate start button which is apparently wired to button 1 to avoid confusion.", /* control_details */
15914   &atetris_get_ctrl_name
15915 };
15916 
atetris_get_ctrl_name(int type)15917 const char *atetris_get_ctrl_name(int type)
15918 {
15919   switch(type)
15920   {
15921     case IPT_BUTTON1: return BTN1 "Rotate";
15922     case IPT_JOYSTICK_RIGHT: return "Right";
15923     case IPT_JOYSTICK_LEFT: return "Left";
15924     case IPT_JOYSTICK_DOWN: return "Down";
15925   } /* end of switch */
15926 
15927   return "";
15928 }
15929 
15930 const struct ControlInfo tetris_ctrl =
15931 {
15932   false, /* 45_degree_rotation for joystick(s) */
15933   false, /* alternating_controls */
15934   true, /* mirrored_controls */
15935   "", /* control_details */
15936   &tetris_get_ctrl_name
15937 };
15938 
tetris_get_ctrl_name(int type)15939 const char *tetris_get_ctrl_name(int type)
15940 {
15941   switch(type)
15942   {
15943     case IPT_BUTTON1: return BTN1 "Rotate";
15944     case IPT_JOYSTICK_DOWN: return "Drop";
15945     case IPT_JOYSTICK_LEFT: return "Left";
15946     case IPT_JOYSTICK_RIGHT: return "Right";
15947   } /* end of switch */
15948 
15949   return "";
15950 }
15951 
15952 const struct ControlInfo tetrisp_ctrl =
15953 {
15954   false, /* 45_degree_rotation for joystick(s) */
15955   false, /* alternating_controls */
15956   true, /* mirrored_controls */
15957   "", /* control_details */
15958   &tetrisp_get_ctrl_name
15959 };
15960 
tetrisp_get_ctrl_name(int type)15961 const char *tetrisp_get_ctrl_name(int type)
15962 {
15963   switch(type)
15964   {
15965     case IPT_BUTTON1: return BTN1 "Rotate";
15966     case IPT_BUTTON2: return BTN2 "Rotate";
15967   } /* end of switch */
15968 
15969   return joy4way_labels(type);
15970 }
15971 
15972 const struct ControlInfo tetrisp2_ctrl =
15973 {
15974   false, /* 45_degree_rotation for joystick(s) */
15975   false, /* alternating_controls */
15976   true, /* mirrored_controls */
15977   "As everybody knows how to play tetris by the time this game was relased, the controls are completely un-labeled on the real panel.", /* control_details */
15978   &tetrisp2_get_ctrl_name
15979 };
15980 
tetrisp2_get_ctrl_name(int type)15981 const char *tetrisp2_get_ctrl_name(int type)
15982 {
15983   switch(type)
15984   {
15985     case IPT_BUTTON1: return BTN1 "Rotate Clockwise";
15986     case IPT_BUTTON2: return BTN2 "Rotate Anti Clockwise";
15987     case IPT_BUTTON3: return BTN3 "Bomb";
15988     case IPT_JOYSTICK_DOWN: return "Drop";
15989     case IPT_JOYSTICK_LEFT: return "Left";
15990     case IPT_JOYSTICK_RIGHT: return "Right";
15991   } /* end of switch */
15992 
15993   return "";
15994 }
15995 
15996 const struct ControlInfo ctribe_ctrl =
15997 {
15998   false, /* 45_degree_rotation for joystick(s) */
15999   false, /* alternating_controls */
16000   true, /* mirrored_controls */
16001   "", /* control_details */
16002   &ctribe_get_ctrl_name
16003 };
16004 
ctribe_get_ctrl_name(int type)16005 const char *ctribe_get_ctrl_name(int type)
16006 {
16007   switch(type)
16008   {
16009     case IPT_BUTTON1: return BTN1 "Punch";
16010     case IPT_BUTTON2: return BTN2 "Kick";
16011   } /* end of switch */
16012 
16013   return joy4way_labels(type);
16014 }
16015 
16016 const struct ControlInfo elecyoyo_ctrl =
16017 {
16018   false, /* 45_degree_rotation for joystick(s) */
16019   true, /* alternating_controls */
16020   true, /* mirrored_controls */
16021   "", /* control_details */
16022   &elecyoyo_get_ctrl_name
16023 };
16024 
elecyoyo_get_ctrl_name(int type)16025 const char *elecyoyo_get_ctrl_name(int type)
16026 {
16027   return joy4way_labels(type);
16028 }
16029 
16030 const struct ControlInfo esb_ctrl =
16031 {
16032   false, /* 45_degree_rotation for joystick(s) */
16033   false, /* alternating_controls */
16034   true, /* mirrored_controls */
16035   "Buttons 1 and 4 correspond to the Yoke triggers. Buttons 2 and 3 correspond to the Yoke thumb buttons. These shoot TOW cables on the Probots stages and Fire on the other stages. Game uses aircraft style controls, i.e. pulling the yoke grips down in MAME causes the cursor to move upward.", /* control_details */
16036   &esb_get_ctrl_name
16037 };
16038 
esb_get_ctrl_name(int type)16039 const char *esb_get_ctrl_name(int type)
16040 {
16041   switch(type)
16042   {
16043     case IPT_BUTTON1: return BTN1 "Fire";
16044     case IPT_BUTTON2: return BTN2 "Fire / Shoot TOW Cable";
16045     case IPT_BUTTON3: return BTN3 "Fire / Shoot TOW Cable";
16046     case IPT_BUTTON4: return BTN4 "Fire";
16047     case IPT_AD_STICK_Y: return "Up";
16048     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
16049     case IPT_AD_STICK_X: return "Left";
16050     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
16051   } /* end of switch */
16052 
16053   return "";
16054 }
16055 
16056 const struct ControlInfo theend_ctrl =
16057 {
16058   false, /* 45_degree_rotation for joystick(s) */
16059   true, /* alternating_controls */
16060   true, /* mirrored_controls */
16061   "", /* control_details */
16062   &theend_get_ctrl_name
16063 };
16064 
theend_get_ctrl_name(int type)16065 const char *theend_get_ctrl_name(int type)
16066 {
16067   switch(type)
16068   {
16069     case IPT_BUTTON1: return BTN1 "Fire";
16070   } /* end of switch */
16071 
16072   return joy2way_labels(type);
16073 }
16074 
16075 const struct ControlInfo lkage_ctrl =
16076 {
16077   false, /* 45_degree_rotation for joystick(s) */
16078   true, /* alternating_controls */
16079   true, /* mirrored_controls */
16080   "", /* control_details */
16081   &lkage_get_ctrl_name
16082 };
16083 
lkage_get_ctrl_name(int type)16084 const char *lkage_get_ctrl_name(int type)
16085 {
16086   switch(type)
16087   {
16088     case IPT_BUTTON1: return BTN1 "Sword";
16089     case IPT_BUTTON2: return BTN2 "Star Knives";
16090   } /* end of switch */
16091 
16092   return joy4way_labels(type);
16093 }
16094 
16095 const struct ControlInfo mainevt_ctrl =
16096 {
16097   false, /* 45_degree_rotation for joystick(s) */
16098   false, /* alternating_controls */
16099   true, /* mirrored_controls */
16100   "The action button was one of those huge, round, lighted buttons.", /* control_details */
16101   &mainevt_get_ctrl_name
16102 };
16103 
mainevt_get_ctrl_name(int type)16104 const char *mainevt_get_ctrl_name(int type)
16105 {
16106   switch(type)
16107   {
16108     case IPT_BUTTON1: return BTN1 "Action";
16109     case IPT_BUTTON2: return BTN2 "Tag";
16110   } /* end of switch */
16111 
16112   return joy4way_labels(type);
16113 }
16114 
16115 const struct ControlInfo ninjaw_ctrl =
16116 {
16117   false, /* 45_degree_rotation for joystick(s) */
16118   false, /* alternating_controls */
16119   true, /* mirrored_controls */
16120   "", /* control_details */
16121   &ninjaw_get_ctrl_name
16122 };
16123 
ninjaw_get_ctrl_name(int type)16124 const char *ninjaw_get_ctrl_name(int type)
16125 {
16126   switch(type)
16127   {
16128     case IPT_BUTTON1: return BTN1 "Dagger";
16129     case IPT_BUTTON2: return BTN2 "Ninja Star";
16130   } /* end of switch */
16131 
16132   return joy4way_labels(type);
16133 }
16134 
16135 const struct ControlInfo thepit_ctrl =
16136 {
16137   false, /* 45_degree_rotation for joystick(s) */
16138   true, /* alternating_controls */
16139   true, /* mirrored_controls */
16140   "", /* control_details */
16141   &thepit_get_ctrl_name
16142 };
16143 
thepit_get_ctrl_name(int type)16144 const char *thepit_get_ctrl_name(int type)
16145 {
16146   switch(type)
16147   {
16148     case IPT_BUTTON1: return BTN1 "Fire";
16149   } /* end of switch */
16150 
16151   return joy4way_labels(type);
16152 }
16153 
16154 const struct ControlInfo punisher_ctrl =
16155 {
16156   false, /* 45_degree_rotation for joystick(s) */
16157   false, /* alternating_controls */
16158   true, /* mirrored_controls */
16159   "", /* control_details */
16160   &punisher_get_ctrl_name
16161 };
16162 
punisher_get_ctrl_name(int type)16163 const char *punisher_get_ctrl_name(int type)
16164 {
16165   switch(type)
16166   {
16167     case IPT_BUTTON1: return BTN1 "Attack";
16168     case IPT_BUTTON2: return BTN2 "Jump";
16169   } /* end of switch */
16170 
16171   return joy4way_labels(type);
16172 }
16173 
16174 const struct ControlInfo ghostb_ctrl =
16175 {
16176   false, /* 45_degree_rotation for joystick(s) */
16177   false, /* alternating_controls */
16178   true, /* mirrored_controls */
16179   "In the versions in mame, there aren't seperate start buttons. The shoot button doubles as the start button. Mame's driver, however, includes normal seperate start buttons /* control_details */ they don't work. However, it seems like there were versions of this game that had the normal seperate start buttons. There also is a 3 player version. The Mame driver includes player 3 inputs in the 2 player game even though they aren't used.", /* control_details */
16180   &ghostb_get_ctrl_name
16181 };
16182 
ghostb_get_ctrl_name(int type)16183 const char *ghostb_get_ctrl_name(int type)
16184 {
16185   switch(type)
16186   {
16187     case IPT_BUTTON1: return BTN1 "Shoot / Start";
16188     case IPT_BUTTON2: return BTN2 "Beam";
16189   } /* end of switch */
16190 
16191   return joy4way_labels(type);
16192 }
16193 
16194 const struct ControlInfo simpsons_ctrl =
16195 {
16196   false, /* 45_degree_rotation for joystick(s) */
16197   false, /* alternating_controls */
16198   true, /* mirrored_controls */
16199   "", /* control_details */
16200   &simpsons_get_ctrl_name
16201 };
16202 
simpsons_get_ctrl_name(int type)16203 const char *simpsons_get_ctrl_name(int type)
16204 {
16205   switch(type)
16206   {
16207     case IPT_BUTTON1: return BTN1 "Attack";
16208     case IPT_BUTTON2: return BTN2 "Jump";
16209   } /* end of switch */
16210 
16211   return joy4way_labels(type);
16212 }
16213 
16214 const struct ControlInfo srumbler_ctrl =
16215 {
16216   false, /* 45_degree_rotation for joystick(s) */
16217   true, /* alternating_controls */
16218   true, /* mirrored_controls */
16219   "", /* control_details */
16220   &srumbler_get_ctrl_name
16221 };
16222 
srumbler_get_ctrl_name(int type)16223 const char *srumbler_get_ctrl_name(int type)
16224 {
16225   switch(type)
16226   {
16227     case IPT_BUTTON1: return BTN1 "Fire";
16228     case IPT_BUTTON2: return BTN2 "Escape";
16229   } /* end of switch */
16230 
16231   return joy4way_labels(type);
16232 }
16233 
16234 const struct ControlInfo a3stooges_ctrl =
16235 {
16236   false, /* 45_degree_rotation for joystick(s) */
16237   false, /* alternating_controls */
16238   true, /* mirrored_controls */
16239   "In this three player game, which player you are determines which stooge you are. P1=Larry  P2=Curly  P3=Moe", /* control_details */
16240   &a3stooges_get_ctrl_name
16241 };
16242 
a3stooges_get_ctrl_name(int type)16243 const char *a3stooges_get_ctrl_name(int type)
16244 {
16245   switch(type)
16246   {
16247     case IPT_BUTTON1: return BTN1 "Slap / Throw";
16248   } /* end of switch */
16249 
16250   return joy4way_labels(type);
16251 }
16252 
16253 const struct ControlInfo tinstar_ctrl =
16254 {
16255   false, /* 45_degree_rotation for joystick(s) */
16256   true, /* alternating_controls */
16257   true, /* mirrored_controls */
16258   "The game actually had a unique digital dial to aim with. Also mame strangely puts the firing controls on the left stick, even though the dial is on the right of the joystick.", /* control_details */
16259   &tinstar_get_ctrl_name
16260 };
16261 
tinstar_get_ctrl_name(int type)16262 const char *tinstar_get_ctrl_name(int type)
16263 {
16264   switch(type)
16265   {
16266     case IPT_BUTTON1: return BTN1 "Fire";
16267     case IPT_JOYSTICKLEFT_UP: return "Aim Up";
16268     case IPT_JOYSTICKLEFT_DOWN: return "Aim Down";
16269     case IPT_JOYSTICKLEFT_LEFT: return "Aim Left";
16270     case IPT_JOYSTICKLEFT_RIGHT: return "Aim Right";
16271     case IPT_JOYSTICKRIGHT_UP: return "Move Up";
16272     case IPT_JOYSTICKRIGHT_DOWN: return "Move Down";
16273     case IPT_JOYSTICKRIGHT_LEFT: return "Move Left";
16274     case IPT_JOYSTICKRIGHT_RIGHT: return "Move Right";
16275   } /* end of switch */
16276 
16277   return "";
16278 }
16279 
16280 const struct ControlInfo thief_ctrl =
16281 {
16282   false, /* 45_degree_rotation for joystick(s) */
16283   true, /* alternating_controls */
16284   true, /* mirrored_controls */
16285   "Pacman like game.", /* control_details */
16286   &thief_get_ctrl_name
16287 };
16288 
thief_get_ctrl_name(int type)16289 const char *thief_get_ctrl_name(int type)
16290 {
16291   return joy4way_labels(type);
16292 }
16293 
16294 const struct ControlInfo a3wonders_ctrl =
16295 {
16296   false, /* 45_degree_rotation for joystick(s) */
16297   false, /* alternating_controls */
16298   true, /* mirrored_controls */
16299   "3rd button mapped in mame but not used (AFAIK). This game has 3 games in 1 and the 2 buttons act differently in each game. There doesn't seem to be anything written on the control panel but for game 1 - Attack, Jump 2 - Attack, Special Attack 3 - Push Block, Push Block", /* control_details */
16300   &a3wonders_get_ctrl_name
16301 };
16302 
a3wonders_get_ctrl_name(int type)16303 const char *a3wonders_get_ctrl_name(int type)
16304 {
16305   switch(type)
16306   {
16307     case IPT_BUTTON1: return BTN1 "Attack";
16308     case IPT_BUTTON2: return BTN2 "Jump";
16309     case IPT_BUTTON3: return BTN3 "??";
16310   } /* end of switch */
16311 
16312   return joy4way_labels(type);
16313 }
16314 
16315 const struct ControlInfo thndrbld_ctrl =
16316 {
16317   false, /* 45_degree_rotation for joystick(s) */
16318   false, /* alternating_controls */
16319   false, /* mirrored_controls */
16320   "The upright version of this game sported a force-feedback joystick, while the cockpit version used the force-feedback to shake the whole cockpit!", /* control_details */
16321   &thndrbld_get_ctrl_name
16322 };
16323 
thndrbld_get_ctrl_name(int type)16324 const char *thndrbld_get_ctrl_name(int type)
16325 {
16326   switch(type)
16327   {
16328     case IPT_BUTTON1: return BTN1 "Fire";
16329     case IPT_BUTTON2: return BTN2 "Grenade";
16330     case IPT_AD_STICK_X: return "Left";
16331     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
16332     case IPT_AD_STICK_Y: return "Up";
16333     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
16334     case IPT_AD_STICK_Z: return "Fast";
16335     case (IPT_AD_STICK_Z + IPT_EXTENSION): return "Slow";
16336   } /* end of switch */
16337 
16338   return "";
16339 }
16340 
16341 const struct ControlInfo thundfox_ctrl =
16342 {
16343   false, /* 45_degree_rotation for joystick(s) */
16344   false, /* alternating_controls */
16345   true, /* mirrored_controls */
16346   "Couldn't find a control panel pic. Press Button 1 for close range attack (punching, stabbing), press button 3 to use the weapon (throw grenade, shoot gun). Need to kneel down to pick up the weapons", /* control_details */
16347   &thundfox_get_ctrl_name
16348 };
16349 
thundfox_get_ctrl_name(int type)16350 const char *thundfox_get_ctrl_name(int type)
16351 {
16352   switch(type)
16353   {
16354     case IPT_BUTTON1: return BTN1 "Attack";
16355     case IPT_BUTTON2: return BTN2 "Jump";
16356     case IPT_BUTTON3: return BTN3 "Weapon";
16357   } /* end of switch */
16358 
16359   return joy4way_labels(type);
16360 }
16361 
16362 const struct ControlInfo thunderj_ctrl =
16363 {
16364   false, /* 45_degree_rotation for joystick(s) */
16365   false, /* alternating_controls */
16366   true, /* mirrored_controls */
16367   "", /* control_details */
16368   &thunderj_get_ctrl_name
16369 };
16370 
thunderj_get_ctrl_name(int type)16371 const char *thunderj_get_ctrl_name(int type)
16372 {
16373   switch(type)
16374   {
16375     case IPT_BUTTON1: return BTN1 "Fire";
16376     case IPT_BUTTON2: return BTN2 "Jump";
16377   } /* end of switch */
16378 
16379   return joy4way_labels(type);
16380 }
16381 
16382 const struct ControlInfo tickee_ctrl =
16383 {
16384   false, /* 45_degree_rotation for joystick(s) */
16385   false, /* alternating_controls */
16386   true, /* mirrored_controls */
16387   "", /* control_details */
16388   &tickee_get_ctrl_name
16389 };
16390 
tickee_get_ctrl_name(int type)16391 const char *tickee_get_ctrl_name(int type)
16392 {
16393   switch(type)
16394   {
16395     case IPT_BUTTON1: return BTN1 "Trigger";
16396     case IPT_LIGHTGUN_X: return "Left";
16397     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
16398     case IPT_LIGHTGUN_Y: return "Up";
16399     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
16400   } /* end of switch */
16401 
16402   return "";
16403 }
16404 
16405 const struct ControlInfo tigerh_ctrl =
16406 {
16407   false, /* 45_degree_rotation for joystick(s) */
16408   true, /* alternating_controls */
16409   true, /* mirrored_controls */
16410   "Shooting the colored crosses provides the following power-ups: White - Forward firing Little Heli, Red - Side Firing Little Heli, Blue - Bomb. A max of two bombs and two little helis are possible. Shooting 10 yellow diamonds awards an additional life.", /* control_details */
16411   &tigerh_get_ctrl_name
16412 };
16413 
tigerh_get_ctrl_name(int type)16414 const char *tigerh_get_ctrl_name(int type)
16415 {
16416   switch(type)
16417   {
16418     case IPT_BUTTON1: return BTN1 "Mini-Gun";
16419     case IPT_BUTTON2: return BTN2 "Bomb";
16420   } /* end of switch */
16421 
16422   return joy4way_labels(type);
16423 }
16424 
16425 const struct ControlInfo tigeroad_ctrl =
16426 {
16427   false, /* 45_degree_rotation for joystick(s) */
16428   true, /* alternating_controls */
16429   true, /* mirrored_controls */
16430   "", /* control_details */
16431   &tigeroad_get_ctrl_name
16432 };
16433 
tigeroad_get_ctrl_name(int type)16434 const char *tigeroad_get_ctrl_name(int type)
16435 {
16436   switch(type)
16437   {
16438     case IPT_BUTTON1: return BTN1 "Attack";
16439     case IPT_BUTTON2: return BTN2 "Jump";
16440   } /* end of switch */
16441 
16442   return joy4way_labels(type);
16443 }
16444 
16445 const struct ControlInfo timber_ctrl =
16446 {
16447   false, /* 45_degree_rotation for joystick(s) */
16448   false, /* alternating_controls */
16449   true, /* mirrored_controls */
16450   "OTHER:  The two buttons in mame are actually a two-way joystick. The 4-way joystick is for moving and pushing, the buttons (2-way) chops the wood.", /* control_details */
16451   &timber_get_ctrl_name
16452 };
16453 
timber_get_ctrl_name(int type)16454 const char *timber_get_ctrl_name(int type)
16455 {
16456   switch(type)
16457   {
16458     case IPT_BUTTON1: return BTN1 "Chop Left";
16459     case IPT_BUTTON2: return BTN2 "Chop Right";
16460   } /* end of switch */
16461 
16462   return joy4way_labels(type);
16463 }
16464 
16465 const struct ControlInfo timecris_ctrl =
16466 {
16467   false, /* 45_degree_rotation for joystick(s) */
16468   false, /* alternating_controls */
16469   false, /* mirrored_controls */
16470   "The player uses the pedal to rise up from behind cover. teh cryptic label is posted on the control panel, with a giant arrow pointing down. This is probably to make the player aware that there is a pedal on a gun game, which is obviously quite odd.", /* control_details */
16471   &timecris_get_ctrl_name
16472 };
16473 
timecris_get_ctrl_name(int type)16474 const char *timecris_get_ctrl_name(int type)
16475 {
16476   switch(type)
16477   {
16478     case IPT_BUTTON1: return BTN1 "Fire";
16479     case IPT_BUTTON2: return BTN2 "Step on It!";
16480     case IPT_LIGHTGUN_X: return "Aim Left";
16481     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
16482     case IPT_LIGHTGUN_Y: return "Aim Up";
16483     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
16484   } /* end of switch */
16485 
16486   return "";
16487 }
16488 
16489 const struct ControlInfo timekill_ctrl =
16490 {
16491   false, /* 45_degree_rotation for joystick(s) */
16492   false, /* alternating_controls */
16493   true, /* mirrored_controls */
16494   "The distinction of left and right on these labels isn't which limb you use, but describes the position of the buttons on the control panel. Each player has two arm and leg buttons and they both do different things, even though they are labeld different. On the original control panel the arm buttons are on the top row and the legs are on the bottom with the head button centered, above both rows. So to play this game properly, some remapping will probably be required.", /* control_details */
16495   &timekill_get_ctrl_name
16496 };
16497 
timekill_get_ctrl_name(int type)16498 const char *timekill_get_ctrl_name(int type)
16499 {
16500   switch(type)
16501   {
16502     case IPT_BUTTON1: return BTN1 "Left Arm";
16503     case IPT_BUTTON2: return BTN2 "Right Arm";
16504     case IPT_BUTTON3: return BTN3 "Left Leg";
16505     case IPT_BUTTON4: return BTN4 "Right Leg";
16506     case IPT_BUTTON5: return BTN5 "Head";
16507   } /* end of switch */
16508 
16509   return joy4way_labels(type);
16510 }
16511 
16512 const struct ControlInfo timeplt_ctrl =
16513 {
16514   false, /* 45_degree_rotation for joystick(s) */
16515   true, /* alternating_controls */
16516   true, /* mirrored_controls */
16517   "", /* control_details */
16518   &timeplt_get_ctrl_name
16519 };
16520 
timeplt_get_ctrl_name(int type)16521 const char *timeplt_get_ctrl_name(int type)
16522 {
16523   switch(type)
16524   {
16525     case IPT_BUTTON1: return BTN1 "Fire";
16526   } /* end of switch */
16527 
16528   return joy4way_labels(type);
16529 }
16530 
16531 const struct ControlInfo timesold_ctrl =
16532 {
16533   false, /* 45_degree_rotation for joystick(s) */
16534   false, /* alternating_controls */
16535   true, /* mirrored_controls */
16536   "This game used a 12 direction mechanical rotary (SNK LS-30).", /* control_details */
16537   &timesold_get_ctrl_name
16538 };
16539 
timesold_get_ctrl_name(int type)16540 const char *timesold_get_ctrl_name(int type)
16541 {
16542   switch(type)
16543   {
16544     case IPT_BUTTON1: return BTN1 "Fire";
16545     case IPT_BUTTON2: return BTN2 "Hyper Weapon";
16546     case IPT_DIAL: return "Rotate Left";
16547     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
16548   } /* end of switch */
16549 
16550   return joy4way_labels(type);
16551 }
16552 
16553 const struct ControlInfo titlef_ctrl =
16554 {
16555   false, /* 45_degree_rotation for joystick(s) */
16556   false, /* alternating_controls */
16557   true, /* mirrored_controls */
16558   "The game actually used a pair of digital 'twist sticks'  basically, you moved them up and down as normal, but to press left or right you twist them. Explaining how to play is rather complicated as the game uses combinations of both stick movements to do moves.", /* control_details */
16559   &titlef_get_ctrl_name
16560 };
16561 
titlef_get_ctrl_name(int type)16562 const char *titlef_get_ctrl_name(int type)
16563 {
16564   switch(type)
16565   {
16566     case IPT_JOYSTICKLEFT_UP: return "Left Fist Up";
16567     case IPT_JOYSTICKLEFT_DOWN: return "Left Fist Down";
16568     case IPT_JOYSTICKLEFT_LEFT: return "Left Fist Left";
16569     case IPT_JOYSTICKLEFT_RIGHT: return "Left Fist Right";
16570     case IPT_JOYSTICKRIGHT_UP: return "Right Fist Up";
16571     case IPT_JOYSTICKRIGHT_DOWN: return "Right Fist Down";
16572     case IPT_JOYSTICKRIGHT_LEFT: return "Right Fist Left";
16573     case IPT_JOYSTICKRIGHT_RIGHT: return "Right Fist Right";
16574   } /* end of switch */
16575 
16576   return "";
16577 }
16578 
16579 const struct ControlInfo toki_ctrl =
16580 {
16581   false, /* 45_degree_rotation for joystick(s) */
16582   true, /* alternating_controls */
16583   true, /* mirrored_controls */
16584   "", /* control_details */
16585   &toki_get_ctrl_name
16586 };
16587 
toki_get_ctrl_name(int type)16588 const char *toki_get_ctrl_name(int type)
16589 {
16590   switch(type)
16591   {
16592     case IPT_BUTTON1: return BTN1 "Fire";
16593     case IPT_BUTTON2: return BTN2 "Jump";
16594   } /* end of switch */
16595 
16596   return joy4way_labels(type);
16597 }
16598 
16599 const struct ControlInfo tomahawk_ctrl =
16600 {
16601   false, /* 45_degree_rotation for joystick(s) */
16602   true, /* alternating_controls */
16603   true, /* mirrored_controls */
16604   "The cpo has the generic 'control' label under the joystick, which was popular in that era.", /* control_details */
16605   &tomahawk_get_ctrl_name
16606 };
16607 
tomahawk_get_ctrl_name(int type)16608 const char *tomahawk_get_ctrl_name(int type)
16609 {
16610   switch(type)
16611   {
16612     case IPT_BUTTON1: return BTN1 "Fire";
16613   } /* end of switch */
16614 
16615   return joy4way_labels(type);
16616 }
16617 
16618 const struct ControlInfo toobin_ctrl =
16619 {
16620   false, /* 45_degree_rotation for joystick(s) */
16621   false, /* alternating_controls */
16622   true, /* mirrored_controls */
16623   "The buttons are arranged in a flattened pentagon shape, with the point on the bottom. The throw button is the bottom point, above that are the two forward buttons, and the two back buttons on the top. The original CP used the throw button also as the start /* control_details */ Mame has a seperate 'start' button, but both mame's 'throw' and 'start' buttons throw and start. Mame labels the five buttons a little differently than the original CP: 'throw', 'R Paddle Forward', 'L Paddle Forward', 'L Paddle Backward', and 'R Paddle backward'.", /* control_details */
16624   &toobin_get_ctrl_name
16625 };
16626 
toobin_get_ctrl_name(int type)16627 const char *toobin_get_ctrl_name(int type)
16628 {
16629   switch(type)
16630   {
16631     case IPT_BUTTON1: return BTN1 "Throw Can / Start";
16632     case IPT_BUTTON2: return BTN2 "Paddle Forward (Right)";
16633     case IPT_BUTTON3: return BTN3 "Paddle Forward (Left)";
16634     case IPT_BUTTON4: return BTN4 "Back Paddle (Left)";
16635     case IPT_BUTTON5: return BTN5 "Back Paddle (Right)";
16636   } /* end of switch */
16637 
16638   return "";
16639 }
16640 
16641 const struct ControlInfo topspeed_ctrl =
16642 {
16643   false, /* 45_degree_rotation for joystick(s) */
16644   false, /* alternating_controls */
16645   false, /* mirrored_controls */
16646   "This game has a ton of extra inputs that show up do to a digital hack. Ignore them as buttons 1-4 is all you need.", /* control_details */
16647   &topspeed_get_ctrl_name
16648 };
16649 
topspeed_get_ctrl_name(int type)16650 const char *topspeed_get_ctrl_name(int type)
16651 {
16652   switch(type)
16653   {
16654     case IPT_BUTTON1: return BTN1 "Accelerate";
16655     case IPT_BUTTON2: return BTN2 "Brake";
16656     case IPT_BUTTON3: return BTN3 "Nitro";
16657     case IPT_BUTTON4: return BTN4 "Hi / Lo";
16658     case IPT_PADDLE: return "Left";
16659     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
16660   } /* end of switch */
16661 
16662   return "";
16663 }
16664 
16665 const struct ControlInfo totcarn_ctrl =
16666 {
16667   false, /* 45_degree_rotation for joystick(s) */
16668   false, /* alternating_controls */
16669   true, /* mirrored_controls */
16670   "The start button is used in the game to speed up or skip hints, and to place mines/bombs.", /* control_details */
16671   &totcarn_get_ctrl_name
16672 };
16673 
totcarn_get_ctrl_name(int type)16674 const char *totcarn_get_ctrl_name(int type)
16675 {
16676   switch(type)
16677   {
16678     case IPT_JOYSTICKLEFT_UP: return "Move Up";
16679     case IPT_JOYSTICKLEFT_DOWN: return "Move Down";
16680     case IPT_JOYSTICKLEFT_LEFT: return "Move Left";
16681     case IPT_JOYSTICKLEFT_RIGHT: return "Move Right";
16682     case IPT_JOYSTICKRIGHT_UP: return "Fire Up";
16683     case IPT_JOYSTICKRIGHT_DOWN: return "Fire Down";
16684     case IPT_JOYSTICKRIGHT_LEFT: return "Fire Left";
16685     case IPT_JOYSTICKRIGHT_RIGHT: return "Fire Right";
16686   } /* end of switch */
16687 
16688   return "";
16689 }
16690 
16691 const struct ControlInfo tdfever_ctrl =
16692 {
16693   false, /* 45_degree_rotation for joystick(s) */
16694   false, /* alternating_controls */
16695   true, /* mirrored_controls */
16696   "You'll usually only see a two player version of this game as the 4 player used a specialized cocktail cabinet.", /* control_details */
16697   &tdfever_get_ctrl_name
16698 };
16699 
tdfever_get_ctrl_name(int type)16700 const char *tdfever_get_ctrl_name(int type)
16701 {
16702   switch(type)
16703   {
16704     case IPT_BUTTON1: return BTN1 "Run";
16705     case IPT_BUTTON2: return BTN2 "Pass";
16706     case IPT_DIAL: return "Rotate Left";
16707     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
16708   } /* end of switch */
16709 
16710   return joy4way_labels(type);
16711 }
16712 
16713 const struct ControlInfo toypop_ctrl =
16714 {
16715   false, /* 45_degree_rotation for joystick(s) */
16716   false, /* alternating_controls */
16717   true, /* mirrored_controls */
16718   "The only know control panel image of this game shows two trivia style buttons labeled 'shoot' on either side of the joysticks. Of course this is just a mirrored layout.", /* control_details */
16719   &toypop_get_ctrl_name
16720 };
16721 
toypop_get_ctrl_name(int type)16722 const char *toypop_get_ctrl_name(int type)
16723 {
16724   switch(type)
16725   {
16726     case IPT_BUTTON1: return BTN1 "Shoot";
16727   } /* end of switch */
16728 
16729   return joy4way_labels(type);
16730 }
16731 
16732 const struct ControlInfo trackfld_ctrl =
16733 {
16734   false, /* 45_degree_rotation for joystick(s) */
16735   false, /* alternating_controls */
16736   true, /* mirrored_controls */
16737   "", /* control_details */
16738   &trackfld_get_ctrl_name
16739 };
16740 
trackfld_get_ctrl_name(int type)16741 const char *trackfld_get_ctrl_name(int type)
16742 {
16743   switch(type)
16744   {
16745     case IPT_BUTTON1: return BTN1 "Run";
16746     case IPT_BUTTON2: return BTN2 "Jump/Throw";
16747     case IPT_BUTTON3: return BTN3 "Run";
16748   } /* end of switch */
16749 
16750   return "";
16751 }
16752 
16753 const struct ControlInfo tranqgun_ctrl =
16754 {
16755   false, /* 45_degree_rotation for joystick(s) */
16756   true, /* alternating_controls */
16757   true, /* mirrored_controls */
16758   "", /* control_details */
16759   &tranqgun_get_ctrl_name
16760 };
16761 
tranqgun_get_ctrl_name(int type)16762 const char *tranqgun_get_ctrl_name(int type)
16763 {
16764   switch(type)
16765   {
16766     case IPT_BUTTON1: return BTN1 "Fire";
16767   } /* end of switch */
16768 
16769   return joy4way_labels(type);
16770 }
16771 
16772 const struct ControlInfo trisport_ctrl =
16773 {
16774   false, /* 45_degree_rotation for joystick(s) */
16775   true, /* alternating_controls */
16776   true, /* mirrored_controls */
16777   "", /* control_details */
16778   &trisport_get_ctrl_name
16779 };
16780 
trisport_get_ctrl_name(int type)16781 const char *trisport_get_ctrl_name(int type)
16782 {
16783   switch(type)
16784   {
16785     case IPT_BUTTON1: return BTN1 "Set / Start";
16786     case IPT_BUTTON2: return BTN2 "Select";
16787     case IPT_TRACKBALL_X: return "Left";
16788     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
16789     case IPT_TRACKBALL_Y: return "Up";
16790     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
16791   } /* end of switch */
16792 
16793   return "";
16794 }
16795 
16796 const struct ControlInfo triplhnt_ctrl =
16797 {
16798   false, /* 45_degree_rotation for joystick(s) */
16799   false, /* alternating_controls */
16800   false, /* mirrored_controls */
16801   "This lightgun is actually a shotgun mounted to the cabinet.", /* control_details */
16802   &triplhnt_get_ctrl_name
16803 };
16804 
triplhnt_get_ctrl_name(int type)16805 const char *triplhnt_get_ctrl_name(int type)
16806 {
16807   switch(type)
16808   {
16809     case IPT_BUTTON1: return BTN1 "Fire";
16810     case IPT_LIGHTGUN_X: return "Aim Left";
16811     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
16812     case IPT_LIGHTGUN_Y: return "Aim Up";
16813     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
16814   } /* end of switch */
16815 
16816   return "";
16817 }
16818 
16819 const struct ControlInfo statriv2_ctrl =
16820 {
16821   false, /* 45_degree_rotation for joystick(s) */
16822   false, /* alternating_controls */
16823   false, /* mirrored_controls */
16824   "The game also has two 'play 1000' buttons defined in mame. These appear to be service buttons to change the question packs.", /* control_details */
16825   &statriv2_get_ctrl_name
16826 };
16827 
statriv2_get_ctrl_name(int type)16828 const char *statriv2_get_ctrl_name(int type)
16829 {
16830   switch(type)
16831   {
16832     case IPT_BUTTON1: return BTN1 "A";
16833     case IPT_BUTTON2: return BTN2 "B";
16834     case IPT_BUTTON3: return BTN3 "C";
16835     case IPT_BUTTON4: return BTN4 "D";
16836   } /* end of switch */
16837 
16838   return "";
16839 }
16840 
16841 const struct ControlInfo gtsers8_ctrl =
16842 {
16843   false, /* 45_degree_rotation for joystick(s) */
16844   true, /* alternating_controls */
16845   true, /* mirrored_controls */
16846   "The lighted trivia buttons are actually blank, as is the control panel overlay. There are  labeled arrows on the screen that point to the appropriate button. (Note:  even though all sources, evne the original game machines point ot alternating 2 player gameplay, it doesn't seem to work in mame... it's probably a bug.)", /* control_details */
16847   &gtsers8_get_ctrl_name
16848 };
16849 
gtsers8_get_ctrl_name(int type)16850 const char *gtsers8_get_ctrl_name(int type)
16851 {
16852   switch(type)
16853   {
16854     case IPT_BUTTON1: return BTN1 "1";
16855     case IPT_BUTTON2: return BTN2 "2";
16856     case IPT_BUTTON3: return BTN3 "3";
16857     case IPT_BUTTON4: return BTN4 "4";
16858     case IPT_BUTTON5: return BTN5 "5";
16859   } /* end of switch */
16860 
16861   return "";
16862 }
16863 
16864 const struct ControlInfo gt507uk_ctrl =
16865 {
16866   false, /* 45_degree_rotation for joystick(s) */
16867   true, /* alternating_controls */
16868   true, /* mirrored_controls */
16869   "The lighted trivia buttons are actually blank, as is the control panel overlay. There are  labeled arrows on the screen that point to the appropriate button. (Note:  even though all sources, evne the original game machines point ot alternating 2 player gameplay, it doesn't seem to work in mame... it's probably a bug.)", /* control_details */
16870   &gt507uk_get_ctrl_name
16871 };
16872 
gt507uk_get_ctrl_name(int type)16873 const char *gt507uk_get_ctrl_name(int type)
16874 {
16875   switch(type)
16876   {
16877     case IPT_BUTTON1: return BTN1 "1";
16878     case IPT_BUTTON2: return BTN2 "2";
16879     case IPT_BUTTON3: return BTN3 "3";
16880     case IPT_BUTTON4: return BTN4 "4";
16881     case IPT_BUTTON5: return BTN5 "5";
16882   } /* end of switch */
16883 
16884   return "";
16885 }
16886 
16887 const struct ControlInfo gt5_ctrl =
16888 {
16889   false, /* 45_degree_rotation for joystick(s) */
16890   true, /* alternating_controls */
16891   true, /* mirrored_controls */
16892   "The lighted trivia buttons are actually blank, as is the control panel overlay. There are  labeled arrows on the screen that point to the appropriate button. (Note:  even though all sources, evne the original game machines point ot alternating 2 player gameplay, it doesn't seem to work in mame... it's probably a bug.)", /* control_details */
16893   &gt5_get_ctrl_name
16894 };
16895 
gt5_get_ctrl_name(int type)16896 const char *gt5_get_ctrl_name(int type)
16897 {
16898   switch(type)
16899   {
16900     case IPT_BUTTON1: return BTN1 "1";
16901     case IPT_BUTTON2: return BTN2 "2";
16902     case IPT_BUTTON3: return BTN3 "3";
16903     case IPT_BUTTON4: return BTN4 "4";
16904     case IPT_BUTTON5: return BTN5 "5";
16905   } /* end of switch */
16906 
16907   return "";
16908 }
16909 
16910 const struct ControlInfo trvgns_ctrl =
16911 {
16912   false, /* 45_degree_rotation for joystick(s) */
16913   true, /* alternating_controls */
16914   true, /* mirrored_controls */
16915   "The lighted trivia buttons are actually blank, as is the contorl panel overlay. The game itself has arrows pointing down to the appropriate button. Also note that buttons a-d also act as the star buttons, again with an arrow pointing towards which is which. (A = 1 player game, B= 2 players, ect)", /* control_details */
16916   &trvgns_get_ctrl_name
16917 };
16918 
trvgns_get_ctrl_name(int type)16919 const char *trvgns_get_ctrl_name(int type)
16920 {
16921   switch(type)
16922   {
16923     case IPT_BUTTON1: return BTN1 "A";
16924     case IPT_BUTTON2: return BTN2 "B";
16925     case IPT_BUTTON3: return BTN3 "C";
16926     case IPT_BUTTON4: return BTN4 "D";
16927   } /* end of switch */
16928 
16929   return "";
16930 }
16931 
16932 const struct ControlInfo triviasp_ctrl =
16933 {
16934   false, /* 45_degree_rotation for joystick(s) */
16935   true, /* alternating_controls */
16936   true, /* mirrored_controls */
16937   "When a question is asked, a possible answer is displayed. You either press correct to select the given answer, or press incorrect until the correct answer is displayed and then press correct to confirm. Mame has a bunch of extra inputs defined, but all you should be concerned with are the 'red' (incorrect) and 'green' (correct) buttons.", /* control_details */
16938   &triviasp_get_ctrl_name
16939 };
16940 
triviasp_get_ctrl_name(int type)16941 const char *triviasp_get_ctrl_name(int type)
16942 {
16943   switch(type)
16944   {
16945     case IPT_BUTTON1: return BTN1 "Correct";
16946     case IPT_BUTTON2: return BTN2 "Incorrect";
16947   } /* end of switch */
16948 
16949   return "";
16950 }
16951 
16952 const struct ControlInfo triviabb_ctrl =
16953 {
16954   false, /* 45_degree_rotation for joystick(s) */
16955   true, /* alternating_controls */
16956   true, /* mirrored_controls */
16957   "When a question is asked, a possible answer is displayed. You either press correct to select the given answer, or press incorrect until the correct answer is displayed and then press correct to confirm. Mame has a bunch of extra inputs defined, but all you should be concerned with are the 'red' (incorrect) and 'green' (correct) buttons.", /* control_details */
16958   &triviabb_get_ctrl_name
16959 };
16960 
triviabb_get_ctrl_name(int type)16961 const char *triviabb_get_ctrl_name(int type)
16962 {
16963   switch(type)
16964   {
16965     case IPT_BUTTON1: return BTN1 "Correct";
16966     case IPT_BUTTON2: return BTN2 "Incorrect";
16967   } /* end of switch */
16968 
16969   return "";
16970 }
16971 
16972 const struct ControlInfo triviag1_ctrl =
16973 {
16974   false, /* 45_degree_rotation for joystick(s) */
16975   true, /* alternating_controls */
16976   true, /* mirrored_controls */
16977   "When a question is asked, a possible answer is displayed. You either press correct to select the given answer, or press incorrect until the correct answer is displayed and then press correct to confirm. Mame has a bunch of extra inputs defined, but all you should be concerned with are the 'red' (incorrect) and 'green' (correct) buttons.", /* control_details */
16978   &triviag1_get_ctrl_name
16979 };
16980 
triviag1_get_ctrl_name(int type)16981 const char *triviag1_get_ctrl_name(int type)
16982 {
16983   switch(type)
16984   {
16985     case IPT_BUTTON1: return BTN1 "Correct";
16986     case IPT_BUTTON2: return BTN2 "Incorrect";
16987   } /* end of switch */
16988 
16989   return "";
16990 }
16991 
16992 const struct ControlInfo triviag2_ctrl =
16993 {
16994   false, /* 45_degree_rotation for joystick(s) */
16995   true, /* alternating_controls */
16996   true, /* mirrored_controls */
16997   "When a question is asked, a possible answer is displayed. You either press correct to select the given answer, or press incorrect until the correct answer is displayed and then press correct to confirm. Mame has a bunch of extra inputs defined, but all you should be concerned with are the 'red' (incorrect) and 'green' (correct) buttons.", /* control_details */
16998   &triviag2_get_ctrl_name
16999 };
17000 
triviag2_get_ctrl_name(int type)17001 const char *triviag2_get_ctrl_name(int type)
17002 {
17003   switch(type)
17004   {
17005     case IPT_BUTTON1: return BTN1 "Correct";
17006     case IPT_BUTTON2: return BTN2 "Incorrect";
17007   } /* end of switch */
17008 
17009   return "";
17010 }
17011 
17012 const struct ControlInfo triviayp_ctrl =
17013 {
17014   false, /* 45_degree_rotation for joystick(s) */
17015   true, /* alternating_controls */
17016   true, /* mirrored_controls */
17017   "When a question is asked, a possible answer is displayed. You either press correct to select the given answer, or press incorrect until the correct answer is displayed and then press correct to confirm. Mame has a bunch of extra inputs defined, but all you should be concerned with are the 'red' (incorrect) and 'green' (correct) buttons.", /* control_details */
17018   &triviayp_get_ctrl_name
17019 };
17020 
triviayp_get_ctrl_name(int type)17021 const char *triviayp_get_ctrl_name(int type)
17022 {
17023   switch(type)
17024   {
17025     case IPT_BUTTON1: return BTN1 "Correct";
17026     case IPT_BUTTON2: return BTN2 "Incorrect";
17027   } /* end of switch */
17028 
17029   return "";
17030 }
17031 
17032 const struct ControlInfo trojan_ctrl =
17033 {
17034   false, /* 45_degree_rotation for joystick(s) */
17035   true, /* alternating_controls */
17036   true, /* mirrored_controls */
17037   "Tatakai no Banka/Trojan features an 8-way joystick, two action buttons, and alternating two-player gamepay.", /* control_details */
17038   &trojan_get_ctrl_name
17039 };
17040 
trojan_get_ctrl_name(int type)17041 const char *trojan_get_ctrl_name(int type)
17042 {
17043   switch(type)
17044   {
17045     case IPT_BUTTON1: return BTN1 "Sword/Punch";
17046     case IPT_BUTTON2: return BTN1 "Shield/Kick";
17047   } /* end of switch */
17048 
17049   return joy4way_labels(type);
17050 }
17051 
17052 const struct ControlInfo trog_ctrl =
17053 {
17054   false, /* 45_degree_rotation for joystick(s) */
17055   false, /* alternating_controls */
17056   true, /* mirrored_controls */
17057   "Like many 4 player games, which character you choose determines which controls you'll use and vice-versa.", /* control_details */
17058   &trog_get_ctrl_name
17059 };
17060 
trog_get_ctrl_name(int type)17061 const char *trog_get_ctrl_name(int type)
17062 {
17063   switch(type)
17064   {
17065     case IPT_BUTTON1: return BTN1 "Punch";
17066   } /* end of switch */
17067 
17068   return joy4way_labels(type);
17069 }
17070 
17071 const struct ControlInfo tron_ctrl =
17072 {
17073   false, /* 45_degree_rotation for joystick(s) */
17074   true, /* alternating_controls */
17075   true, /* mirrored_controls */
17076   "The joystick in this game was unique. It was an 8-way leaf joystick with a larqe actuator and a diagonal 4-way restrictor making it possible (but difficult) to hit the diagonals. The 4-way mode was useful for the Tanks stage, and necessary for the Light Cycle stage. Controls worked as follows: Light Cycles: The joystick controls the direction of travel and the trigger controls the speed of the bike. Grid Bugs: The stick controls the movement of your character and the spinner controls the direction of fire. Tanks: The stick controls the movement of your tank and the spinner controls the direction of fire. MCP Cone: The stick controls the movement of your character and the spinner controls the direction of fire.", /* control_details */
17077   &tron_get_ctrl_name
17078 };
17079 
tron_get_ctrl_name(int type)17080 const char *tron_get_ctrl_name(int type)
17081 {
17082   switch(type)
17083   {
17084     case IPT_BUTTON1: return BTN1 "Fire";
17085     case IPT_DIAL: return "Aim Left";
17086     case (IPT_DIAL + IPT_EXTENSION): return "Aim Right";
17087   } /* end of switch */
17088 
17089   return joy4way_labels(type);
17090 }
17091 
17092 const struct ControlInfo tubep_ctrl =
17093 {
17094   false, /* 45_degree_rotation for joystick(s) */
17095   true, /* alternating_controls */
17096   true, /* mirrored_controls */
17097   "this game doesn't have any labels.", /* control_details */
17098   &tubep_get_ctrl_name
17099 };
17100 
tubep_get_ctrl_name(int type)17101 const char *tubep_get_ctrl_name(int type)
17102 {
17103   switch(type)
17104   {
17105     case IPT_BUTTON1: return BTN1 "Fire";
17106   } /* end of switch */
17107 
17108   return joy4way_labels(type);
17109 }
17110 
17111 const struct ControlInfo tunhunt_ctrl =
17112 {
17113   false, /* 45_degree_rotation for joystick(s) */
17114   false, /* alternating_controls */
17115   false, /* mirrored_controls */
17116   "", /* control_details */
17117   &tunhunt_get_ctrl_name
17118 };
17119 
tunhunt_get_ctrl_name(int type)17120 const char *tunhunt_get_ctrl_name(int type)
17121 {
17122   switch(type)
17123   {
17124     case IPT_BUTTON1: return BTN1 "Fire";
17125     case IPT_BUTTON2: return BTN2 "Shield";
17126     case IPT_AD_STICK_X: return "Left";
17127     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
17128     case IPT_AD_STICK_Y: return "Up";
17129     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
17130   } /* end of switch */
17131 
17132   return "";
17133 }
17134 
17135 const struct ControlInfo turbo_ctrl =
17136 {
17137   false, /* 45_degree_rotation for joystick(s) */
17138   false, /* alternating_controls */
17139   false, /* mirrored_controls */
17140   "The shifter doesn't appear to work properly. The lo button seems to act more like a brake than anything else even though the game doesn't have a brake. The hi button toggles gears.", /* control_details */
17141   &turbo_get_ctrl_name
17142 };
17143 
turbo_get_ctrl_name(int type)17144 const char *turbo_get_ctrl_name(int type)
17145 {
17146   switch(type)
17147   {
17148     case IPT_BUTTON1: return BTN1 "Accelerate";
17149     case IPT_BUTTON2: return BTN2 "Lo";
17150     case IPT_BUTTON3: return BTN3 "Hi";
17151     case IPT_DIAL: return "Left";
17152     case (IPT_DIAL + IPT_EXTENSION): return "Right";
17153   } /* end of switch */
17154 
17155   return "";
17156 }
17157 
17158 const struct ControlInfo turbofrc_ctrl =
17159 {
17160   false, /* 45_degree_rotation for joystick(s) */
17161   false, /* alternating_controls */
17162   true, /* mirrored_controls */
17163   "3rd player in mame not working??", /* control_details */
17164   &turbofrc_get_ctrl_name
17165 };
17166 
turbofrc_get_ctrl_name(int type)17167 const char *turbofrc_get_ctrl_name(int type)
17168 {
17169   switch(type)
17170   {
17171     case IPT_BUTTON1: return BTN1 "Fire";
17172   } /* end of switch */
17173 
17174   return joy4way_labels(type);
17175 }
17176 
17177 const struct ControlInfo toutrun_ctrl =
17178 {
17179   false, /* 45_degree_rotation for joystick(s) */
17180   false, /* alternating_controls */
17181   false, /* mirrored_controls */
17182   "The shifter has a side button for turbo, thus the name of the game.", /* control_details */
17183   &toutrun_get_ctrl_name
17184 };
17185 
toutrun_get_ctrl_name(int type)17186 const char *toutrun_get_ctrl_name(int type)
17187 {
17188   switch(type)
17189   {
17190     case IPT_BUTTON1: return BTN1 "High / Low";
17191     case IPT_BUTTON2: return BTN2 "Turbo";
17192     case IPT_PADDLE: return "Left";
17193     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
17194     case IPT_PEDAL: return "Accelerate";
17195     case IPT_PEDAL2: return "Brake";
17196   } /* end of switch */
17197 
17198   return "";
17199 }
17200 
17201 const struct ControlInfo tshoot_ctrl =
17202 {
17203   false, /* 45_degree_rotation for joystick(s) */
17204   true, /* alternating_controls */
17205   true, /* mirrored_controls */
17206   "The Grenade Button is actually mounted on top of the machine gun. Technically it counts as a part of the gun, but the button itself is a stock lighted button. This game had an interesting gimmick where feathers were blown in front of the screen between two layers of plexi if a round was successful. Somone should take advantage of mame's switchable artwork system and re-create this effect via a series of feather animations.", /* control_details */
17207   &tshoot_get_ctrl_name
17208 };
17209 
tshoot_get_ctrl_name(int type)17210 const char *tshoot_get_ctrl_name(int type)
17211 {
17212   switch(type)
17213   {
17214     case IPT_BUTTON1: return BTN1 "Fire";
17215     case IPT_BUTTON2: return BTN2 "Grenade";
17216     case IPT_BUTTON3: return BTN3 "Gobble!";
17217     case IPT_LIGHTGUN_X: return "Aim Left";
17218     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
17219     case IPT_LIGHTGUN_Y: return "Aim Up";
17220     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
17221   } /* end of switch */
17222 
17223   return "";
17224 }
17225 
17226 const struct ControlInfo tutankhm_ctrl =
17227 {
17228   false, /* 45_degree_rotation for joystick(s) */
17229   true, /* alternating_controls */
17230   true, /* mirrored_controls */
17231   "The fire buttons are actually supposed to be a 2 way joystick, but for whatever reason, the mame driver sets them as buttons.", /* control_details */
17232   &tutankhm_get_ctrl_name
17233 };
17234 
tutankhm_get_ctrl_name(int type)17235 const char *tutankhm_get_ctrl_name(int type)
17236 {
17237   switch(type)
17238   {
17239     case IPT_BUTTON1: return BTN1 "Fire Left";
17240     case IPT_BUTTON2: return BTN2 "Fire Right";
17241     case IPT_BUTTON3: return BTN3 "Flash";
17242   } /* end of switch */
17243 
17244   return joy4way_labels(type);
17245 }
17246 
17247 const struct ControlInfo twincobr_ctrl =
17248 {
17249   false, /* 45_degree_rotation for joystick(s) */
17250   false, /* alternating_controls */
17251   true, /* mirrored_controls */
17252   "", /* control_details */
17253   &twincobr_get_ctrl_name
17254 };
17255 
twincobr_get_ctrl_name(int type)17256 const char *twincobr_get_ctrl_name(int type)
17257 {
17258   switch(type)
17259   {
17260     case IPT_BUTTON1: return BTN1 "Fire";
17261     case IPT_BUTTON2: return BTN2 "Bomb";
17262   } /* end of switch */
17263 
17264   return joy4way_labels(type);
17265 }
17266 
17267 const struct ControlInfo twineagl_ctrl =
17268 {
17269   false, /* 45_degree_rotation for joystick(s) */
17270   false, /* alternating_controls */
17271   true, /* mirrored_controls */
17272   "The conversion kit came with ?Button? and ?Missile? labels even though the flyer and the conversion manual state they are ?Bomb? and ?Missile? buttons", /* control_details */
17273   &twineagl_get_ctrl_name
17274 };
17275 
twineagl_get_ctrl_name(int type)17276 const char *twineagl_get_ctrl_name(int type)
17277 {
17278   switch(type)
17279   {
17280     case IPT_BUTTON1: return BTN1 "Missile";
17281     case IPT_BUTTON2: return BTN2 "Bomb";
17282   } /* end of switch */
17283 
17284   return joy4way_labels(type);
17285 }
17286 
17287 const struct ControlInfo twineag2_ctrl =
17288 {
17289   false, /* 45_degree_rotation for joystick(s) */
17290   false, /* alternating_controls */
17291   true, /* mirrored_controls */
17292   "", /* control_details */
17293   &twineag2_get_ctrl_name
17294 };
17295 
twineag2_get_ctrl_name(int type)17296 const char *twineag2_get_ctrl_name(int type)
17297 {
17298   switch(type)
17299   {
17300     case IPT_BUTTON1: return BTN1 "Fire";
17301     case IPT_BUTTON2: return BTN2 "Bomb";
17302     case IPT_BUTTON3: return BTN3 "Special";
17303   } /* end of switch */
17304 
17305   return joy4way_labels(type);
17306 }
17307 
17308 const struct ControlInfo twotiger_ctrl =
17309 {
17310   false, /* 45_degree_rotation for joystick(s) */
17311   false, /* alternating_controls */
17312   true, /* mirrored_controls */
17313   "Mame used to incorrectly define this game as a spinner. Now it properly shows up as a one-axis yoke. The 'misc' entry was added to show that it doesn't use the traditional star wars, 2-axis yoke. The three player start button selects dogfight mode.", /* control_details */
17314   &twotiger_get_ctrl_name
17315 };
17316 
twotiger_get_ctrl_name(int type)17317 const char *twotiger_get_ctrl_name(int type)
17318 {
17319   switch(type)
17320   {
17321     case IPT_BUTTON1: return BTN1 "Shoot";
17322     case IPT_BUTTON2: return BTN2 "Bomb";
17323     case IPT_BUTTON3: return BTN3 "Speed";
17324     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Right";
17325     case IPT_AD_STICK_X: return "Left";
17326     case IPT_AD_STICK_Y: return "";
17327     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "";
17328   } /* end of switch */
17329 
17330   return "";
17331 }
17332 
17333 const struct ControlInfo earthjkr_ctrl =
17334 {
17335   false, /* 45_degree_rotation for joystick(s) */
17336   false, /* alternating_controls */
17337   true, /* mirrored_controls */
17338   "Hold down A to increase shot power", /* control_details */
17339   &earthjkr_get_ctrl_name
17340 };
17341 
earthjkr_get_ctrl_name(int type)17342 const char *earthjkr_get_ctrl_name(int type)
17343 {
17344   switch(type)
17345   {
17346     case IPT_BUTTON1: return BTN1 "A-Shoot";
17347     case IPT_BUTTON2: return BTN2 "B-Bomb";
17348   } /* end of switch */
17349 
17350   return joy4way_labels(type);
17351 }
17352 
17353 const struct ControlInfo unsquad_ctrl =
17354 {
17355   false, /* 45_degree_rotation for joystick(s) */
17356   false, /* alternating_controls */
17357   true, /* mirrored_controls */
17358   "", /* control_details */
17359   &unsquad_get_ctrl_name
17360 };
17361 
unsquad_get_ctrl_name(int type)17362 const char *unsquad_get_ctrl_name(int type)
17363 {
17364   switch(type)
17365   {
17366     case IPT_BUTTON1: return BTN1 "Fire";
17367     case IPT_BUTTON2: return BTN2 "Special Weapon";
17368   } /* end of switch */
17369 
17370   return joy4way_labels(type);
17371 }
17372 
17373 const struct ControlInfo vball_ctrl =
17374 {
17375   false, /* 45_degree_rotation for joystick(s) */
17376   false, /* alternating_controls */
17377   true, /* mirrored_controls */
17378   "A hits the ball and B jumps.", /* control_details */
17379   &vball_get_ctrl_name
17380 };
17381 
vball_get_ctrl_name(int type)17382 const char *vball_get_ctrl_name(int type)
17383 {
17384   switch(type)
17385   {
17386     case IPT_BUTTON1: return BTN1 "A";
17387     case IPT_BUTTON2: return BTN2 "B";
17388   } /* end of switch */
17389 
17390   return joy4way_labels(type);
17391 }
17392 
17393 const struct ControlInfo usclssic_ctrl =
17394 {
17395   false, /* 45_degree_rotation for joystick(s) */
17396   true, /* alternating_controls */
17397   true, /* mirrored_controls */
17398   "", /* control_details */
17399   &usclssic_get_ctrl_name
17400 };
17401 
usclssic_get_ctrl_name(int type)17402 const char *usclssic_get_ctrl_name(int type)
17403 {
17404   switch(type)
17405   {
17406     case IPT_BUTTON1: return BTN1 "Select Club";
17407     case IPT_TRACKBALL_X: return "Left";
17408     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
17409     case IPT_TRACKBALL_Y: return "Up";
17410     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
17411   } /* end of switch */
17412 
17413   return "";
17414 }
17415 
17416 const struct ControlInfo ultratnk_ctrl =
17417 {
17418   false, /* 45_degree_rotation for joystick(s) */
17419   false, /* alternating_controls */
17420   true, /* mirrored_controls */
17421   "", /* control_details */
17422   &ultratnk_get_ctrl_name
17423 };
17424 
ultratnk_get_ctrl_name(int type)17425 const char *ultratnk_get_ctrl_name(int type)
17426 {
17427   switch(type)
17428   {
17429     case IPT_BUTTON1: return BTN1 "Fire";
17430     case IPT_JOYSTICKLEFT_UP: return "Up";
17431     case IPT_JOYSTICKLEFT_DOWN: return "Down";
17432     case IPT_JOYSTICKRIGHT_UP: return "Up";
17433     case IPT_JOYSTICKRIGHT_DOWN: return "Down";
17434   } /* end of switch */
17435 
17436   return "";
17437 }
17438 
17439 const struct ControlInfo utoukond_ctrl =
17440 {
17441   false, /* 45_degree_rotation for joystick(s) */
17442   false, /* alternating_controls */
17443   true, /* mirrored_controls */
17444   "", /* control_details */
17445   &utoukond_get_ctrl_name
17446 };
17447 
utoukond_get_ctrl_name(int type)17448 const char *utoukond_get_ctrl_name(int type)
17449 {
17450   switch(type)
17451   {
17452     case IPT_BUTTON1: return BTN1 "Attack";
17453     case IPT_BUTTON2: return BTN2 "Jump";
17454     case IPT_BUTTON3: return BTN3 "Bomb";
17455   } /* end of switch */
17456 
17457   return joy4way_labels(type);
17458 }
17459 
17460 const struct ControlInfo undrfire_ctrl =
17461 {
17462   false, /* 45_degree_rotation for joystick(s) */
17463   false, /* alternating_controls */
17464   true, /* mirrored_controls */
17465   "The guns second buton is a shotgun pump.", /* control_details */
17466   &undrfire_get_ctrl_name
17467 };
17468 
undrfire_get_ctrl_name(int type)17469 const char *undrfire_get_ctrl_name(int type)
17470 {
17471   switch(type)
17472   {
17473     case IPT_BUTTON1: return BTN1 "Fire";
17474     case IPT_BUTTON2: return BTN2 "Bomb";
17475     case IPT_LIGHTGUN_X: return "Aim Left";
17476     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Aim Right";
17477     case IPT_LIGHTGUN_Y: return "Aim Up";
17478     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Aim Down";
17479   } /* end of switch */
17480 
17481   return "";
17482 }
17483 
17484 const struct ControlInfo uniwars_ctrl =
17485 {
17486   false, /* 45_degree_rotation for joystick(s) */
17487   true, /* alternating_controls */
17488   true, /* mirrored_controls */
17489   "", /* control_details */
17490   &uniwars_get_ctrl_name
17491 };
17492 
uniwars_get_ctrl_name(int type)17493 const char *uniwars_get_ctrl_name(int type)
17494 {
17495   switch(type)
17496   {
17497     case IPT_BUTTON1: return BTN1 "Firing Button";
17498     case IPT_JOYSTICK_LEFT: return "Control Lever (Left)";
17499     case IPT_JOYSTICK_RIGHT: return "Control Lever (Right)";
17500   } /* end of switch */
17501 
17502   return "";
17503 }
17504 
17505 const struct ControlInfo upndown_ctrl =
17506 {
17507   false, /* 45_degree_rotation for joystick(s) */
17508   true, /* alternating_controls */
17509   true, /* mirrored_controls */
17510   "", /* control_details */
17511   &upndown_get_ctrl_name
17512 };
17513 
upndown_get_ctrl_name(int type)17514 const char *upndown_get_ctrl_name(int type)
17515 {
17516   switch(type)
17517   {
17518     case IPT_BUTTON1: return BTN1 "Jump";
17519   } /* end of switch */
17520 
17521   return joy4way_labels(type);
17522 }
17523 
17524 const struct ControlInfo valkyrie_ctrl =
17525 {
17526   false, /* 45_degree_rotation for joystick(s) */
17527   false, /* alternating_controls */
17528   true, /* mirrored_controls */
17529   "Hold down attack button to use magic.", /* control_details */
17530   &valkyrie_get_ctrl_name
17531 };
17532 
valkyrie_get_ctrl_name(int type)17533 const char *valkyrie_get_ctrl_name(int type)
17534 {
17535   switch(type)
17536   {
17537     case IPT_BUTTON1: return BTN1 "Attack";
17538     case IPT_BUTTON2: return BTN2 "Jump";
17539     case IPT_BUTTON3: return BTN3 "??";
17540   } /* end of switch */
17541 
17542   return joy4way_labels(type);
17543 }
17544 
17545 const struct ControlInfo vandyke_ctrl =
17546 {
17547   false, /* 45_degree_rotation for joystick(s) */
17548   false, /* alternating_controls */
17549   true, /* mirrored_controls */
17550   "", /* control_details */
17551   &vandyke_get_ctrl_name
17552 };
17553 
vandyke_get_ctrl_name(int type)17554 const char *vandyke_get_ctrl_name(int type)
17555 {
17556   switch(type)
17557   {
17558     case IPT_BUTTON1: return BTN1 "Attack";
17559     case IPT_BUTTON2: return BTN2 "Jump";
17560   } /* end of switch */
17561 
17562   return joy4way_labels(type);
17563 }
17564 
17565 const struct ControlInfo vanguard_ctrl =
17566 {
17567   false, /* 45_degree_rotation for joystick(s) */
17568   true, /* alternating_controls */
17569   true, /* mirrored_controls */
17570   "The buttons on this control panel are arranged in a diamond shape. As each button fires in a different direction it is very difficult to play this game without a diamond patterened layout. Also the joystick is labeled control, but for obvious reasons the labels in this entry have the usual labeling.", /* control_details */
17571   &vanguard_get_ctrl_name
17572 };
17573 
vanguard_get_ctrl_name(int type)17574 const char *vanguard_get_ctrl_name(int type)
17575 {
17576   switch(type)
17577   {
17578     case IPT_BUTTON1: return BTN1 "Fire Back";
17579     case IPT_BUTTON2: return BTN2 "Fire Forward";
17580     case IPT_BUTTON3: return BTN3 "Fire Down";
17581     case IPT_BUTTON4: return BTN4 "Fire Up";
17582   } /* end of switch */
17583 
17584   return joy4way_labels(type);
17585 }
17586 
17587 const struct ControlInfo varth_ctrl =
17588 {
17589   false, /* 45_degree_rotation for joystick(s) */
17590   false, /* alternating_controls */
17591   true, /* mirrored_controls */
17592   "", /* control_details */
17593   &varth_get_ctrl_name
17594 };
17595 
varth_get_ctrl_name(int type)17596 const char *varth_get_ctrl_name(int type)
17597 {
17598   switch(type)
17599   {
17600     case IPT_BUTTON1: return BTN1 "Fire";
17601     case IPT_BUTTON2: return BTN2 "Special";
17602   } /* end of switch */
17603 
17604   return joy4way_labels(type);
17605 }
17606 
17607 const struct ControlInfo vendetta_ctrl =
17608 {
17609   false, /* 45_degree_rotation for joystick(s) */
17610   false, /* alternating_controls */
17611   true, /* mirrored_controls */
17612   "", /* control_details */
17613   &vendetta_get_ctrl_name
17614 };
17615 
vendetta_get_ctrl_name(int type)17616 const char *vendetta_get_ctrl_name(int type)
17617 {
17618   switch(type)
17619   {
17620     case IPT_BUTTON1: return BTN1 "Punch";
17621     case IPT_BUTTON2: return BTN2 "Kick";
17622   } /* end of switch */
17623 
17624   return joy4way_labels(type);
17625 }
17626 
17627 const struct ControlInfo venture_ctrl =
17628 {
17629   false, /* 45_degree_rotation for joystick(s) */
17630   true, /* alternating_controls */
17631   true, /* mirrored_controls */
17632   "", /* control_details */
17633   &venture_get_ctrl_name
17634 };
17635 
venture_get_ctrl_name(int type)17636 const char *venture_get_ctrl_name(int type)
17637 {
17638   switch(type)
17639   {
17640     case IPT_BUTTON1: return BTN1 "Fire";
17641   } /* end of switch */
17642 
17643   return joy4way_labels(type);
17644 }
17645 
17646 const struct ControlInfo victory_ctrl =
17647 {
17648   false, /* 45_degree_rotation for joystick(s) */
17649   true, /* alternating_controls */
17650   true, /* mirrored_controls */
17651   "The game used a tempest style spinner, three round lighted buttons for normal functions, and a large, rectangular, trivia-style button for the doomsday weapon activation.", /* control_details */
17652   &victory_get_ctrl_name
17653 };
17654 
victory_get_ctrl_name(int type)17655 const char *victory_get_ctrl_name(int type)
17656 {
17657   switch(type)
17658   {
17659     case IPT_BUTTON1: return BTN1 "Fire";
17660     case IPT_BUTTON2: return BTN2 "Thrust";
17661     case IPT_BUTTON3: return BTN3 "Shields";
17662     case IPT_BUTTON4: return BTN4 "Doomsday";
17663     case IPT_DIAL: return "Rotate Left";
17664     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
17665   } /* end of switch */
17666 
17667   return "";
17668 }
17669 
17670 const struct ControlInfo victroad_ctrl =
17671 {
17672   false, /* 45_degree_rotation for joystick(s) */
17673   false, /* alternating_controls */
17674   true, /* mirrored_controls */
17675   "", /* control_details */
17676   &victroad_get_ctrl_name
17677 };
17678 
victroad_get_ctrl_name(int type)17679 const char *victroad_get_ctrl_name(int type)
17680 {
17681   switch(type)
17682   {
17683     case IPT_BUTTON1: return BTN1 "Fire";
17684     case IPT_BUTTON2: return BTN2 "Grenade";
17685     case IPT_DIAL: return "Rotate Left";
17686     case (IPT_DIAL + IPT_EXTENSION): return "Rotate Right";
17687   } /* end of switch */
17688 
17689   return joy4way_labels(type);
17690 }
17691 
17692 const struct ControlInfo hustler_ctrl =
17693 {
17694   false, /* 45_degree_rotation for joystick(s) */
17695   true, /* alternating_controls */
17696   true, /* mirrored_controls */
17697   "The joystick is a twist joystick.", /* control_details */
17698   &hustler_get_ctrl_name
17699 };
17700 
hustler_get_ctrl_name(int type)17701 const char *hustler_get_ctrl_name(int type)
17702 {
17703   switch(type)
17704   {
17705     case IPT_BUTTON1: return BTN1 "Shoot";
17706   } /* end of switch */
17707 
17708   return joy2way_labels(type);
17709 }
17710 
17711 const struct ControlInfo videopin_ctrl =
17712 {
17713   false, /* 45_degree_rotation for joystick(s) */
17714   true, /* alternating_controls */
17715   true, /* mirrored_controls */
17716   "This game had a control panel that repliactes real pinball controls. It even had a section you could nudge in the front and a plunger. The plunger appears to be digital, but since it really adds to the feel of the game, I tacked on the 'other' flag. The hardcoded defaults for the flippers are left ctrl and right ctrl. It is suggested that you place a videopin.ini in your personal ctrlr folder and remap them to match visual pinball defaults.", /* control_details */
17717   &videopin_get_ctrl_name
17718 };
17719 
videopin_get_ctrl_name(int type)17720 const char *videopin_get_ctrl_name(int type)
17721 {
17722   switch(type)
17723   {
17724     case IPT_BUTTON1: return BTN1 "Left Flipper";
17725     case IPT_BUTTON2: return BTN2 "Right Flipper";
17726     case IPT_BUTTON3: return BTN3 "Nudge";
17727     case IPT_JOYSTICK_UP: return "";
17728     case IPT_JOYSTICK_DOWN: return "Pull plunger";
17729   } /* end of switch */
17730 
17731   return "";
17732 }
17733 
17734 const struct ControlInfo vigilant_ctrl =
17735 {
17736   false, /* 45_degree_rotation for joystick(s) */
17737   false, /* alternating_controls */
17738   true, /* mirrored_controls */
17739   "This game lacks labels for the buttons, even on the official cpo and in the manual. These are simply the actions they do. Trivia:  The cpo of this game has 'I'm Bad!' graffiti on it which is a tribute to the game BadDudes, relased by the same company eariler that year. In that game the character would yell the phrase at the end of each level.", /* control_details */
17740   &vigilant_get_ctrl_name
17741 };
17742 
vigilant_get_ctrl_name(int type)17743 const char *vigilant_get_ctrl_name(int type)
17744 {
17745   switch(type)
17746   {
17747     case IPT_BUTTON1: return BTN1 "Punch";
17748     case IPT_BUTTON2: return BTN2 "Kick";
17749     case IPT_JOYSTICK_UP: return "Jump";
17750     case IPT_JOYSTICK_DOWN: return "Duck";
17751     case IPT_JOYSTICK_LEFT: return "Left";
17752     case IPT_JOYSTICK_RIGHT: return "Right";
17753   } /* end of switch */
17754 
17755   return "";
17756 }
17757 
17758 const struct ControlInfo vimana_ctrl =
17759 {
17760   false, /* 45_degree_rotation for joystick(s) */
17761   false, /* alternating_controls */
17762   true, /* mirrored_controls */
17763   "If you hold the shoot button for a while you increase the spread of your bullets.", /* control_details */
17764   &vimana_get_ctrl_name
17765 };
17766 
vimana_get_ctrl_name(int type)17767 const char *vimana_get_ctrl_name(int type)
17768 {
17769   switch(type)
17770   {
17771     case IPT_BUTTON1: return BTN1 "Shoot";
17772     case IPT_BUTTON2: return BTN2 "Circle Bomb";
17773     case IPT_BUTTON3: return BTN3 "??";
17774   } /* end of switch */
17775 
17776   return joy4way_labels(type);
17777 }
17778 
17779 const struct ControlInfo vindictr_ctrl =
17780 {
17781   false, /* 45_degree_rotation for joystick(s) */
17782   false, /* alternating_controls */
17783   true, /* mirrored_controls */
17784   "There are two button on each stick (trigger and thumb buttons). The thumb buttons are to rotate the tanks' turrent if you bought the ability to rotate (and it's not damaged). The right trigger is the normal fire button, the left trigger button is to fire the special weapon. If you have different types of special weapons, the start is used to switch between the different types. The odd numbered buttons are the triggers and the even numbered ones are the thumb switches for the left and right joysticks respectively. Note:  If you have cheats enabled the game inputs are hacked to use a 4way joystick as the controls. There isn't an option to turn it off in the cheat menu, so if you wish to play the game correctly, turn cheats off.", /* control_details */
17785   &vindictr_get_ctrl_name
17786 };
17787 
vindictr_get_ctrl_name(int type)17788 const char *vindictr_get_ctrl_name(int type)
17789 {
17790   switch(type)
17791   {
17792     case IPT_BUTTON1: return BTN1 "Special";
17793     case IPT_BUTTON2: return BTN2 "Rotate left";
17794     case IPT_BUTTON3: return BTN3 "Fire";
17795     case IPT_BUTTON4: return BTN4 "Rotate right";
17796     case IPT_JOYSTICKRIGHT_UP: return "Right forward";
17797     case IPT_JOYSTICKLEFT_DOWN: return "Left back";
17798     case IPT_JOYSTICKLEFT_UP: return "Left forward";
17799     case IPT_JOYSTICKRIGHT_DOWN: return "Right back";
17800   } /* end of switch */
17801 
17802   return "";
17803 }
17804 
17805 const struct ControlInfo vindctr2_ctrl =
17806 {
17807   false, /* 45_degree_rotation for joystick(s) */
17808   false, /* alternating_controls */
17809   true, /* mirrored_controls */
17810   "There are two button on each stick (trigger and thumb buttons). The thumb buttons are to rotate the tanks' turrent if you bought the ability to rotate (and it's not damaged). The right trigger is the normal fire button, the left trigger button is to fire the special weapon. If you have different types of special weapons, the start is used to switch between the different types. The odd numbered buttons are the trigger sticks and the even numbered ones are the thumbsticks on the left and right stck respectively.", /* control_details */
17811   &vindctr2_get_ctrl_name
17812 };
17813 
vindctr2_get_ctrl_name(int type)17814 const char *vindctr2_get_ctrl_name(int type)
17815 {
17816   switch(type)
17817   {
17818     case IPT_BUTTON1: return BTN1 "special";
17819     case IPT_BUTTON2: return BTN2 "rotate left";
17820     case IPT_BUTTON3: return BTN3 "fire";
17821     case IPT_BUTTON4: return BTN4 "rotate right";
17822     case IPT_JOYSTICKRIGHT_UP: return "Right forward";
17823     case IPT_JOYSTICKLEFT_DOWN: return "Left back";
17824     case IPT_JOYSTICKLEFT_UP: return "Left forward";
17825     case IPT_JOYSTICKRIGHT_DOWN: return "Right back";
17826   } /* end of switch */
17827 
17828   return "";
17829 }
17830 
17831 const struct ControlInfo viofight_ctrl =
17832 {
17833   false, /* 45_degree_rotation for joystick(s) */
17834   false, /* alternating_controls */
17835   true, /* mirrored_controls */
17836   "As this game is a taito game, it is generally sold as a convrsion kit with the buttons mounted in a 'double dragon' layout with the punch/kick buttons at the bottom of the triangle. Pressing punch and jump at the smae time does a special move. Also the offical cpo doesn't have any labels for anything. This is based on parts of the manual and documentation for teh game.", /* control_details */
17837   &viofight_get_ctrl_name
17838 };
17839 
viofight_get_ctrl_name(int type)17840 const char *viofight_get_ctrl_name(int type)
17841 {
17842   switch(type)
17843   {
17844     case IPT_BUTTON1: return BTN1 "Punch";
17845     case IPT_BUTTON2: return BTN2 "Jump";
17846     case IPT_BUTTON3: return BTN3 "Kick";
17847   } /* end of switch */
17848 
17849   return joy4way_labels(type);
17850 }
17851 
17852 const struct ControlInfo viper_ctrl =
17853 {
17854   false, /* 45_degree_rotation for joystick(s) */
17855   false, /* alternating_controls */
17856   false, /* mirrored_controls */
17857   "This game actually uses two trigger sticks that are mounted stationary on the montior, which moves as you pull on the sticks. As you pull, the area of the screen moves as well. This gives the illusion that you are manning a gun turrent. Each stick has two thumb buttons but there are only two inputs. To confuse things even more, both inputs do the same thing. (Fire)", /* control_details */
17858   &viper_get_ctrl_name
17859 };
17860 
viper_get_ctrl_name(int type)17861 const char *viper_get_ctrl_name(int type)
17862 {
17863   switch(type)
17864   {
17865     case IPT_BUTTON1: return BTN1 "Fire";
17866     case IPT_BUTTON2: return BTN2 "Fire";
17867     case IPT_TRACKBALL_X: return "Left";
17868     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
17869     case IPT_TRACKBALL_Y: return "Up";
17870     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
17871   } /* end of switch */
17872 
17873   return "";
17874 }
17875 
17876 const struct ControlInfo vf_ctrl =
17877 {
17878   false, /* 45_degree_rotation for joystick(s) */
17879   false, /* alternating_controls */
17880   true, /* mirrored_controls */
17881   "Note that on a real vf cabinet the defense button was to the left adn slightly below the punch button. Those of you with neogeo layouts shoudl have not problem replicating the layout.", /* control_details */
17882   &vf_get_ctrl_name
17883 };
17884 
vf_get_ctrl_name(int type)17885 const char *vf_get_ctrl_name(int type)
17886 {
17887   switch(type)
17888   {
17889     case IPT_BUTTON1: return BTN1 "Punch";
17890     case IPT_BUTTON2: return BTN2 "Kick";
17891     case IPT_BUTTON3: return BTN3 "Defense";
17892   } /* end of switch */
17893 
17894   return joy4way_labels(type);
17895 }
17896 
17897 const struct ControlInfo vf2_ctrl =
17898 {
17899   false, /* 45_degree_rotation for joystick(s) */
17900   false, /* alternating_controls */
17901   true, /* mirrored_controls */
17902   "Note that on a real vf2 cabinet the defense button was to the left adn slightly below the punch button. Those of you with neogeo layouts shoudl have not problem replicating the layout.", /* control_details */
17903   &vf2_get_ctrl_name
17904 };
17905 
vf2_get_ctrl_name(int type)17906 const char *vf2_get_ctrl_name(int type)
17907 {
17908   switch(type)
17909   {
17910     case IPT_BUTTON1: return BTN1 "Punch";
17911     case IPT_BUTTON2: return BTN2 "Kick";
17912     case IPT_BUTTON3: return BTN3 "Defense";
17913   } /* end of switch */
17914 
17915   return joy4way_labels(type);
17916 }
17917 
17918 const struct ControlInfo vsgongf_ctrl =
17919 {
17920   false, /* 45_degree_rotation for joystick(s) */
17921   true, /* alternating_controls */
17922   true, /* mirrored_controls */
17923   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
17924   &vsgongf_get_ctrl_name
17925 };
17926 
vsgongf_get_ctrl_name(int type)17927 const char *vsgongf_get_ctrl_name(int type)
17928 {
17929   switch(type)
17930   {
17931     case IPT_BUTTON1: return BTN1 "B";
17932     case IPT_BUTTON2: return BTN2 "A";
17933   } /* end of switch */
17934 
17935   return joy4way_labels(type);
17936 }
17937 
17938 const struct ControlInfo rbibb_ctrl =
17939 {
17940   false, /* 45_degree_rotation for joystick(s) */
17941   true, /* alternating_controls */
17942   true, /* mirrored_controls */
17943   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
17944   &rbibb_get_ctrl_name
17945 };
17946 
rbibb_get_ctrl_name(int type)17947 const char *rbibb_get_ctrl_name(int type)
17948 {
17949   switch(type)
17950   {
17951     case IPT_BUTTON1: return BTN1 "B";
17952     case IPT_BUTTON2: return BTN2 "A";
17953   } /* end of switch */
17954 
17955   return joy4way_labels(type);
17956 }
17957 
17958 const struct ControlInfo balonfgt_ctrl =
17959 {
17960   false, /* 45_degree_rotation for joystick(s) */
17961   true, /* alternating_controls */
17962   true, /* mirrored_controls */
17963   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
17964   &balonfgt_get_ctrl_name
17965 };
17966 
balonfgt_get_ctrl_name(int type)17967 const char *balonfgt_get_ctrl_name(int type)
17968 {
17969   switch(type)
17970   {
17971     case IPT_BUTTON1: return BTN1 "B";
17972     case IPT_BUTTON2: return BTN2 "A";
17973   } /* end of switch */
17974 
17975   return joy4way_labels(type);
17976 }
17977 
17978 const struct ControlInfo vsbball_ctrl =
17979 {
17980   false, /* 45_degree_rotation for joystick(s) */
17981   true, /* alternating_controls */
17982   true, /* mirrored_controls */
17983   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
17984   &vsbball_get_ctrl_name
17985 };
17986 
vsbball_get_ctrl_name(int type)17987 const char *vsbball_get_ctrl_name(int type)
17988 {
17989   switch(type)
17990   {
17991     case IPT_BUTTON1: return BTN1 "B";
17992     case IPT_BUTTON2: return BTN2 "A";
17993   } /* end of switch */
17994 
17995   return joy4way_labels(type);
17996 }
17997 
17998 const struct ControlInfo btlecity_ctrl =
17999 {
18000   false, /* 45_degree_rotation for joystick(s) */
18001   true, /* alternating_controls */
18002   true, /* mirrored_controls */
18003   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18004   &btlecity_get_ctrl_name
18005 };
18006 
btlecity_get_ctrl_name(int type)18007 const char *btlecity_get_ctrl_name(int type)
18008 {
18009   switch(type)
18010   {
18011     case IPT_BUTTON1: return BTN1 "B";
18012     case IPT_BUTTON2: return BTN2 "A";
18013   } /* end of switch */
18014 
18015   return joy4way_labels(type);
18016 }
18017 
18018 const struct ControlInfo cstlevna_ctrl =
18019 {
18020   false, /* 45_degree_rotation for joystick(s) */
18021   true, /* alternating_controls */
18022   true, /* mirrored_controls */
18023   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18024   &cstlevna_get_ctrl_name
18025 };
18026 
cstlevna_get_ctrl_name(int type)18027 const char *cstlevna_get_ctrl_name(int type)
18028 {
18029   switch(type)
18030   {
18031     case IPT_BUTTON1: return BTN1 "B";
18032     case IPT_BUTTON2: return BTN2 "A";
18033   } /* end of switch */
18034 
18035   return joy4way_labels(type);
18036 }
18037 
18038 const struct ControlInfo cluclu_ctrl =
18039 {
18040   false, /* 45_degree_rotation for joystick(s) */
18041   true, /* alternating_controls */
18042   true, /* mirrored_controls */
18043   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18044   &cluclu_get_ctrl_name
18045 };
18046 
cluclu_get_ctrl_name(int type)18047 const char *cluclu_get_ctrl_name(int type)
18048 {
18049   switch(type)
18050   {
18051     case IPT_BUTTON1: return BTN1 "B";
18052     case IPT_BUTTON2: return BTN2 "A";
18053   } /* end of switch */
18054 
18055   return joy4way_labels(type);
18056 }
18057 
18058 const struct ControlInfo drmario_ctrl =
18059 {
18060   false, /* 45_degree_rotation for joystick(s) */
18061   true, /* alternating_controls */
18062   true, /* mirrored_controls */
18063   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18064   &drmario_get_ctrl_name
18065 };
18066 
drmario_get_ctrl_name(int type)18067 const char *drmario_get_ctrl_name(int type)
18068 {
18069   switch(type)
18070   {
18071     case IPT_BUTTON1: return BTN1 "B";
18072     case IPT_BUTTON2: return BTN2 "A";
18073   } /* end of switch */
18074 
18075   return joy4way_labels(type);
18076 }
18077 
18078 const struct ControlInfo duckhunt_ctrl =
18079 {
18080   false, /* 45_degree_rotation for joystick(s) */
18081   true, /* alternating_controls */
18082   true, /* mirrored_controls */
18083   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18084   &duckhunt_get_ctrl_name
18085 };
18086 
duckhunt_get_ctrl_name(int type)18087 const char *duckhunt_get_ctrl_name(int type)
18088 {
18089   switch(type)
18090   {
18091     case IPT_BUTTON1: return BTN1 "B";
18092     case IPT_BUTTON2: return BTN2 "A";
18093   } /* end of switch */
18094 
18095   return joy4way_labels(type);
18096 }
18097 
18098 const struct ControlInfo excitebk_ctrl =
18099 {
18100   false, /* 45_degree_rotation for joystick(s) */
18101   true, /* alternating_controls */
18102   true, /* mirrored_controls */
18103   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18104   &excitebk_get_ctrl_name
18105 };
18106 
excitebk_get_ctrl_name(int type)18107 const char *excitebk_get_ctrl_name(int type)
18108 {
18109   switch(type)
18110   {
18111     case IPT_BUTTON1: return BTN1 "B";
18112     case IPT_BUTTON2: return BTN2 "A";
18113   } /* end of switch */
18114 
18115   return joy4way_labels(type);
18116 }
18117 
18118 const struct ControlInfo vsfdf_ctrl =
18119 {
18120   false, /* 45_degree_rotation for joystick(s) */
18121   true, /* alternating_controls */
18122   true, /* mirrored_controls */
18123   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18124   &vsfdf_get_ctrl_name
18125 };
18126 
vsfdf_get_ctrl_name(int type)18127 const char *vsfdf_get_ctrl_name(int type)
18128 {
18129   switch(type)
18130   {
18131     case IPT_BUTTON1: return BTN1 "B";
18132     case IPT_BUTTON2: return BTN2 "A";
18133   } /* end of switch */
18134 
18135   return joy4way_labels(type);
18136 }
18137 
18138 const struct ControlInfo vsgradus_ctrl =
18139 {
18140   false, /* 45_degree_rotation for joystick(s) */
18141   true, /* alternating_controls */
18142   true, /* mirrored_controls */
18143   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18144   &vsgradus_get_ctrl_name
18145 };
18146 
vsgradus_get_ctrl_name(int type)18147 const char *vsgradus_get_ctrl_name(int type)
18148 {
18149   switch(type)
18150   {
18151     case IPT_BUTTON1: return BTN1 "B";
18152     case IPT_BUTTON2: return BTN2 "A";
18153   } /* end of switch */
18154 
18155   return joy4way_labels(type);
18156 }
18157 
18158 const struct ControlInfo vsgshoe_ctrl =
18159 {
18160   false, /* 45_degree_rotation for joystick(s) */
18161   true, /* alternating_controls */
18162   true, /* mirrored_controls */
18163   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18164   &vsgshoe_get_ctrl_name
18165 };
18166 
vsgshoe_get_ctrl_name(int type)18167 const char *vsgshoe_get_ctrl_name(int type)
18168 {
18169   switch(type)
18170   {
18171     case IPT_BUTTON1: return BTN1 "Fire";
18172     case IPT_LIGHTGUN_X: return "Left";
18173     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
18174     case IPT_LIGHTGUN_Y: return "Up";
18175     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
18176   } /* end of switch */
18177 
18178   return "";
18179 }
18180 
18181 const struct ControlInfo hogalley_ctrl =
18182 {
18183   false, /* 45_degree_rotation for joystick(s) */
18184   true, /* alternating_controls */
18185   true, /* mirrored_controls */
18186   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18187   &hogalley_get_ctrl_name
18188 };
18189 
hogalley_get_ctrl_name(int type)18190 const char *hogalley_get_ctrl_name(int type)
18191 {
18192   switch(type)
18193   {
18194     case IPT_BUTTON1: return BTN1 "Fire";
18195     case IPT_LIGHTGUN_X: return "Left";
18196     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
18197     case IPT_LIGHTGUN_Y: return "Up";
18198     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
18199   } /* end of switch */
18200 
18201   return "";
18202 }
18203 
18204 const struct ControlInfo hotsmash_ctrl =
18205 {
18206   false, /* 45_degree_rotation for joystick(s) */
18207   false, /* alternating_controls */
18208   true, /* mirrored_controls */
18209   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. This game is unique to the system in that it uses a spinner. As it's one of the last games released for the system, it can be assumed that this is the only vs game to do so.", /* control_details */
18210   &hotsmash_get_ctrl_name
18211 };
18212 
hotsmash_get_ctrl_name(int type)18213 const char *hotsmash_get_ctrl_name(int type)
18214 {
18215   switch(type)
18216   {
18217     case IPT_DIAL: return "Left";
18218     case (IPT_DIAL + IPT_EXTENSION): return "Right";
18219   } /* end of switch */
18220 
18221   return "";
18222 }
18223 
18224 const struct ControlInfo iceclimb_ctrl =
18225 {
18226   false, /* 45_degree_rotation for joystick(s) */
18227   true, /* alternating_controls */
18228   true, /* mirrored_controls */
18229   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18230   &iceclimb_get_ctrl_name
18231 };
18232 
iceclimb_get_ctrl_name(int type)18233 const char *iceclimb_get_ctrl_name(int type)
18234 {
18235   switch(type)
18236   {
18237     case IPT_BUTTON1: return BTN1 "B";
18238     case IPT_BUTTON2: return BTN2 "A";
18239   } /* end of switch */
18240 
18241   return joy4way_labels(type);
18242 }
18243 
18244 const struct ControlInfo iceclmrj_ctrl =
18245 {
18246   false, /* 45_degree_rotation for joystick(s) */
18247   false, /* alternating_controls */
18248   true, /* mirrored_controls */
18249   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18250   &iceclmrj_get_ctrl_name
18251 };
18252 
iceclmrj_get_ctrl_name(int type)18253 const char *iceclmrj_get_ctrl_name(int type)
18254 {
18255   switch(type)
18256   {
18257     case IPT_BUTTON1: return BTN1 "B";
18258     case IPT_BUTTON2: return BTN2 "A";
18259   } /* end of switch */
18260 
18261   return joy4way_labels(type);
18262 }
18263 
18264 const struct ControlInfo machridr_ctrl =
18265 {
18266   false, /* 45_degree_rotation for joystick(s) */
18267   true, /* alternating_controls */
18268   true, /* mirrored_controls */
18269   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18270   &machridr_get_ctrl_name
18271 };
18272 
machridr_get_ctrl_name(int type)18273 const char *machridr_get_ctrl_name(int type)
18274 {
18275   switch(type)
18276   {
18277     case IPT_BUTTON1: return BTN1 "B";
18278     case IPT_BUTTON2: return BTN2 "A";
18279   } /* end of switch */
18280 
18281   return joy4way_labels(type);
18282 }
18283 
18284 const struct ControlInfo mightybj_ctrl =
18285 {
18286   false, /* 45_degree_rotation for joystick(s) */
18287   true, /* alternating_controls */
18288   true, /* mirrored_controls */
18289   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18290   &mightybj_get_ctrl_name
18291 };
18292 
mightybj_get_ctrl_name(int type)18293 const char *mightybj_get_ctrl_name(int type)
18294 {
18295   switch(type)
18296   {
18297     case IPT_BUTTON1: return BTN1 "B";
18298     case IPT_BUTTON2: return BTN2 "A";
18299   } /* end of switch */
18300 
18301   return joy4way_labels(type);
18302 }
18303 
18304 const struct ControlInfo jajamaru_ctrl =
18305 {
18306   false, /* 45_degree_rotation for joystick(s) */
18307   true, /* alternating_controls */
18308   true, /* mirrored_controls */
18309   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18310   &jajamaru_get_ctrl_name
18311 };
18312 
jajamaru_get_ctrl_name(int type)18313 const char *jajamaru_get_ctrl_name(int type)
18314 {
18315   switch(type)
18316   {
18317     case IPT_BUTTON1: return BTN1 "B";
18318     case IPT_BUTTON2: return BTN2 "A";
18319   } /* end of switch */
18320 
18321   return joy4way_labels(type);
18322 }
18323 
18324 const struct ControlInfo vspinbal_ctrl =
18325 {
18326   false, /* 45_degree_rotation for joystick(s) */
18327   true, /* alternating_controls */
18328   true, /* mirrored_controls */
18329   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18330   &vspinbal_get_ctrl_name
18331 };
18332 
vspinbal_get_ctrl_name(int type)18333 const char *vspinbal_get_ctrl_name(int type)
18334 {
18335   switch(type)
18336   {
18337     case IPT_BUTTON1: return BTN1 "B";
18338     case IPT_BUTTON2: return BTN2 "A";
18339   } /* end of switch */
18340 
18341   return joy4way_labels(type);
18342 }
18343 
18344 const struct ControlInfo platoon_ctrl =
18345 {
18346   false, /* 45_degree_rotation for joystick(s) */
18347   true, /* alternating_controls */
18348   true, /* mirrored_controls */
18349   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18350   &platoon_get_ctrl_name
18351 };
18352 
platoon_get_ctrl_name(int type)18353 const char *platoon_get_ctrl_name(int type)
18354 {
18355   switch(type)
18356   {
18357     case IPT_BUTTON1: return BTN1 "B";
18358     case IPT_BUTTON2: return BTN2 "A";
18359   } /* end of switch */
18360 
18361   return joy4way_labels(type);
18362 }
18363 
18364 const struct ControlInfo bnglngby_ctrl =
18365 {
18366   false, /* 45_degree_rotation for joystick(s) */
18367   true, /* alternating_controls */
18368   true, /* mirrored_controls */
18369   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18370   &bnglngby_get_ctrl_name
18371 };
18372 
bnglngby_get_ctrl_name(int type)18373 const char *bnglngby_get_ctrl_name(int type)
18374 {
18375   switch(type)
18376   {
18377     case IPT_BUTTON1: return BTN1 "B";
18378     case IPT_BUTTON2: return BTN2 "A";
18379   } /* end of switch */
18380 
18381   return joy4way_labels(type);
18382 }
18383 
18384 const struct ControlInfo vsslalom_ctrl =
18385 {
18386   false, /* 45_degree_rotation for joystick(s) */
18387   true, /* alternating_controls */
18388   true, /* mirrored_controls */
18389   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18390   &vsslalom_get_ctrl_name
18391 };
18392 
vsslalom_get_ctrl_name(int type)18393 const char *vsslalom_get_ctrl_name(int type)
18394 {
18395   switch(type)
18396   {
18397     case IPT_BUTTON1: return BTN1 "Jump";
18398     case IPT_JOYSTICK_UP: return "Lean Forward";
18399     case IPT_JOYSTICK_DOWN: return "Brake";
18400     case IPT_JOYSTICK_LEFT: return "Left";
18401     case IPT_JOYSTICK_RIGHT: return "Right";
18402   } /* end of switch */
18403 
18404   return "";
18405 }
18406 
18407 const struct ControlInfo vssoccer_ctrl =
18408 {
18409   false, /* 45_degree_rotation for joystick(s) */
18410   true, /* alternating_controls */
18411   true, /* mirrored_controls */
18412   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18413   &vssoccer_get_ctrl_name
18414 };
18415 
vssoccer_get_ctrl_name(int type)18416 const char *vssoccer_get_ctrl_name(int type)
18417 {
18418   switch(type)
18419   {
18420     case IPT_BUTTON1: return BTN1 "B";
18421     case IPT_BUTTON2: return BTN2 "A";
18422   } /* end of switch */
18423 
18424   return joy4way_labels(type);
18425 }
18426 
18427 const struct ControlInfo starlstr_ctrl =
18428 {
18429   false, /* 45_degree_rotation for joystick(s) */
18430   true, /* alternating_controls */
18431   true, /* mirrored_controls */
18432   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18433   &starlstr_get_ctrl_name
18434 };
18435 
starlstr_get_ctrl_name(int type)18436 const char *starlstr_get_ctrl_name(int type)
18437 {
18438   switch(type)
18439   {
18440     case IPT_BUTTON1: return BTN1 "B";
18441     case IPT_BUTTON2: return BTN2 "A";
18442   } /* end of switch */
18443 
18444   return joy4way_labels(type);
18445 }
18446 
18447 const struct ControlInfo smgolf_ctrl =
18448 {
18449   false, /* 45_degree_rotation for joystick(s) */
18450   true, /* alternating_controls */
18451   true, /* mirrored_controls */
18452   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18453   &smgolf_get_ctrl_name
18454 };
18455 
smgolf_get_ctrl_name(int type)18456 const char *smgolf_get_ctrl_name(int type)
18457 {
18458   switch(type)
18459   {
18460     case IPT_BUTTON1: return BTN1 "B";
18461     case IPT_BUTTON2: return BTN2 "A";
18462   } /* end of switch */
18463 
18464   return joy4way_labels(type);
18465 }
18466 
18467 const struct ControlInfo suprmrio_ctrl =
18468 {
18469   false, /* 45_degree_rotation for joystick(s) */
18470   true, /* alternating_controls */
18471   true, /* mirrored_controls */
18472   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18473   &suprmrio_get_ctrl_name
18474 };
18475 
suprmrio_get_ctrl_name(int type)18476 const char *suprmrio_get_ctrl_name(int type)
18477 {
18478   switch(type)
18479   {
18480     case IPT_BUTTON1: return BTN1 "B";
18481     case IPT_BUTTON2: return BTN2 "A";
18482   } /* end of switch */
18483 
18484   return joy4way_labels(type);
18485 }
18486 
18487 const struct ControlInfo vsskykid_ctrl =
18488 {
18489   false, /* 45_degree_rotation for joystick(s) */
18490   true, /* alternating_controls */
18491   true, /* mirrored_controls */
18492   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18493   &vsskykid_get_ctrl_name
18494 };
18495 
vsskykid_get_ctrl_name(int type)18496 const char *vsskykid_get_ctrl_name(int type)
18497 {
18498   switch(type)
18499   {
18500     case IPT_BUTTON1: return BTN1 "B";
18501     case IPT_BUTTON2: return BTN2 "A";
18502   } /* end of switch */
18503 
18504   return joy4way_labels(type);
18505 }
18506 
18507 const struct ControlInfo supxevs_ctrl =
18508 {
18509   false, /* 45_degree_rotation for joystick(s) */
18510   true, /* alternating_controls */
18511   true, /* mirrored_controls */
18512   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18513   &supxevs_get_ctrl_name
18514 };
18515 
supxevs_get_ctrl_name(int type)18516 const char *supxevs_get_ctrl_name(int type)
18517 {
18518   switch(type)
18519   {
18520     case IPT_BUTTON1: return BTN1 "B";
18521     case IPT_BUTTON2: return BTN2 "A";
18522   } /* end of switch */
18523 
18524   return joy4way_labels(type);
18525 }
18526 
18527 const struct ControlInfo tkoboxng_ctrl =
18528 {
18529   false, /* 45_degree_rotation for joystick(s) */
18530   true, /* alternating_controls */
18531   true, /* mirrored_controls */
18532   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18533   &tkoboxng_get_ctrl_name
18534 };
18535 
tkoboxng_get_ctrl_name(int type)18536 const char *tkoboxng_get_ctrl_name(int type)
18537 {
18538   switch(type)
18539   {
18540     case IPT_BUTTON1: return BTN1 "B";
18541     case IPT_BUTTON2: return BTN2 "A";
18542   } /* end of switch */
18543 
18544   return joy4way_labels(type);
18545 }
18546 
18547 const struct ControlInfo vstennis_ctrl =
18548 {
18549   false, /* 45_degree_rotation for joystick(s) */
18550   false, /* alternating_controls */
18551   true, /* mirrored_controls */
18552   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B button, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18553   &vstennis_get_ctrl_name
18554 };
18555 
vstennis_get_ctrl_name(int type)18556 const char *vstennis_get_ctrl_name(int type)
18557 {
18558   switch(type)
18559   {
18560     case IPT_BUTTON1: return BTN1 "B";
18561     case IPT_BUTTON2: return BTN2 "A";
18562   } /* end of switch */
18563 
18564   return joy4way_labels(type);
18565 }
18566 
18567 const struct ControlInfo vstetris_ctrl =
18568 {
18569   false, /* 45_degree_rotation for joystick(s) */
18570   true, /* alternating_controls */
18571   true, /* mirrored_controls */
18572   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18573   &vstetris_get_ctrl_name
18574 };
18575 
vstetris_get_ctrl_name(int type)18576 const char *vstetris_get_ctrl_name(int type)
18577 {
18578   switch(type)
18579   {
18580     case IPT_BUTTON1: return BTN1 "B";
18581     case IPT_BUTTON2: return BTN2 "A";
18582   } /* end of switch */
18583 
18584   return joy4way_labels(type);
18585 }
18586 
18587 const struct ControlInfo goonies_ctrl =
18588 {
18589   false, /* 45_degree_rotation for joystick(s) */
18590   true, /* alternating_controls */
18591   true, /* mirrored_controls */
18592   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18593   &goonies_get_ctrl_name
18594 };
18595 
goonies_get_ctrl_name(int type)18596 const char *goonies_get_ctrl_name(int type)
18597 {
18598   switch(type)
18599   {
18600     case IPT_BUTTON1: return BTN1 "B";
18601     case IPT_BUTTON2: return BTN2 "A";
18602   } /* end of switch */
18603 
18604   return joy4way_labels(type);
18605 }
18606 
18607 const struct ControlInfo topgun_ctrl =
18608 {
18609   false, /* 45_degree_rotation for joystick(s) */
18610   true, /* alternating_controls */
18611   true, /* mirrored_controls */
18612   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. Although the cabinets had buttons for 3 and 4 player start, most of the games were only two player.", /* control_details */
18613   &topgun_get_ctrl_name
18614 };
18615 
topgun_get_ctrl_name(int type)18616 const char *topgun_get_ctrl_name(int type)
18617 {
18618   switch(type)
18619   {
18620     case IPT_BUTTON1: return BTN1 "B";
18621     case IPT_BUTTON2: return BTN2 "A";
18622   } /* end of switch */
18623 
18624   return joy4way_labels(type);
18625 }
18626 
18627 const struct ControlInfo wrecking_ctrl =
18628 {
18629   false, /* 45_degree_rotation for joystick(s) */
18630   true, /* alternating_controls */
18631   true, /* mirrored_controls */
18632   "The Nintendo Vs. System was released along side the original NES game console. The games it plays are virtually identical. This is the earliest known mvs cabinet. Almost all Vs cabinets had a layout exactly like the NES at home, with a joystick, A and B buttons, or a zapper. This cabinet is really two cabinets joined together. Two pairs of people can play two different games at the same time.", /* control_details */
18633   &wrecking_get_ctrl_name
18634 };
18635 
wrecking_get_ctrl_name(int type)18636 const char *wrecking_get_ctrl_name(int type)
18637 {
18638   switch(type)
18639   {
18640     case IPT_BUTTON1: return BTN1 "B";
18641     case IPT_BUTTON2: return BTN2 "A";
18642   } /* end of switch */
18643 
18644   return joy4way_labels(type);
18645 }
18646 
18647 const struct ControlInfo wacko_ctrl =
18648 {
18649   false, /* 45_degree_rotation for joystick(s) */
18650   true, /* alternating_controls */
18651   true, /* mirrored_controls */
18652   "The trackball moves the player. There are two 4-way joysticks, one one each side of the trackball, but they are both wired to the same input. Mame maps both sticks to the left stick of a dual stick combo to avoid the conflicting default keyboard mapping of the normal joystick and the trackball /* control_details */ mame's right stick input type is not used. (Note for HowardC:  Accepted for now, but I'll try to get the mame devs to accept a fixed one. Remapping to avoid conflict is silly as almost everyone maps the 'left joystick' to match their regular joystick. Now if it was mapped to joystick right then I could have seen it.)  Keep an eye on this game for driver changes.", /* control_details */
18653   &wacko_get_ctrl_name
18654 };
18655 
wacko_get_ctrl_name(int type)18656 const char *wacko_get_ctrl_name(int type)
18657 {
18658   switch(type)
18659   {
18660     case IPT_JOYSTICKRIGHT_RIGHT: return "-";
18661     case IPT_JOYSTICKRIGHT_LEFT: return "-";
18662     case IPT_JOYSTICKRIGHT_DOWN: return "-";
18663     case IPT_JOYSTICKRIGHT_UP: return "-";
18664     case IPT_JOYSTICKLEFT_RIGHT: return "Zap Right";
18665     case IPT_JOYSTICKLEFT_LEFT: return "Zap Left";
18666     case IPT_JOYSTICKLEFT_DOWN: return "Zap Down";
18667     case IPT_JOYSTICKLEFT_UP: return "Zap Up";
18668     case IPT_TRACKBALL_X: return "Krooz Left";
18669     case IPT_TRACKBALL_Y: return "Krooz Up";
18670     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Krooz Right";
18671     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Krooz Down";
18672   } /* end of switch */
18673 
18674   return "";
18675 }
18676 
18677 const struct ControlInfo wargods_ctrl =
18678 {
18679   false, /* 45_degree_rotation for joystick(s) */
18680   false, /* alternating_controls */
18681   true, /* mirrored_controls */
18682   "The game uses the same williams/midway classic 'X' layout, so remapping will be required. The only difference is the run button hs ben replaced with a lighted 3d button, which allows you to move on the z-axis. It should be noted that not all revisions use the lighted button and many use a standard pushbutton with the mk3 layout.", /* control_details */
18683   &wargods_get_ctrl_name
18684 };
18685 
wargods_get_ctrl_name(int type)18686 const char *wargods_get_ctrl_name(int type)
18687 {
18688   switch(type)
18689   {
18690     case IPT_BUTTON1: return BTN1 "High Punch";
18691     case IPT_BUTTON2: return BTN2 "Block";
18692     case IPT_BUTTON3: return BTN3 "High Kick";
18693     case IPT_BUTTON4: return BTN4 "Low Punch";
18694     case IPT_BUTTON5: return BTN5 "Low Kick";
18695     case IPT_BUTTON6: return BTN6 "3D";
18696   } /* end of switch */
18697 
18698   return joy4way_labels(type);
18699 }
18700 
18701 const struct ControlInfo warofbug_ctrl =
18702 {
18703   false, /* 45_degree_rotation for joystick(s) */
18704   false, /* alternating_controls */
18705   true,  /* mirrored_controls */
18706   "", /* control_details */
18707   &warofbug_get_ctrl_name
18708 };
18709 
warofbug_get_ctrl_name(int type)18710 const char *warofbug_get_ctrl_name(int type)
18711 {
18712   switch(type)
18713   {
18714     case IPT_BUTTON1: return BTN1 "Fire";
18715   } /* end of switch */
18716 
18717   return joy4way_labels(type); /* generic "Left" and "Right" labels */
18718 }
18719 
18720 
18721 const struct ControlInfo wotw_ctrl =
18722 {
18723   false, /* 45_degree_rotation for joystick(s) */
18724   true, /* alternating_controls */
18725   true, /* mirrored_controls */
18726   "", /* control_details */
18727   &wotw_get_ctrl_name
18728 };
18729 
wotw_get_ctrl_name(int type)18730 const char *wotw_get_ctrl_name(int type)
18731 {
18732   switch(type)
18733   {
18734     case IPT_BUTTON1: return BTN1 "Fire";
18735     case IPT_BUTTON2: return BTN2 "Shield";
18736   } /* end of switch */
18737 
18738   return joy2way_labels(type);
18739 }
18740 
18741 const struct ControlInfo warlords_ctrl =
18742 {
18743   false, /* 45_degree_rotation for joystick(s) */
18744   false, /* alternating_controls */
18745   true, /* mirrored_controls */
18746   "The player buttons simply start the game. They do not do anything else and the mame start buttons are deactivated in this game.", /* control_details */
18747   &warlords_get_ctrl_name
18748 };
18749 
warlords_get_ctrl_name(int type)18750 const char *warlords_get_ctrl_name(int type)
18751 {
18752   switch(type)
18753   {
18754     case IPT_BUTTON1: return BTN1 "Start";
18755     case IPT_PADDLE: return "Left";
18756     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
18757   } /* end of switch */
18758 
18759   return "";
18760 }
18761 
18762 const struct ControlInfo warpwarp_ctrl =
18763 {
18764   false, /* 45_degree_rotation for joystick(s) */
18765   true, /* alternating_controls */
18766   true, /* mirrored_controls */
18767   "This game is also known as Warp Warp.", /* control_details */
18768   &warpwarp_get_ctrl_name
18769 };
18770 
warpwarp_get_ctrl_name(int type)18771 const char *warpwarp_get_ctrl_name(int type)
18772 {
18773   switch(type)
18774   {
18775     case IPT_BUTTON1: return BTN1 "Fire";
18776   } /* end of switch */
18777 
18778   return joy4way_labels(type);
18779 }
18780 
18781 const struct ControlInfo warrior_ctrl =
18782 {
18783   false, /* 45_degree_rotation for joystick(s) */
18784   false, /* alternating_controls */
18785   true, /* mirrored_controls */
18786   "Warrior had two top fire style joysticks, one per player. Moving the joystick would move your knight. Moving the joystick while pressing the button swings the knights sword. You cannot move and fight simultaneously. Movement directions are relative to the screen, not the direction the night is fighting. ie: Left is always toward the left of the screen. The knights are almost always facing each other.", /* control_details */
18787   &warrior_get_ctrl_name
18788 };
18789 
warrior_get_ctrl_name(int type)18790 const char *warrior_get_ctrl_name(int type)
18791 {
18792   switch(type)
18793   {
18794     case IPT_BUTTON1: return BTN1 "Sword";
18795   } /* end of switch */
18796 
18797   return joy4way_labels(type);
18798 }
18799 
18800 const struct ControlInfo suzume_ctrl =
18801 {
18802   false, /* 45_degree_rotation for joystick(s) */
18803   true, /* alternating_controls */
18804   true, /* mirrored_controls */
18805   "Mahjong games are NOT compatable with ctrlr files. As a matter of fact they pretty much all have the same layout and all have the same controls. The controls are hardcoded, so remapping isn't reccomended, especially considering the fact that a full keyboard of buttons are required to play.", /* control_details */
18806   &suzume_get_ctrl_name
18807 };
18808 
suzume_get_ctrl_name(int type)18809 const char *suzume_get_ctrl_name(int type)
18810 {
18811   switch(type)
18812   {
18813   } /* end of switch */
18814 
18815   return "";
18816 }
18817 
18818 const struct ControlInfo wecleman_ctrl =
18819 {
18820   false, /* 45_degree_rotation for joystick(s) */
18821   false, /* alternating_controls */
18822   false, /* mirrored_controls */
18823   "", /* control_details */
18824   &wecleman_get_ctrl_name
18825 };
18826 
wecleman_get_ctrl_name(int type)18827 const char *wecleman_get_ctrl_name(int type)
18828 {
18829   switch(type)
18830   {
18831     case IPT_BUTTON1: return BTN1 "Accelerate";
18832     case IPT_BUTTON2: return BTN2 "Brake";
18833     case IPT_BUTTON3: return BTN3 "Low Gear";
18834     case IPT_BUTTON4: return BTN4 "High Gear";
18835     case IPT_PADDLE: return "Left";
18836     case (IPT_PADDLE + IPT_EXTENSION): return "Right";
18837   } /* end of switch */
18838 
18839   return "";
18840 }
18841 
18842 const struct ControlInfo wfortune_ctrl =
18843 {
18844   false, /* 45_degree_rotation for joystick(s) */
18845   false, /* alternating_controls */
18846   false, /* mirrored_controls */
18847   "This game is just like the tv show. Everyone spins the same wheel which is mapped to player one's controls. The wheel is a glorified, oversized, spinner with a wof 'wheel' sticker on top of it. When not spinning, the wheel moves the cursor while the select button selects the action highlighted. It should be noted that the wheel won't spin left while in 'spin the wheel' mode.", /* control_details */
18848   &wfortune_get_ctrl_name
18849 };
18850 
wfortune_get_ctrl_name(int type)18851 const char *wfortune_get_ctrl_name(int type)
18852 {
18853   switch(type)
18854   {
18855     case (IPT_BUTTON1 | IPF_PLAYER3): return "Select";
18856     case (IPT_BUTTON1 | IPF_PLAYER2): return "Select";
18857     case IPT_BUTTON1: return BTN1 "Select";
18858     case IPT_DIAL: return "Spin Left";
18859     case (IPT_DIAL + IPT_EXTENSION): return "Spin Right";
18860   } /* end of switch */
18861 
18862   return "";
18863 }
18864 
18865 const struct ControlInfo whodunit_ctrl =
18866 {
18867   false, /* 45_degree_rotation for joystick(s) */
18868   true, /* alternating_controls */
18869   true, /* mirrored_controls */
18870   "This game actually used a mounted lightgun (or light shotgun I should say) but the 'other' flag that we generally tag onto special controls isn't needed as the game plays just fine with an unmounted lightgun and there have been arcade conversions utilizing unmounted guns.", /* control_details */
18871   &whodunit_get_ctrl_name
18872 };
18873 
whodunit_get_ctrl_name(int type)18874 const char *whodunit_get_ctrl_name(int type)
18875 {
18876   switch(type)
18877   {
18878     case IPT_BUTTON1: return BTN1 "Fire";
18879     case IPT_LIGHTGUN_X: return "Left";
18880     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
18881     case IPT_LIGHTGUN_Y: return "Up";
18882     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
18883   } /* end of switch */
18884 
18885   return "";
18886 }
18887 
18888 const struct ControlInfo wildfang_ctrl =
18889 {
18890   false, /* 45_degree_rotation for joystick(s) */
18891   false, /* alternating_controls */
18892   true, /* mirrored_controls */
18893   "Special transforms your warrior into a small guy riding a tiger", /* control_details */
18894   &wildfang_get_ctrl_name
18895 };
18896 
wildfang_get_ctrl_name(int type)18897 const char *wildfang_get_ctrl_name(int type)
18898 {
18899   switch(type)
18900   {
18901     case IPT_BUTTON1: return BTN1 "Attack";
18902     case IPT_BUTTON2: return BTN2 "Jump";
18903     case IPT_BUTTON3: return BTN3 "Special";
18904   } /* end of switch */
18905 
18906   return joy4way_labels(type);
18907 }
18908 
18909 const struct ControlInfo moo_ctrl =
18910 {
18911   false, /* 45_degree_rotation for joystick(s) */
18912   false, /* alternating_controls */
18913   true, /* mirrored_controls */
18914   "Combinations of Jump, Shoot and a Direction perform various special moves. They are listed on screen as you run across them.", /* control_details */
18915   &moo_get_ctrl_name
18916 };
18917 
moo_get_ctrl_name(int type)18918 const char *moo_get_ctrl_name(int type)
18919 {
18920   switch(type)
18921   {
18922     case IPT_BUTTON1: return BTN1 "Shoot";
18923     case IPT_BUTTON2: return BTN2 "Jump";
18924   } /* end of switch */
18925 
18926   return joy4way_labels(type);
18927 }
18928 
18929 const struct ControlInfo willow_ctrl =
18930 {
18931   false, /* 45_degree_rotation for joystick(s) */
18932   true, /* alternating_controls */
18933   true, /* mirrored_controls */
18934   "Holding attack button will increase the power of the attack", /* control_details */
18935   &willow_get_ctrl_name
18936 };
18937 
willow_get_ctrl_name(int type)18938 const char *willow_get_ctrl_name(int type)
18939 {
18940   switch(type)
18941   {
18942     case IPT_BUTTON1: return BTN1 "Attack";
18943     case IPT_BUTTON2: return BTN2 "Jump";
18944   } /* end of switch */
18945 
18946   return joy4way_labels(type);
18947 }
18948 
18949 const struct ControlInfo wizdfire_ctrl =
18950 {
18951   false, /* 45_degree_rotation for joystick(s) */
18952   false, /* alternating_controls */
18953   true, /* mirrored_controls */
18954   "", /* control_details */
18955   &wizdfire_get_ctrl_name
18956 };
18957 
wizdfire_get_ctrl_name(int type)18958 const char *wizdfire_get_ctrl_name(int type)
18959 {
18960   switch(type)
18961   {
18962     case IPT_BUTTON1: return BTN1 "Attack";
18963     case IPT_BUTTON2: return BTN2 "Magic";
18964   } /* end of switch */
18965 
18966   return joy4way_labels(type);
18967 }
18968 
18969 const struct ControlInfo wow_ctrl =
18970 {
18971   false, /* 45_degree_rotation for joystick(s) */
18972   false, /* alternating_controls */
18973   true, /* mirrored_controls */
18974   "The original game had a fire button on the left and a ball top joystick on the left.", /* control_details */
18975   &wow_get_ctrl_name
18976 };
18977 
wow_get_ctrl_name(int type)18978 const char *wow_get_ctrl_name(int type)
18979 {
18980   switch(type)
18981   {
18982     case IPT_BUTTON1: return BTN1 "Fire";
18983   } /* end of switch */
18984 
18985   return joy4way_labels(type);
18986 }
18987 
18988 const struct ControlInfo wolfpack_ctrl =
18989 {
18990   false, /* 45_degree_rotation for joystick(s) */
18991   false, /* alternating_controls */
18992   false, /* mirrored_controls */
18993   "", /* control_details */
18994   &wolfpack_get_ctrl_name
18995 };
18996 
wolfpack_get_ctrl_name(int type)18997 const char *wolfpack_get_ctrl_name(int type)
18998 {
18999   switch(type)
19000   {
19001     case IPT_BUTTON1: return BTN1 "Fire";
19002     case IPT_DIAL: return "Left";
19003     case (IPT_DIAL + IPT_EXTENSION): return "Right";
19004   } /* end of switch */
19005 
19006   return "";
19007 }
19008 
19009 const struct ControlInfo wboy_ctrl =
19010 {
19011   false, /* 45_degree_rotation for joystick(s) */
19012   true, /* alternating_controls */
19013   true, /* mirrored_controls */
19014   "", /* control_details */
19015   &wboy_get_ctrl_name
19016 };
19017 
wboy_get_ctrl_name(int type)19018 const char *wboy_get_ctrl_name(int type)
19019 {
19020   switch(type)
19021   {
19022     case IPT_BUTTON1: return BTN1 "Speed / Attack";
19023     case IPT_BUTTON2: return BTN2 "Jump";
19024   } /* end of switch */
19025 
19026   return joy2way_labels(type);
19027 }
19028 
19029 const struct ControlInfo wbml_ctrl =
19030 {
19031   false, /* 45_degree_rotation for joystick(s) */
19032   true, /* alternating_controls */
19033   true, /* mirrored_controls */
19034   "", /* control_details */
19035   &wbml_get_ctrl_name
19036 };
19037 
wbml_get_ctrl_name(int type)19038 const char *wbml_get_ctrl_name(int type)
19039 {
19040   switch(type)
19041   {
19042     case IPT_BUTTON1: return BTN1 "Sword";
19043     case IPT_BUTTON2: return BTN2 "Jump";
19044   } /* end of switch */
19045 
19046   return joy4way_labels(type);
19047 }
19048 
19049 const struct ControlInfo wbeachvl_ctrl =
19050 {
19051   false, /* 45_degree_rotation for joystick(s) */
19052   false, /* alternating_controls */
19053   true, /* mirrored_controls */
19054   "3rd button is mapped but not known what it does", /* control_details */
19055   &wbeachvl_get_ctrl_name
19056 };
19057 
wbeachvl_get_ctrl_name(int type)19058 const char *wbeachvl_get_ctrl_name(int type)
19059 {
19060   switch(type)
19061   {
19062     case IPT_BUTTON1: return BTN1 "Hit";
19063     case IPT_BUTTON2: return BTN2 "Jump";
19064     case IPT_BUTTON3: return BTN3 "Unknown";
19065     case IPT_JOYSTICK_UP: return "Up-Left";
19066     case IPT_JOYSTICK_DOWN: return "Down-Right";
19067     case IPT_JOYSTICK_LEFT: return "Left-Down";
19068     case IPT_JOYSTICK_RIGHT: return "Right-Up";
19069   } /* end of switch */
19070 
19071   return "";
19072 }
19073 
19074 const struct ControlInfo wcbowl_ctrl =
19075 {
19076   false, /* 45_degree_rotation for joystick(s) */
19077   true, /* alternating_controls */
19078   true, /* mirrored_controls */
19079   "When looking in the tab menu it would seem the game is only 2 player, however it is a 4 player game with each player entering the game by pressing the Player1 start button (on the control panel it is just a Start button). Player 2 start button is mapped but doesn?t do anything", /* control_details */
19080   &wcbowl_get_ctrl_name
19081 };
19082 
wcbowl_get_ctrl_name(int type)19083 const char *wcbowl_get_ctrl_name(int type)
19084 {
19085   switch(type)
19086   {
19087     case IPT_BUTTON1: return BTN1 "Hook Left";
19088     case IPT_BUTTON2: return BTN2 "Hook Right";
19089     case IPT_TRACKBALL_X: return "Left";
19090     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
19091     case IPT_TRACKBALL_Y: return "Up";
19092     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
19093   } /* end of switch */
19094 
19095   return "";
19096 }
19097 
19098 const struct ControlInfo wcbowldx_ctrl =
19099 {
19100   false, /* 45_degree_rotation for joystick(s) */
19101   true, /* alternating_controls */
19102   true, /* mirrored_controls */
19103   "", /* control_details */
19104   &wcbowldx_get_ctrl_name
19105 };
19106 
wcbowldx_get_ctrl_name(int type)19107 const char *wcbowldx_get_ctrl_name(int type)
19108 {
19109   switch(type)
19110   {
19111     case IPT_BUTTON1: return BTN1 "Hook Left";
19112     case IPT_BUTTON2: return BTN2 "Hook Right";
19113     case IPT_TRACKBALL_X: return "Left";
19114     case (IPT_TRACKBALL_X + IPT_EXTENSION): return "Right";
19115     case IPT_TRACKBALL_Y: return "Up";
19116     case (IPT_TRACKBALL_Y + IPT_EXTENSION): return "Down";
19117   } /* end of switch */
19118 
19119   return "";
19120 }
19121 
19122 const struct ControlInfo wseries_ctrl =
19123 {
19124   false, /* 45_degree_rotation for joystick(s) */
19125   false, /* alternating_controls */
19126   false, /* mirrored_controls */
19127   "This is a simultaneous 2 player alternating game /* control_details */ a player is on the left side when pitching, on the right side when batting. The aim button is shown with two physical buttons wired to one pin in the schematics. All buttons are on one input port in the machine; mame puts them all as player 1 inputs, but on the 2 player game, the aim button(s) is more like a player 2 button. (On a one player game, all inputs are like player 1 inputs.)", /* control_details */
19128   &wseries_get_ctrl_name
19129 };
19130 
wseries_get_ctrl_name(int type)19131 const char *wseries_get_ctrl_name(int type)
19132 {
19133   switch(type)
19134   {
19135     case (IPT_AD_STICK_X | IPF_PLAYER2): return "Left";
19136     case ((IPT_AD_STICK_X + IPT_EXTENSION) | IPF_PLAYER2): return "Right";
19137     case (IPT_AD_STICK_Y | IPF_PLAYER2): return "Pitch";
19138     case ((IPT_AD_STICK_Y + IPT_EXTENSION) | IPF_PLAYER2): return "Windup";
19139     case IPT_BUTTON1: return BTN1 "Go Back";
19140     case IPT_BUTTON2: return BTN2 "Xtra Base";
19141     case IPT_BUTTON3: return BTN3 "Aim";
19142     case IPT_AD_STICK_X: return "Swing";
19143     case (IPT_AD_STICK_X + IPT_EXTENSION): return "Swing";
19144     case IPT_AD_STICK_Y: return "Up";
19145     case (IPT_AD_STICK_Y + IPT_EXTENSION): return "Down";
19146   } /* end of switch */
19147 
19148   return "";
19149 }
19150 
19151 const struct ControlInfo wsf_ctrl =
19152 {
19153   false, /* 45_degree_rotation for joystick(s) */
19154   false, /* alternating_controls */
19155   true, /* mirrored_controls */
19156   "A and B both do varouis things, depending upon the situation.", /* control_details */
19157   &wsf_get_ctrl_name
19158 };
19159 
wsf_get_ctrl_name(int type)19160 const char *wsf_get_ctrl_name(int type)
19161 {
19162   switch(type)
19163   {
19164     case IPT_BUTTON1: return BTN1 "A";
19165     case IPT_BUTTON2: return BTN2 "B";
19166   } /* end of switch */
19167 
19168   return joy4way_labels(type);
19169 }
19170 
19171 const struct ControlInfo wtennis_ctrl =
19172 {
19173   false, /* 45_degree_rotation for joystick(s) */
19174   true, /* alternating_controls */
19175   true, /* mirrored_controls */
19176   "The label for the button is unknown. I took an educated guess and take full responsibility for it's accuracy.", /* control_details */
19177   &wtennis_get_ctrl_name
19178 };
19179 
wtennis_get_ctrl_name(int type)19180 const char *wtennis_get_ctrl_name(int type)
19181 {
19182   switch(type)
19183   {
19184     case IPT_BUTTON1: return BTN1 "Swing";
19185   } /* end of switch */
19186 
19187   return joy4way_labels(type);
19188 }
19189 
19190 const struct ControlInfo wwfsstar_ctrl =
19191 {
19192   false, /* 45_degree_rotation for joystick(s) */
19193   false, /* alternating_controls */
19194   true, /* mirrored_controls */
19195   "Press button A to punch, button B to kick. As with all WWF games, the two buttons do a number of things by pressing different combinations at different times including pin, ect. If anyone wishes to make a list please do so here.", /* control_details */
19196   &wwfsstar_get_ctrl_name
19197 };
19198 
wwfsstar_get_ctrl_name(int type)19199 const char *wwfsstar_get_ctrl_name(int type)
19200 {
19201   switch(type)
19202   {
19203     case IPT_BUTTON1: return BTN1 "A";
19204     case IPT_BUTTON2: return BTN2 "B";
19205   } /* end of switch */
19206 
19207   return joy4way_labels(type);
19208 }
19209 
19210 const struct ControlInfo wwfwfest_ctrl =
19211 {
19212   false, /* 45_degree_rotation for joystick(s) */
19213   false, /* alternating_controls */
19214   true, /* mirrored_controls */
19215   "The A and B buttons do various things depending upon the wrestler and the situation. Generally when you can do something special you recieve a message on the screen on how to do so.", /* control_details */
19216   &wwfwfest_get_ctrl_name
19217 };
19218 
wwfwfest_get_ctrl_name(int type)19219 const char *wwfwfest_get_ctrl_name(int type)
19220 {
19221   switch(type)
19222   {
19223     case IPT_BUTTON1: return BTN1 "A";
19224     case IPT_BUTTON2: return BTN2 "B";
19225   } /* end of switch */
19226 
19227   return joy4way_labels(type);
19228 }
19229 
19230 const struct ControlInfo wwfmania_ctrl =
19231 {
19232   false, /* 45_degree_rotation for joystick(s) */
19233   false, /* alternating_controls */
19234   true, /* mirrored_controls */
19235   "This game has the same mame-related layout problems as the mk games. The X pattern applies. Press punch and kick at the same time to run. Note that the punch buttons are on the top row and the kick buttons are on the bottom, unlike the mk games and similar to sf games.", /* control_details */
19236   &wwfmania_get_ctrl_name
19237 };
19238 
wwfmania_get_ctrl_name(int type)19239 const char *wwfmania_get_ctrl_name(int type)
19240 {
19241   switch(type)
19242   {
19243     case IPT_BUTTON1: return BTN1 "Punch";
19244     case IPT_BUTTON2: return BTN2 "Defense";
19245     case IPT_BUTTON3: return BTN3 "Power Punch";
19246     case IPT_BUTTON4: return BTN4 "Kick";
19247     case IPT_BUTTON5: return BTN5 "Power Kick";
19248     case IPT_JOYSTICK_RIGHT: return "Move Right";
19249     case IPT_JOYSTICK_LEFT: return "Move Left";
19250     case IPT_JOYSTICK_DOWN: return "Move Down";
19251     case IPT_JOYSTICK_UP: return "Move Up";
19252   } /* end of switch */
19253 
19254   return "";
19255 }
19256 
19257 const struct ControlInfo xmen_ctrl =
19258 {
19259   false, /* 45_degree_rotation for joystick(s) */
19260   false, /* alternating_controls */
19261   true, /* mirrored_controls */
19262   "", /* control_details */
19263   &xmen_get_ctrl_name
19264 };
19265 
xmen_get_ctrl_name(int type)19266 const char *xmen_get_ctrl_name(int type)
19267 {
19268   switch(type)
19269   {
19270     case IPT_BUTTON1: return BTN1 "Attack";
19271     case IPT_BUTTON2: return BTN2 "Jump";
19272     case IPT_BUTTON3: return BTN3 "Mutant Power";
19273   } /* end of switch */
19274 
19275   return joy4way_labels(type);
19276 }
19277 
19278 const struct ControlInfo xmvsf_ctrl =
19279 {
19280   false, /* 45_degree_rotation for joystick(s) */
19281   false, /* alternating_controls */
19282   true, /* mirrored_controls */
19283   "", /* control_details */
19284   &xmvsf_get_ctrl_name
19285 };
19286 
xmvsf_get_ctrl_name(int type)19287 const char *xmvsf_get_ctrl_name(int type)
19288 {
19289   switch(type)
19290   {
19291     case IPT_BUTTON1: return BTN1 "Punch - Light";
19292     case IPT_BUTTON2: return BTN2 "Punch - Medium";
19293     case IPT_BUTTON3: return BTN3 "Punch - Heavy";
19294     case IPT_BUTTON4: return BTN4 "Kick - Light";
19295     case IPT_BUTTON5: return BTN5 "Kick - Medium";
19296     case IPT_BUTTON6: return BTN6 "Kick - Heavy";
19297   } /* end of switch */
19298 
19299   return joy4way_labels(type);
19300 }
19301 
19302 const struct ControlInfo xmcota_ctrl =
19303 {
19304   false, /* 45_degree_rotation for joystick(s) */
19305   false, /* alternating_controls */
19306   true, /* mirrored_controls */
19307   "", /* control_details */
19308   &xmcota_get_ctrl_name
19309 };
19310 
xmcota_get_ctrl_name(int type)19311 const char *xmcota_get_ctrl_name(int type)
19312 {
19313   switch(type)
19314   {
19315     case IPT_BUTTON1: return BTN1 "Punch - Jab ";
19316     case IPT_BUTTON2: return BTN2 "Punch - Strong";
19317     case IPT_BUTTON3: return BTN3 "Punch - Fierce";
19318     case IPT_BUTTON4: return BTN4 "Kick - Short";
19319     case IPT_BUTTON5: return BTN5 "Kick - Forward";
19320     case IPT_BUTTON6: return BTN6 "Kick - Roundhouse";
19321   } /* end of switch */
19322 
19323   return joy4way_labels(type);
19324 }
19325 
19326 const struct ControlInfo xsleena_ctrl =
19327 {
19328   false, /* 45_degree_rotation for joystick(s) */
19329   true, /* alternating_controls */
19330   true, /* mirrored_controls */
19331   "Pressing the jump button while already in the air will do a second jump boost. Much of the data on this game is purely speculative as it is a copy of Solar Warrior. It is assumed that they use the same labels.", /* control_details */
19332   &xsleena_get_ctrl_name
19333 };
19334 
xsleena_get_ctrl_name(int type)19335 const char *xsleena_get_ctrl_name(int type)
19336 {
19337   switch(type)
19338   {
19339     case IPT_BUTTON1: return BTN1 "Fire";
19340     case IPT_BUTTON2: return BTN2 "Jump";
19341   } /* end of switch */
19342 
19343   return joy4way_labels(type);
19344 }
19345 
19346 const struct ControlInfo xenophob_ctrl =
19347 {
19348   false, /* 45_degree_rotation for joystick(s) */
19349   false, /* alternating_controls */
19350   true, /* mirrored_controls */
19351   "This trigger stick has two thumb buttons in additon to the normal fire button. The left and right buttons each do over a dozen things, with what they do depending upon the message displayed on the screen at the time. They are appropriately labeled 'left button' and 'right button' on the screen.", /* control_details */
19352   &xenophob_get_ctrl_name
19353 };
19354 
xenophob_get_ctrl_name(int type)19355 const char *xenophob_get_ctrl_name(int type)
19356 {
19357   switch(type)
19358   {
19359     case IPT_BUTTON1: return BTN1 "Fire / Punch";
19360     case IPT_BUTTON2: return BTN2 "Left Button";
19361     case IPT_BUTTON3: return BTN3 "Right Button";
19362   } /* end of switch */
19363 
19364   return joy4way_labels(type);
19365 }
19366 
19367 const struct ControlInfo xevious_ctrl =
19368 {
19369   false, /* 45_degree_rotation for joystick(s) */
19370   true, /* alternating_controls */
19371   true, /* mirrored_controls */
19372   "", /* control_details */
19373   &xevious_get_ctrl_name
19374 };
19375 
xevious_get_ctrl_name(int type)19376 const char *xevious_get_ctrl_name(int type)
19377 {
19378   switch(type)
19379   {
19380     case IPT_BUTTON1:         return BTN1 "Zapper";
19381     case IPT_BUTTON2:         return BTN2 "Blaster";
19382   } /* end of switch */
19383 
19384   return joy4way_labels(type);
19385 }
19386 
19387 const struct ControlInfo xybots_ctrl =
19388 {
19389   false, /* 45_degree_rotation for joystick(s) */
19390   false, /* alternating_controls */
19391   true, /* mirrored_controls */
19392   "This game used a twist stick, not to be confused with a rotary mechanical stick. Basically you can twist the stick left and right for two additional inputs.", /* control_details */
19393   &xybots_get_ctrl_name
19394 };
19395 
xybots_get_ctrl_name(int type)19396 const char *xybots_get_ctrl_name(int type)
19397 {
19398   switch(type)
19399   {
19400     case IPT_BUTTON1: return BTN1 "Fire";
19401     case IPT_BUTTON2: return BTN2 "Turn Left";
19402     case IPT_BUTTON3: return BTN3 "Turn Right";
19403   } /* end of switch */
19404 
19405   return joy4way_labels(type);
19406 }
19407 
19408 const struct ControlInfo yesnoj_ctrl =
19409 {
19410   false, /* 45_degree_rotation for joystick(s) */
19411   false, /* alternating_controls */
19412   true, /* mirrored_controls */
19413   "", /* control_details */
19414   &yesnoj_get_ctrl_name
19415 };
19416 
yesnoj_get_ctrl_name(int type)19417 const char *yesnoj_get_ctrl_name(int type)
19418 {
19419   switch(type)
19420   {
19421     case IPT_BUTTON1: return BTN1 "Yes";
19422     case IPT_BUTTON2: return BTN2 "No";
19423   } /* end of switch */
19424 
19425   return "";
19426 }
19427 
19428 const struct ControlInfo yiear_ctrl =
19429 {
19430   false, /* 45_degree_rotation for joystick(s) */
19431   true, /* alternating_controls */
19432   true, /* mirrored_controls */
19433   "", /* control_details */
19434   &yiear_get_ctrl_name
19435 };
19436 
yiear_get_ctrl_name(int type)19437 const char *yiear_get_ctrl_name(int type)
19438 {
19439   switch(type)
19440   {
19441     case IPT_BUTTON1: return BTN1 "Punch";
19442     case IPT_BUTTON2: return BTN2 "Kick";
19443     case IPT_JOYSTICK_UP: return "Jump";
19444     case IPT_JOYSTICK_DOWN: return "Stoop Down";
19445     case IPT_JOYSTICK_LEFT: return "Left";
19446     case IPT_JOYSTICK_RIGHT: return "Right";
19447   } /* end of switch */
19448 
19449   return "";
19450 }
19451 
19452 const struct ControlInfo yosakdon_ctrl =
19453 {
19454   false, /* 45_degree_rotation for joystick(s) */
19455   true, /* alternating_controls */
19456   true, /* mirrored_controls */
19457   "", /* control_details */
19458   &yosakdon_get_ctrl_name
19459 };
19460 
yosakdon_get_ctrl_name(int type)19461 const char *yosakdon_get_ctrl_name(int type)
19462 {
19463   switch(type)
19464   {
19465     case IPT_BUTTON1: return BTN1 "Fire";
19466   } /* end of switch */
19467 
19468   return joy2way_labels(type);
19469 }
19470 
19471 const struct ControlInfo yuyugogo_ctrl =
19472 {
19473   false, /* 45_degree_rotation for joystick(s) */
19474   false, /* alternating_controls */
19475   true, /* mirrored_controls */
19476   "Game in Japanese. No references available. Buttons relate to the numbers on the screen.", /* control_details */
19477   &yuyugogo_get_ctrl_name
19478 };
19479 
yuyugogo_get_ctrl_name(int type)19480 const char *yuyugogo_get_ctrl_name(int type)
19481 {
19482   switch(type)
19483   {
19484     case IPT_BUTTON1: return BTN1 "1";
19485     case IPT_BUTTON2: return BTN2 "2";
19486     case IPT_BUTTON3: return BTN3 "3";
19487     case IPT_BUTTON4: return BTN4 "4";
19488     case IPT_BUTTON5: return BTN5 "??";
19489   } /* end of switch */
19490 
19491   return "";
19492 }
19493 
19494 const struct ControlInfo zaxxon_ctrl =
19495 {
19496   false, /* 45_degree_rotation for joystick(s) */
19497   true, /* alternating_controls */
19498   true, /* mirrored_controls */
19499   "The fire button is also placed on the control panel. The button on the trigger stick lights up when it's time for you to do some shooting.", /* control_details */
19500   &zaxxon_get_ctrl_name
19501 };
19502 
zaxxon_get_ctrl_name(int type)19503 const char *zaxxon_get_ctrl_name(int type)
19504 {
19505   switch(type)
19506   {
19507     case IPT_BUTTON1: return BTN1 "Fire";
19508   } /* end of switch */
19509 
19510   return joy4way_labels(type);
19511 }
19512 
19513 const struct ControlInfo zerohour_ctrl =
19514 {
19515   false, /* 45_degree_rotation for joystick(s) */
19516   true, /* alternating_controls */
19517   true, /* mirrored_controls */
19518   "", /* control_details */
19519   &zerohour_get_ctrl_name
19520 };
19521 
zerohour_get_ctrl_name(int type)19522 const char *zerohour_get_ctrl_name(int type)
19523 {
19524   switch(type)
19525   {
19526     case IPT_BUTTON1: return BTN1 "Fire";
19527   } /* end of switch */
19528 
19529   return joy4way_labels(type);
19530 }
19531 
19532 const struct ControlInfo zeropnt_ctrl =
19533 {
19534   false, /* 45_degree_rotation for joystick(s) */
19535   false, /* alternating_controls */
19536   true, /* mirrored_controls */
19537   "", /* control_details */
19538   &zeropnt_get_ctrl_name
19539 };
19540 
zeropnt_get_ctrl_name(int type)19541 const char *zeropnt_get_ctrl_name(int type)
19542 {
19543   switch(type)
19544   {
19545     case IPT_BUTTON1: return BTN1 "Fire";
19546     case IPT_LIGHTGUN_Y: return "Up";
19547     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
19548     case IPT_LIGHTGUN_X: return "Left";
19549     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
19550   } /* end of switch */
19551 
19552   return "";
19553 }
19554 
19555 const struct ControlInfo zeropnt2_ctrl =
19556 {
19557   false, /* 45_degree_rotation for joystick(s) */
19558   false, /* alternating_controls */
19559   true, /* mirrored_controls */
19560   "", /* control_details */
19561   &zeropnt2_get_ctrl_name
19562 };
19563 
zeropnt2_get_ctrl_name(int type)19564 const char *zeropnt2_get_ctrl_name(int type)
19565 {
19566   switch(type)
19567   {
19568     case IPT_BUTTON1: return BTN1 "Fire";
19569     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
19570     case IPT_LIGHTGUN_Y: return "Up";
19571     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
19572     case IPT_LIGHTGUN_X: return "Left";
19573   } /* end of switch */
19574 
19575   return "";
19576 }
19577 
19578 const struct ControlInfo zerowing_ctrl =
19579 {
19580   false, /* 45_degree_rotation for joystick(s) */
19581   true, /* alternating_controls */
19582   true, /* mirrored_controls */
19583   "Control wise this game is pretty standard, but the game's claim to fame is the wording of the translated text, or more accurately the poor wording of the translated text. This is commonly referred to as 'Engrish'  Ever wondered where the 'All Your Base Are Belong To Us.' line comes from?  It's this game. So for a good laugh check it out. All your controls are belong to us!!!!", /* control_details */
19584   &zerowing_get_ctrl_name
19585 };
19586 
zerowing_get_ctrl_name(int type)19587 const char *zerowing_get_ctrl_name(int type)
19588 {
19589   switch(type)
19590   {
19591     case IPT_BUTTON1: return BTN1 "Fire";
19592     case IPT_BUTTON2: return BTN2 "Shield";
19593   } /* end of switch */
19594 
19595   return joy4way_labels(type);
19596 }
19597 
19598 const struct ControlInfo zerozone_ctrl =
19599 {
19600   false, /* 45_degree_rotation for joystick(s) */
19601   false, /* alternating_controls */
19602   true, /* mirrored_controls */
19603   "", /* control_details */
19604   &zerozone_get_ctrl_name
19605 };
19606 
zerozone_get_ctrl_name(int type)19607 const char *zerozone_get_ctrl_name(int type)
19608 {
19609   switch(type)
19610   {
19611     case IPT_BUTTON1: return BTN1 "Rotate";
19612   } /* end of switch */
19613 
19614   return joy4way_labels(type);
19615 }
19616 
19617 const struct ControlInfo zingzip_ctrl =
19618 {
19619   false, /* 45_degree_rotation for joystick(s) */
19620   false, /* alternating_controls */
19621   true, /* mirrored_controls */
19622   "", /* control_details */
19623   &zingzip_get_ctrl_name
19624 };
19625 
zingzip_get_ctrl_name(int type)19626 const char *zingzip_get_ctrl_name(int type)
19627 {
19628   switch(type)
19629   {
19630     case IPT_BUTTON1: return BTN1 "Fire";
19631     case IPT_BUTTON2: return BTN2 "Bomb";
19632   } /* end of switch */
19633 
19634   return joy4way_labels(type);
19635 }
19636 
19637 const struct ControlInfo zoar_ctrl =
19638 {
19639   false, /* 45_degree_rotation for joystick(s) */
19640   true, /* alternating_controls */
19641   true, /* mirrored_controls */
19642   "This is probably the only 2d shooter ever to utilize the z axis. Instead of being able to speedup or slowdown with the up and down directions, these directions allow you to make the craft raise or lower to the ground. The top speed key doesn't appear to do anything until you try to move left or right. When you do you will move much more quickly.", /* control_details */
19643   &zoar_get_ctrl_name
19644 };
19645 
zoar_get_ctrl_name(int type)19646 const char *zoar_get_ctrl_name(int type)
19647 {
19648   switch(type)
19649   {
19650     case IPT_BUTTON1: return BTN1 "High Missile";
19651     case IPT_BUTTON2: return BTN2 "Low Missile";
19652     case IPT_BUTTON3: return BTN3 "Top Speed";
19653     case IPT_JOYSTICK_UP: return "Gain Altitude";
19654     case IPT_JOYSTICK_DOWN: return "Lose Altitude";
19655     case IPT_JOYSTICK_LEFT: return "Left";
19656     case IPT_JOYSTICK_RIGHT: return "Right";
19657   } /* end of switch */
19658 
19659   return "";
19660 }
19661 
19662 const struct ControlInfo zodiack_ctrl =
19663 {
19664   false, /* 45_degree_rotation for joystick(s) */
19665   true, /* alternating_controls */
19666   true, /* mirrored_controls */
19667   "", /* control_details */
19668   &zodiack_get_ctrl_name
19669 };
19670 
zodiack_get_ctrl_name(int type)19671 const char *zodiack_get_ctrl_name(int type)
19672 {
19673   switch(type)
19674   {
19675     case IPT_BUTTON1: return BTN1 "Fire";
19676   } /* end of switch */
19677 
19678   return joy4way_labels(type);
19679 }
19680 
19681 const struct ControlInfo zombraid_ctrl =
19682 {
19683   false, /* 45_degree_rotation for joystick(s) */
19684   false, /* alternating_controls */
19685   true, /* mirrored_controls */
19686   "Controls were sawed-off shotguns with pump action reload, this is mapped to button 2", /* control_details */
19687   &zombraid_get_ctrl_name
19688 };
19689 
zombraid_get_ctrl_name(int type)19690 const char *zombraid_get_ctrl_name(int type)
19691 {
19692   switch(type)
19693   {
19694     case IPT_BUTTON1: return BTN1 "Fire";
19695     case IPT_BUTTON2: return BTN2 "Reload";
19696     case IPT_LIGHTGUN_Y: return "Up";
19697     case (IPT_LIGHTGUN_X + IPT_EXTENSION): return "Right";
19698     case IPT_LIGHTGUN_X: return "Left";
19699     case (IPT_LIGHTGUN_Y + IPT_EXTENSION): return "Down";
19700   } /* end of switch */
19701 
19702   return "";
19703 }
19704 
19705 const struct ControlInfo zookeep_ctrl =
19706 {
19707   false, /* 45_degree_rotation for joystick(s) */
19708   true, /* alternating_controls */
19709   true, /* mirrored_controls */
19710   "", /* control_details */
19711   &zookeep_get_ctrl_name
19712 };
19713 
zookeep_get_ctrl_name(int type)19714 const char *zookeep_get_ctrl_name(int type)
19715 {
19716   switch(type)
19717   {
19718     case IPT_BUTTON1: return BTN1 "Jump";
19719   } /* end of switch */
19720 
19721   return joy4way_labels(type);
19722 }
19723 
19724 const struct ControlInfo zunkyou_ctrl =
19725 {
19726   false, /* 45_degree_rotation for joystick(s) */
19727   true, /* alternating_controls */
19728   true, /* mirrored_controls */
19729   "", /* control_details */
19730   &zunkyou_get_ctrl_name
19731 };
19732 
zunkyou_get_ctrl_name(int type)19733 const char *zunkyou_get_ctrl_name(int type)
19734 {
19735   switch(type)
19736   {
19737     case IPT_BUTTON1: return BTN1 "Attack";
19738     case IPT_BUTTON2: return BTN2 "Special Attack";
19739   } /* end of switch */
19740 
19741   return joy4way_labels(type);
19742 }
19743 
19744 const struct ControlInfo zwackery_ctrl =
19745 {
19746   false, /* 45_degree_rotation for joystick(s) */
19747   true, /* alternating_controls */
19748   true, /* mirrored_controls */
19749   "This game has an identical control panel layout as discs of tron. Unfortunately due to the fact that it's a platformer, it is extremely akward to play unless you have those exact controls.", /* control_details */
19750   &zwackery_get_ctrl_name
19751 };
19752 
zwackery_get_ctrl_name(int type)19753 const char *zwackery_get_ctrl_name(int type)
19754 {
19755   switch(type)
19756   {
19757     case IPT_BUTTON1: return BTN1 "Sword";
19758     case IPT_BUTTON2: return BTN2 "Shield";
19759     case IPT_BUTTON3: return BTN3 "Pick Up";
19760     case IPT_BUTTON4: return BTN4 "Cast Spell";
19761     case IPT_JOYSTICK_UP: return "Up";
19762     case IPT_JOYSTICK_DOWN: return "Down";
19763     case IPT_JOYSTICK_LEFT: return "Run Left";
19764     case IPT_JOYSTICK_RIGHT: return "Run Right";
19765     case IPT_DIAL: return "Aim Sword Left";
19766     case (IPT_DIAL + IPT_EXTENSION): return "Aim Sword Right";
19767   } /* end of switch */
19768 
19769   return "";
19770 }
19771 
19772 const struct ControlInfo zzyzzyxx_ctrl =
19773 {
19774   false, /* 45_degree_rotation for joystick(s) */
19775   true, /* alternating_controls */
19776   true, /* mirrored_controls */
19777   "", /* control_details */
19778   &zzyzzyxx_get_ctrl_name
19779 };
19780 
zzyzzyxx_get_ctrl_name(int type)19781 const char *zzyzzyxx_get_ctrl_name(int type)
19782 {
19783   switch(type)
19784   {
19785     case IPT_BUTTON1: return BTN1 "Make Brick";
19786     case IPT_JOYSTICK_UP: return "Up";
19787     case IPT_JOYSTICK_DOWN: return "Down";
19788   } /* end of switch */
19789 
19790   return "";
19791 }
19792