mirror of https://github.com/stella-emu/stella.git
Merge branch 'master' of github-lodefmode:lodefmode/stella
This commit is contained in:
commit
f501d2d00b
|
@ -21,6 +21,12 @@
|
|||
|
||||
* Added web links for many games
|
||||
|
||||
* Added dead zone and linearity settings for analog controllers
|
||||
|
||||
* Fixed MindLink controller
|
||||
|
||||
* Added TIA randomization on startup option
|
||||
|
||||
* Debugger: enhanced prompt's auto complete and history
|
||||
|
||||
* Debugger: added optional logging of breaks and traps
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.2 KiB |
188
docs/index.html
188
docs/index.html
|
@ -272,9 +272,9 @@
|
|||
Atari 2600 FPGA project, including cycle-exact audio, analog interference
|
||||
from mixing of audio channels, as well as stereo sound support; dynamic
|
||||
sound resampling is also included</li>
|
||||
<li>Emulates the Atari 2600 Joystick, Paddle, Driving, CBS BoosterGrip, Sega Genesis, QuadTari controllers using your computer's keyboard,
|
||||
<li>Emulates the Atari 2600 Joystick, Paddle, Driving, CBS Booster Grip, Sega Genesis, QuadTari controllers using your computer's keyboard,
|
||||
joysticks or mouse</li>
|
||||
<li>Emulates CX22/CX80 style Trackballs, Amiga/Atari Mouse, Mindlink controller and the Light Gun using your
|
||||
<li>Emulates CX22/CX80 style Trak-Balls, Amiga/Atari mouse, MindLink controller and the Light Gun using your
|
||||
computer's mouse</li>
|
||||
<li>Emulates the Atari 2600 Keyboard controllers using your computer's keyboard</li>
|
||||
<li>Emulates <a href="https://en.wikipedia.org/wiki/CompuMate">Spectravideo CompuMate</a> system using your computer's keyboard,
|
||||
|
@ -781,7 +781,7 @@
|
|||
</table>
|
||||
|
||||
|
||||
<p><b>Joystick/BoosterGrip Controller (can be remapped)</b></p>
|
||||
<p><b>Joystick/Booster Grip Controller (can be remapped)</b></p>
|
||||
|
||||
<table BORDER=2>
|
||||
<tr>
|
||||
|
@ -880,7 +880,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
|
||||
<p><b>Sega Genesis Controller (cannot be remapped, always associated with joystick and booster-grip controllers)</b></p>
|
||||
<p><b>Sega Genesis Controller (cannot be remapped, always associated with joystick and Booster Grip controllers)</b></p>
|
||||
|
||||
<table BORDER=2>
|
||||
<tr>
|
||||
|
@ -1574,16 +1574,27 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><i>Decrease</i> joystick deadzone</td>
|
||||
<td><i>Decrease</i> analog joystick dead zone for digital controllers</td>
|
||||
<td>Shift-Control + F1</td>
|
||||
<td>Shift-Control + F1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i>Increase</i> joystick deadzone</td>
|
||||
<td><i>Increase</i> analog joystick dead zone for digital controllers</td>
|
||||
<td>Control + F1</td>
|
||||
<td>Control + F1</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><i>Decrease</i> analog joystick dead zone for analog controllers</td>
|
||||
<td>Shift-Control-Alt + F1</td>
|
||||
<td>Shift-Control-Cmd + F1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i>Increase</i> analog joystick dead zone for analog controllers</td>
|
||||
<td>Control-Alt + F1</td>
|
||||
<td>Control-Cmd + F1</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><i>Decrease</i> analog paddle sensitivity</td>
|
||||
<td>Shift-Control + F2</td>
|
||||
|
@ -1595,6 +1606,17 @@
|
|||
<td>Control + F2</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><i>Decrease</i> analog paddle linearity</td>
|
||||
<td>Shift-Control-Alt + F2</td>
|
||||
<td>Shift-Control-Cmd + F2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i>Increase</i> analog paddle linearity</td>
|
||||
<td>Control-Alt + F2</td>
|
||||
<td>Control-Cmd + F2</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><i>Decrease</i> analog paddle dejitter averaging</td>
|
||||
<td>Shift-Control + F3</td>
|
||||
|
@ -1933,8 +1955,9 @@
|
|||
</table>
|
||||
|
||||
<p><b><a name="GlobalKeys">Global Keys</a> (can be remapped)</b></p>
|
||||
<p>These keys allow selecting and changing settings without having to remember the
|
||||
dedicated keys. They keys are grouped by 'Audio & Video', 'Input Device & Ports' and 'Debug' settings.</p>
|
||||
<p>These keys allow selecting and changing settings without having to remember
|
||||
the dedicated hotkeys. The global keys are grouped by 'Audio & Video',
|
||||
'Input Devices & Ports' and 'Debug' settings.</p>
|
||||
<table BORDER=2 cellpadding=4>
|
||||
<tr>
|
||||
<th>Function</th>
|
||||
|
@ -1976,8 +1999,8 @@
|
|||
<ul>
|
||||
<li>Only available if UI messages are enabled.</li>
|
||||
<li>Currently not available settings are automatically skipped.</li>
|
||||
<li>If a setting was previously selected via a dedicated key, its value can also be changed with the
|
||||
global keys.</li>
|
||||
<li>If a setting was previously selected via a dedicated hotkey, its
|
||||
value can also be directly changed with the global keys.</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
|
@ -2395,7 +2418,7 @@
|
|||
<td> ✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Booster</th>
|
||||
<th> Booster Grip</th>
|
||||
<td> ✓</td>
|
||||
<td> ✓</td>
|
||||
<td> ✓ (+ extra)</td>
|
||||
|
@ -2403,7 +2426,7 @@
|
|||
<td> ✓ (+ extra)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Genesis</th>
|
||||
<th> Sega Genesis</th>
|
||||
<td> ✓</td>
|
||||
<td> ✓ (+ extra)</td>
|
||||
<td> ✓</td>
|
||||
|
@ -2427,7 +2450,7 @@
|
|||
<td> ✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Trackball/Mouse</th>
|
||||
<th> Trak-Ball/Mouse</th>
|
||||
<td> ✕</td>
|
||||
<td> ✕</td>
|
||||
<td> ✓</td>
|
||||
|
@ -2451,7 +2474,7 @@
|
|||
<td> ✕</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Mindlink</th>
|
||||
<th> MindLink</th>
|
||||
<td> ✕</td>
|
||||
<td> ✕</td>
|
||||
<td> ✓</td>
|
||||
|
@ -2938,30 +2961,48 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-joydeadzone <number></pre></td>
|
||||
<td>Set the joystick axis deadzone area for analog joysticks/gamepads.
|
||||
All values within the deadzone are treated as zero-axis values,
|
||||
while only those values outside are registered as valid input.
|
||||
Accepts a number from 0 - 29, and uses the formula
|
||||
3200 + number * 1000. So the possible deadzone values
|
||||
range from 3200 to 32200.</td>
|
||||
<td><pre>-joydeadzone <0 - 29></pre></td>
|
||||
<td>Set the joystick axis dead zone area for analog joysticks/gamepads
|
||||
emulating digital controllers.
|
||||
All values within the dead zone are treated as zero-axis values,
|
||||
while only those values outside are registered as valid input.</br>
|
||||
Dead zone is calculated as 3200 + value * 1000. So the possible dead
|
||||
zone values range from 3200 to 32200 (= 10% - 98%).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-psense <number></pre></td>
|
||||
<td>Sensitivity for emulation of paddles when using analog paddles.
|
||||
Valid range of values is from 0 to 30, with larger numbers causing
|
||||
faster movement.</td>
|
||||
<td><pre>-adeadzone <0 - 29></pre></td>
|
||||
<td>Set the joystick axis dead zone area for analog joysticks/gamepads
|
||||
emulating analog controllers. All values within the dead zone are
|
||||
treated as zero-axis values, while only those values outside are
|
||||
registered as valid input. </br>
|
||||
Dead zone is calculated as value * 565. So the possible dead zone
|
||||
values range from 0 to 16384 (= 0% - 50%)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-psense <0 - 30></pre></td>
|
||||
<td>Sensitivity for emulation of paddles when using analog controllers.
|
||||
Larger numbers are causing faster movement.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-plinear <25 - 100></pre></td>
|
||||
<td>Linearity of analog paddles. Lower numbers allow finer control
|
||||
around the paddle center.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-dejitter.base <0 - 10></pre></td>
|
||||
<td>Strength of paddle input averaging.</td>
|
||||
<td>Strength of analog paddle input averaging. Higher values will make
|
||||
the movement smoother, but also less responsive.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-dejitter.diff <0 - 10></pre></td>
|
||||
<td>Impact of fast paddle movement on input averaging.</td>
|
||||
<td>Impact of fast analog paddle movement on input averaging. Higher
|
||||
values will reduce the movement smoothing while the paddle is moved
|
||||
fast, making fast paddle movements more responsive.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -2990,7 +3031,7 @@
|
|||
when you want to disable them.</br>
|
||||
E.g. a 2-player game is using either the 'F' or 'R' keys for movement,
|
||||
and pressing Control (for Fire) will perform an unwanted action
|
||||
associated with 'Control + R' or 'Control + F' default keys.</td>
|
||||
associated with 'Control + F' or 'Control + R' default keys.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -3527,6 +3568,9 @@
|
|||
</tr><tr>
|
||||
<td><pre>-<plr.|dev.>bankrandom <1|0></pre></td>
|
||||
<td>On reset, randomize the startup bank (only for selected bankswitch types).</td>
|
||||
</tr><tr>
|
||||
<td><pre>-<plr.|dev.>tiarandom <1|0></pre></td>
|
||||
<td>On reset, randomize the TIA registers.</td>
|
||||
</tr><tr>
|
||||
<td><pre>-<plr.|dev.>ramrandom <1|0></pre></td>
|
||||
<td>On reset, either randomize all RAM content, or initialize with zero (console = 2600)/startup values (console = 7800) instead.</td>
|
||||
|
@ -3988,12 +4032,18 @@
|
|||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">Command Line</a></th></tr>
|
||||
<tr><td>Joystick deadzone size</td><td>Deadzone area for axes on joysticks/gamepads</td><td>-joydeadzone</td></tr>
|
||||
<tr><td>(Analog paddle) Sensitivity</td><td>Sensitivity of an analog paddle</td><td>-psense</td></tr>
|
||||
<tr><td>(Analog paddle) Dejitter averaging</td><td>Strength of paddle input averaging, suppresses paddle jitter.<br>
|
||||
<tr><td>Digital dead zone size</td><td>Dead zone area for axes on joysticks/gamepads emulating
|
||||
digital controllers
|
||||
</td><td>-joydeadzone</td></tr>
|
||||
<tr><td>Analog dead zone size</td><td>Dead zone area for axes on joysticks/gamepads emulating
|
||||
analog controllers
|
||||
</td><td>-adeadzone</td></tr>
|
||||
<tr><td>(Analog paddle) Sensitivity</td><td>Sensitivity of analog paddles</td><td>-psense</td></tr>
|
||||
<tr><td>(Analog paddle) Linearity</td><td>Linearity of analog paddles</td><td>-plinear</td></tr>
|
||||
<tr><td>(Analog paddle) Dejitter averaging</td><td>Strength of paddle input averaging, suppresses paddle jitter<br>
|
||||
Note: The 2600-daptor has built-in dejitter, so there should be no need to use Stella's dejitter.
|
||||
</td><td>-dejitter.base</td></tr>
|
||||
<tr><td>(Analog paddle) Dejitter reaction</td><td>Strength of paddle reaction to fast paddle movements, suppresses paddle jitter.</td><td>-dejitter.diff</td></tr>
|
||||
<tr><td>(Analog paddle) Dejitter reaction</td><td>Strength of paddle reaction to fast paddle movements, suppresses paddle jitter</td><td>-dejitter.diff</td></tr>
|
||||
<tr><td>Digital paddle sensitivity</td><td>Sensitivity used when emulating a paddle using a digital device</td><td>-dsense</td></tr>
|
||||
<tr><td>Autofire rate</td><td>Automatic trigger rate of the fire buttons in Hz</td><td>-autofirerate</td></tr>
|
||||
<tr><td>Allow all 4 directions ...</td><td>Allow all 4 joystick directions to be pressed simultaneously</td><td>-joyallow4</td></tr>
|
||||
|
@ -4278,15 +4328,57 @@
|
|||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">Command Line</a></th></tr>
|
||||
<tr><td>Player/Developer settings</td><td>Selects the active settings set</td><td>-dev.settings</td></tr>
|
||||
<tr><td>Console info overlay</td><td>Overlay console info on the TIA image during emulation.</td><td>-plr.stats<br/>-dev.stats</td></tr>
|
||||
<tr><td>Detected settings info</td><td>Display detected settings when a ROM is loaded.</td><td>-plr.detectedinfo<br/>-dev.detectedinfo</td></tr>
|
||||
<tr><td>Console</td><td>Select the console type, this affects Color/B&W/Pause key emulation and zero-page RAM initialization</td><td>-plr.console <br/>-dev.console</td></tr>
|
||||
<tr><td>Random startup bank</td><td>Randomize the startup bank (only for selected bankswitch types)</td><td>-plr.bankrandom<br/>-dev.bankrandom</td></tr>
|
||||
<tr><td>Randomize zero-page ...</td><td>When loading a ROM, randomize all RAM content instead of initializing with all zeroes (for 'Console' = 'Atari 2600' only)</td><td>-plr.ramrandom<br/>-dev.ramrandom</td></tr>
|
||||
<tr><td>Randomize CPU</td><td>When loading a ROM, randomize the content of the specified CPU registers</td><td>-plr.cpurandom<br/>-dev.cpurandom</td></tr>
|
||||
<tr><td>Drive unused TIA pins ...</td><td>Unused TIA pins are read random instead of the last databus values</td><td>-dev.tiadriven</td></tr>
|
||||
<tr>
|
||||
<th>Item</th>
|
||||
<th>Brief description</th>
|
||||
<th>For more information,<br>see <a href="#CommandLine">Command Line</a></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Player/Developer settings</td>
|
||||
<td>Selects the active settings set</td>
|
||||
<td>-dev.settings</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Console info overlay</td>
|
||||
<td>Overlay console info on the TIA image during emulation.</td>
|
||||
<td>-plr.stats<br/>-dev.stats</td></tr>
|
||||
<tr>
|
||||
<td>Detected settings info</td>
|
||||
<td>Display detected settings when a ROM is loaded.</td>
|
||||
<td>-plr.detectedinfo<br/>-dev.detectedinfo</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Console</td>
|
||||
<td>Select the console type, this affects Color/B&W/Pause key
|
||||
emulation and zero-page RAM initialization</td>
|
||||
<td>-plr.console <br/>-dev.console</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Random startup bank</td>
|
||||
<td>Randomize the startup bank (only for selected bankswitch types)</td>
|
||||
<td>-plr.bankrandom<br/>-dev.bankrandom</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Randomize TIA</td>
|
||||
<td>Randomize TIA registers when loading a ROM</td>
|
||||
<td>-plr.tiarandom<br/>-dev.tiarandom</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Randomize zero-page ...</td>
|
||||
<td>When loading a ROM, randomize all RAM content instead of
|
||||
initializing with all zeroes (for 'Console' = 'Atari 2600' only)</td>
|
||||
<td>-plr.ramrandom<br/>-dev.ramrandom</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Randomize CPU</td>
|
||||
<td>When loading a ROM, randomize the content of the specified CPU registers</td>
|
||||
<td>-plr.cpurandom<br/>-dev.cpurandom</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Drive unused TIA pins ...</td>
|
||||
<td>Unused TIA pins are read random instead of the last databus values</td>
|
||||
<td>-dev.tiadriven</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Break on reads from ...</td>
|
||||
<td>A read from a write port interrupts emulation and the debugger is entered.</td>
|
||||
|
@ -4302,7 +4394,11 @@
|
|||
<td>Thumb ARM emulation throws an exception and enters the debugger on fatal errors</td>
|
||||
<td><span style="white-space:nowrap">-dev.thumb.trapfatal</span></td>
|
||||
</tr>
|
||||
<tr><td>Display AtariVox...</td><td>Display a message when the AtariVox/SaveKey EEPROM is read or written</td><td>-plr.eepromaccess<br/>-dev.eepromaccess</td></tr>
|
||||
<tr>
|
||||
<td>Display AtariVox...</td>
|
||||
<td>Display a message when the AtariVox/SaveKey EEPROM is read or written</td>
|
||||
<td>-plr.eepromaccess<br/>-dev.eepromaccess</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -4896,11 +4992,11 @@ Ms Pac-Man (Stella extended codes):
|
|||
<tr><td>Trakball</td><td>Standard Atari 2600 CX22/CX80 'Trak-Ball' controller.</td></tr>
|
||||
<tr><td><a href="https://atariage.com/store/index.php?l=product_detail&p=1045">AtariVox ¹</a></td><td>A SpeakJet based unlimited-vocabulary speech/sound synthesizer with 32K EEPROM.</td></tr>
|
||||
<tr><td>SaveKey</td><td>A 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).</td></tr>
|
||||
<tr><td>Genesis </td><td>Sega Genesis controller, which can be used similar to a BoosterGrip, giving an extra button.</td></tr>
|
||||
<tr><td>Genesis </td><td>Sega Genesis controller, which can be used similar to a Booster Grip, giving an extra button.</td></tr>
|
||||
<tr><td>CompuMate ¹</td><td>Spectravideo CompuMate (if either left or right is set, CompuMate is used for both).</td></tr>
|
||||
<tr><td>Lightgun</td><td>Atari XG-1 compatible Light Gun</td></tr>
|
||||
<tr><td>Mindlink ¹</td><td>Mindlink controller.</td></tr>
|
||||
<tr><td>KidVid ¹</td><td>KidVid controller, limited support (8, 9 and 0 start the games).</td></tr>
|
||||
<tr><td>Lightgun</td><td>Atari XG-1 compatible Light Gun.</td></tr>
|
||||
<tr><td>MindLink ¹</td><td>MindLink controller.</td></tr>
|
||||
<tr><td>KidVid</td><td>Kid Vid Voice Module, limited support (Right Keyboard controller buttons 1, 2 and 3 start the games, default mapping is 8, 9 and 0).</td></tr>
|
||||
<tr><td>QuadTari</td><td><a href="#Quadtari">QuadTari</a> controller, limited support (see below).</td></tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "Console.hxx"
|
||||
#include "Joystick.hxx"
|
||||
#include "Paddles.hxx"
|
||||
#include "MindLink.hxx"
|
||||
#include "PointingDevice.hxx"
|
||||
#include "Driving.hxx"
|
||||
#include "Settings.hxx"
|
||||
|
@ -664,7 +665,6 @@ bool PhysicalJoystickHandler::addJoyMapping(Event::Type event, EventMode mode, i
|
|||
{
|
||||
EventMode evMode = getEventMode(event, mode);
|
||||
|
||||
|
||||
// This confusing code is because each axis has two associated values,
|
||||
// but analog events only affect one of the axis.
|
||||
if (Event::isAnalog(event))
|
||||
|
@ -798,13 +798,13 @@ void PhysicalJoystickHandler::handleRegularAxisEvent(const PhysicalJoystickPtr j
|
|||
Event::Type eventAxisNeg = j->joyMap.get(EventMode::kEmulationMode, button, JoyAxis(axis), JoyDir::NEG);
|
||||
Event::Type eventAxisPos = j->joyMap.get(EventMode::kEmulationMode, button, JoyAxis(axis), JoyDir::POS);
|
||||
|
||||
if(value > Joystick::deadzone())
|
||||
if(value > Controller::digitalDeadZone())
|
||||
myHandler.handleEvent(eventAxisPos);
|
||||
else if(value < -Joystick::deadzone())
|
||||
else if(value < -Controller::digitalDeadZone())
|
||||
myHandler.handleEvent(eventAxisNeg);
|
||||
else
|
||||
{
|
||||
// Treat any deadzone value as zero
|
||||
// Treat any dead zone value as zero
|
||||
value = 0;
|
||||
|
||||
// Now filter out consecutive, similar values
|
||||
|
@ -813,8 +813,8 @@ void PhysicalJoystickHandler::handleRegularAxisEvent(const PhysicalJoystickPtr j
|
|||
{
|
||||
// Turn off both events, since we don't know exactly which one
|
||||
// was previously activated.
|
||||
myHandler.handleEvent(eventAxisNeg, false);
|
||||
myHandler.handleEvent(eventAxisPos, false);
|
||||
myHandler.handleEvent(eventAxisNeg, 0);
|
||||
myHandler.handleEvent(eventAxisPos, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -823,14 +823,14 @@ void PhysicalJoystickHandler::handleRegularAxisEvent(const PhysicalJoystickPtr j
|
|||
#ifdef GUI_SUPPORT
|
||||
else if(myHandler.hasOverlay())
|
||||
{
|
||||
// A value change lower than Joystick::deadzone indicates analog input which is ignored
|
||||
if((abs(j->axisLastValue[axis] - value) > Joystick::deadzone()))
|
||||
// A value change lower than Controller::digitalDeadzone indicates analog input which is ignored
|
||||
if((abs(j->axisLastValue[axis] - value) > Controller::digitalDeadZone()))
|
||||
{
|
||||
// First, clamp the values to simulate digital input
|
||||
// (the only thing that the underlying code understands)
|
||||
if(value > Joystick::deadzone())
|
||||
if(value > Controller::digitalDeadZone())
|
||||
value = 32000;
|
||||
else if(value < -Joystick::deadzone())
|
||||
else if(value < -Controller::digitalDeadZone())
|
||||
value = -32000;
|
||||
else
|
||||
value = 0;
|
||||
|
@ -945,18 +945,35 @@ ostream& operator<<(ostream& os, const PhysicalJoystickHandler& jh)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void PhysicalJoystickHandler::changeDeadzone(int direction)
|
||||
void PhysicalJoystickHandler::changeDigitalDeadZone(int direction)
|
||||
{
|
||||
int deadzone = BSPF::clamp(myOSystem.settings().getInt("joydeadzone") + direction,
|
||||
Joystick::DEAD_ZONE_MIN, Joystick::DEAD_ZONE_MAX);
|
||||
myOSystem.settings().setValue("joydeadzone", deadzone);
|
||||
int deadZone = BSPF::clamp(myOSystem.settings().getInt("joydeadzone") + direction,
|
||||
Controller::MIN_DIGITAL_DEADZONE, Controller::MAX_DIGITAL_DEADZONE);
|
||||
myOSystem.settings().setValue("joydeadzone", deadZone);
|
||||
|
||||
Joystick::setDeadZone(deadzone);
|
||||
Controller::setDigitalDeadZone(deadZone);
|
||||
|
||||
int value = Joystick::deadZoneValue(deadzone);
|
||||
ostringstream ss;
|
||||
ss << std::round(Controller::digitalDeadZoneValue(deadZone) * 100.F / 32768) << "%";
|
||||
|
||||
myOSystem.frameBuffer().showGaugeMessage("Joystick deadzone", std::to_string(value),
|
||||
value, 3200, 32200);
|
||||
myOSystem.frameBuffer().showGaugeMessage("Digital controller dead zone", ss. str(), deadZone,
|
||||
Controller::MIN_DIGITAL_DEADZONE, Controller::MAX_DIGITAL_DEADZONE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void PhysicalJoystickHandler::changeAnalogPaddleDeadZone(int direction)
|
||||
{
|
||||
int deadZone = BSPF::clamp(myOSystem.settings().getInt("adeadzone") + direction,
|
||||
Controller::MIN_ANALOG_DEADZONE, Controller::MAX_ANALOG_DEADZONE);
|
||||
myOSystem.settings().setValue("adeadzone", deadZone);
|
||||
|
||||
Controller::setAnalogDeadZone(deadZone);
|
||||
|
||||
ostringstream ss;
|
||||
ss << std::round(Controller::analogDeadZoneValue(deadZone) * 100.F / 32768) << "%";
|
||||
|
||||
myOSystem.frameBuffer().showGaugeMessage("Analog controller dead zone", ss.str(), deadZone,
|
||||
Controller::MIN_ANALOG_DEADZONE, Controller::MAX_ANALOG_DEADZONE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -970,10 +987,30 @@ void PhysicalJoystickHandler::changeAnalogPaddleSensitivity(int direction)
|
|||
|
||||
ostringstream ss;
|
||||
ss << std::round(Paddles::analogSensitivityValue(sense) * 100.F) << "%";
|
||||
|
||||
myOSystem.frameBuffer().showGaugeMessage("Analog paddle sensitivity", ss.str(), sense,
|
||||
Paddles::MIN_ANALOG_SENSE, Paddles::MAX_ANALOG_SENSE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void PhysicalJoystickHandler::changeAnalogPaddleLinearity(int direction)
|
||||
{
|
||||
int linear = BSPF::clamp(myOSystem.settings().getInt("plinear") + direction * 5,
|
||||
Paddles::MIN_ANALOG_LINEARITY, Paddles::MAX_ANALOG_LINEARITY);
|
||||
myOSystem.settings().setValue("plinear", linear);
|
||||
|
||||
Paddles::setAnalogLinearity(linear);
|
||||
|
||||
ostringstream ss;
|
||||
if(linear)
|
||||
ss << linear << "%";
|
||||
else
|
||||
ss << "Off";
|
||||
|
||||
myOSystem.frameBuffer().showGaugeMessage("Analog paddle linearity", ss.str(), linear,
|
||||
Paddles::MIN_ANALOG_LINEARITY, Paddles::MAX_ANALOG_LINEARITY);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void PhysicalJoystickHandler::changePaddleDejitterAveraging(int direction)
|
||||
{
|
||||
|
@ -1038,17 +1075,17 @@ void PhysicalJoystickHandler::changeDigitalPaddleSensitivity(int direction)
|
|||
void PhysicalJoystickHandler::changeMousePaddleSensitivity(int direction)
|
||||
{
|
||||
int sense = BSPF::clamp(myOSystem.settings().getInt("msense") + direction,
|
||||
Paddles::MIN_MOUSE_SENSE, Paddles::MAX_MOUSE_SENSE);
|
||||
Controller::MIN_MOUSE_SENSE, Controller::MAX_MOUSE_SENSE);
|
||||
myOSystem.settings().setValue("msense", sense);
|
||||
|
||||
Paddles::setMouseSensitivity(sense);
|
||||
Controller::setMouseSensitivity(sense);
|
||||
|
||||
ostringstream ss;
|
||||
ss << sense * 10 << "%";
|
||||
|
||||
myOSystem.frameBuffer().showGaugeMessage("Mouse paddle sensitivity",
|
||||
ss.str(), sense,
|
||||
Paddles::MIN_MOUSE_SENSE, Paddles::MAX_MOUSE_SENSE);
|
||||
Controller::MIN_MOUSE_SENSE, Controller::MAX_MOUSE_SENSE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -110,8 +110,10 @@ class PhysicalJoystickHandler
|
|||
/** Returns a list of pairs consisting of joystick name and associated ID. */
|
||||
VariantList database() const;
|
||||
|
||||
void changeDeadzone(int direction = +1);
|
||||
void changeDigitalDeadZone(int direction = +1);
|
||||
void changeAnalogPaddleDeadZone(int direction = +1);
|
||||
void changeAnalogPaddleSensitivity(int direction = +1);
|
||||
void changeAnalogPaddleLinearity(int direction = +1);
|
||||
void changePaddleDejitterAveraging(int direction = +1);
|
||||
void changePaddleDejitterReaction(int direction = +1);
|
||||
void changeDigitalPaddleSensitivity(int direction = +1);
|
||||
|
|
|
@ -689,8 +689,12 @@ PhysicalKeyboardHandler::DefaultCommonMapping = {
|
|||
|
||||
{ Event::DecreaseDeadzone, KBDK_F1, KBDM_CTRL | KBDM_SHIFT },
|
||||
{ Event::IncreaseDeadzone, KBDK_F1, KBDM_CTRL },
|
||||
{ Event::DecAnalogDeadzone, KBDK_F1, KBDM_CTRL | MOD3 | KBDM_SHIFT},
|
||||
{ Event::IncAnalogDeadzone, KBDK_F1, KBDM_CTRL | MOD3},
|
||||
{ Event::DecAnalogSense, KBDK_F2, KBDM_CTRL | KBDM_SHIFT },
|
||||
{ Event::IncAnalogSense, KBDK_F2, KBDM_CTRL },
|
||||
{ Event::DecAnalogLinear, KBDK_F2, KBDM_CTRL | MOD3 | KBDM_SHIFT},
|
||||
{ Event::IncAnalogLinear, KBDK_F2, KBDM_CTRL | MOD3},
|
||||
{ Event::DecDejtterAveraging, KBDK_F3, KBDM_CTRL | KBDM_SHIFT },
|
||||
{ Event::IncDejtterAveraging, KBDK_F3, KBDM_CTRL },
|
||||
{ Event::DecDejtterReaction, KBDK_F4, KBDM_CTRL | KBDM_SHIFT },
|
||||
|
|
|
@ -195,8 +195,12 @@ NLOHMANN_JSON_SERIALIZE_ENUM(Event::Type, {
|
|||
|
||||
{Event::DecreaseDeadzone, "DecreaseDeadzone"},
|
||||
{Event::IncreaseDeadzone, "IncreaseDeadzone"},
|
||||
{Event::DecAnalogDeadzone, "DecAnalogDeadzone"},
|
||||
{Event::IncAnalogDeadzone, "IncAnalogDeadzone"},
|
||||
{Event::DecAnalogSense, "DecAnalogSense"},
|
||||
{Event::IncAnalogSense, "IncAnalogSense"},
|
||||
{Event::DecAnalogLinear, "DecAnalogLinear"},
|
||||
{Event::IncAnalogLinear, "IncAnalogLinear"},
|
||||
{Event::DecDejtterAveraging, "DecDejtterAveraging"},
|
||||
{Event::IncDejtterAveraging, "IncDejtterAveraging"},
|
||||
{Event::DecDejtterReaction, "DecDejtterReaction"},
|
||||
|
|
|
@ -1,374 +0,0 @@
|
|||
"Cart.MD5" "05215b73ec33b502449ee726ac6b201f"
|
||||
"Cart.Name" "draconian_20171013_RC6"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "8,0,B,0,B,1,SECT.,D,1,VARIATIONS_ARE_DIFFICULTY_LEVEL"
|
||||
"Cart.Addresses" "177B,177A,1779,1778,811,1780"
|
||||
""
|
||||
|
||||
"Cart.MD5" "081e2c114c9c20b61acf25fc95c71bf4"
|
||||
"Cart.Manufacturer" "Parker Brothers, Ed English, David Lamkins"
|
||||
"Cart.ModelNo" "PB5300"
|
||||
"Cart.Name" "Frogger (1982) (Parker Bros)"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "6"
|
||||
"Cart.Addresses" "CC,CE,DD,E6"
|
||||
""
|
||||
|
||||
"Cart.MD5" "136f75c4dd02c29283752b7e5799f978"
|
||||
"Cart.Manufacturer" "Atari, Dan Hitchens - Sears"
|
||||
"Cart.ModelNo" "CX2650 - 49-75168"
|
||||
"Cart.Name" "Berzerk (1982) (Atari)"
|
||||
"Cart.Rarity" "Common"
|
||||
"Cart.Variations" "12"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "DD,DE,DF,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "137373599e9b7bf2cf162a102eb5927f"
|
||||
"Cart.Manufacturer" "AtariAge, Joe Grand"
|
||||
"Cart.Name" "Ultra SCSIcide (SCSIcide 2.0)"
|
||||
"Controller.Left" "PADDLES"
|
||||
"Cart.Formats" "6,0,H"
|
||||
"Cart.Addresses" "DC,DD,DE"
|
||||
""
|
||||
|
||||
"Cart.MD5" "211774f4c5739042618be8ff67351177"
|
||||
"Cart.Manufacturer" "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker"
|
||||
"Cart.ModelNo" "CX2684"
|
||||
"Cart.Name" "Galaxian (1983) (Atari)"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "9"
|
||||
"Cart.Formats" "6,0,B,0,B,0,WAVE"
|
||||
"Cart.Addresses" "AC,AD,AE,B3,AF"
|
||||
""
|
||||
|
||||
"Cart.MD5" "240bfbac5163af4df5ae713985386f92"
|
||||
"Cart.Manufacturer" "Activision, Steve Cartwright"
|
||||
"Cart.ModelNo" "AX-022"
|
||||
"Cart.Name" "Seaquest (1983) (Activision)"
|
||||
"Cart.Formats" "6,0,B,0,B,0,_,B,0,HIGH_SCORE_IS_FROM_CURRENT_PLAYER"
|
||||
"Cart.Addresses" "B8,B9,BA"
|
||||
""
|
||||
|
||||
"Cart.MD5" "278f14887d601b5e5b620f1870bc09f6"
|
||||
"Cart.Manufacturer" "Thomas Jentzsch"
|
||||
"Cart.Name" "SWOOPS! (v0.96) (TJ)"
|
||||
"Cart.Note" "Uses the Joystick (L) and Paddle (R) Controllers"
|
||||
"Cart.Rarity" "Homebrew"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,1"
|
||||
"Cart.Addresses" "FD,FE,FF,FC"
|
||||
""
|
||||
|
||||
"Cart.MD5" "2903896d88a341511586d69fcfc20f7d"
|
||||
"Cart.Manufacturer" "Activision, David Crane"
|
||||
"Cart.ModelNo" "AX-014, AX-014-04"
|
||||
"Cart.Name" "Grand Prix (1982) (Activision)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "5,0,B,1,B,1,_,B,0,TIME/SCORE_SHOWS_EXTRA_DIGIT"
|
||||
"Cart.Addresses" "EB,EC,ED,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "2a0ba55e56e7a596146fa729acf0e109"
|
||||
"Cart.Manufacturer" "Activision, Bob Whitehead"
|
||||
"Cart.ModelNo" "AG-019"
|
||||
"Cart.Name" "Sky Jinks (1982) (Activision)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,1,B,1"
|
||||
"Cart.Addresses" "9E,A6,A2,99"
|
||||
""
|
||||
|
||||
"Cart.MD5" "2bb9f4686f7e08c5fcc69ec1a1c66fe7"
|
||||
"Cart.Manufacturer" "Atari - GCC, John Allred, Mike Feinstein"
|
||||
"Cart.ModelNo" "CX2688"
|
||||
"Cart.Name" "Jungle Hunt (1983) (Atari)"
|
||||
"Cart.Variations" "2"
|
||||
"Cart.Formats" "6,0,B,0,B,1"
|
||||
"Cart.Addresses" "85,84,83,8B"
|
||||
""
|
||||
|
||||
"Cart.MD5" "318a9d6dda791268df92d72679914ac3"
|
||||
"Cart.Manufacturer" "Activision, Steve Cartwright"
|
||||
"Cart.ModelNo" "AX-017, AX-017-04"
|
||||
"Cart.Name" "MegaMania (1982) (Activision)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,1"
|
||||
"Cart.Addresses" "DB,DC,DD,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "36b20c427975760cb9cf4a47e41369e4"
|
||||
"Cart.Manufacturer" "Coleco - Woodside Design Associates - Imaginative Systems Software, Garry Kitchen"
|
||||
"Cart.ModelNo" "2451"
|
||||
"Cart.Name" "Donkey Kong (1982) (Coleco)"
|
||||
"Cart.Formats" "6,2"
|
||||
"Cart.Addresses" "87,88"
|
||||
""
|
||||
|
||||
"Cart.MD5" "3a2e2d0c6892aa14544083dfb7762782"
|
||||
"Cart.Manufacturer" "Atari, Rob Fulop - Sears"
|
||||
"Cart.ModelNo" "CX2638 - 49-75166"
|
||||
"Cart.Name" "Missile Command (1981) (Atari)"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "34"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "F3,F1,EF,E9"
|
||||
""
|
||||
|
||||
"Cart.MD5" "3e90cf23106f2e08b2781e41299de556"
|
||||
"Cart.Manufacturer" "Activision, David Crane"
|
||||
"Cart.ModelNo" "AX-018, AX-018-04"
|
||||
"Cart.Name" "Pitfall! (1982) (Activision)"
|
||||
"Cart.Note" "Pitfall Harry's Jungle Adventure (Jungle Runner)"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "D5,D6,D7"
|
||||
""
|
||||
|
||||
"Cart.MD5" "4ca73eb959299471788f0b685c3ba0b5"
|
||||
"Cart.Manufacturer" "Activision, Steve Cartwright"
|
||||
"Cart.ModelNo" "AX-031"
|
||||
"Cart.Name" "Frostbite (1983) (Activision)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,1,LEVEL,B,1"
|
||||
"Cart.Addresses" "C8,C9,CA,80,CB"
|
||||
""
|
||||
|
||||
"Cart.MD5" "515046e3061b7b18aa3a551c3ae12673"
|
||||
"Cart.Manufacturer" "Atari - GCC, Mark Ackerman, Noellie Alito"
|
||||
"Cart.ModelNo" "CX2692"
|
||||
"Cart.Name" "Moon Patrol (1983) (Atari)"
|
||||
"Cart.Variations" "6"
|
||||
"Cart.Formats" "6,0,B,0,B,1"
|
||||
"Cart.Addresses" "EA,EB,EC,F9"
|
||||
""
|
||||
|
||||
"Cart.MD5" "541cac55ebcf7891d9d51c415922303f"
|
||||
"Cart.Name" "SF2_20131217_RC8_NTSC"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Formats" "8,0,B,0,B,0,LEVEL,D,1"
|
||||
"Cart.Addresses" "1CF7,1CF6,1CF5,1CF4,0,18AC"
|
||||
""
|
||||
|
||||
"Cart.MD5" "6dda84fb8e442ecf34241ac0d1d91d69"
|
||||
"Cart.Manufacturer" "Atari - GCC, Douglas B. Macrae"
|
||||
"Cart.ModelNo" "CX2677"
|
||||
"Cart.Name" "Dig Dug (1983) (Atari)"
|
||||
"Cart.Variations" "2"
|
||||
"Cart.Formats" "4,0,B,0,B,1,_,B,0,VARIATION_1_IS_EASY;_2_IS_NORMAL"
|
||||
"Cart.Addresses" "F0FE,F0FD,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "72ffbef6504b75e69ee1045af9075f66"
|
||||
"Cart.Manufacturer" "Atari, Richard Maurer - Sears"
|
||||
"Cart.ModelNo" "CX2632 - 49-75153"
|
||||
"Cart.Name" "Space Invaders (1980) (Atari)"
|
||||
"Cart.Variations" "112"
|
||||
"Cart.Formats" "4,0,B,0,D,1,_,B,0,ONLY_PLAYER_1_SUPPORTED"
|
||||
"Cart.Addresses" "E6,E8,DC"
|
||||
""
|
||||
|
||||
"Cart.MD5" "77057d9d14b99e465ea9e29783af0ae3"
|
||||
"Cart.Manufacturer" "Activision, David Crane"
|
||||
"Cart.ModelNo" "AG-001"
|
||||
"Cart.Name" "Dragster (1980) (Activision)"
|
||||
"Cart.Note" "AKA Drag Strip"
|
||||
"Cart.Formats" "4,0,B,1,B,1"
|
||||
"Cart.Addresses" "B3,B5,80,0"
|
||||
""
|
||||
|
||||
"Cart.MD5" "7e52a95074a66640fcfde124fffd491a"
|
||||
"Cart.Manufacturer" "Atari - GCC, Mike Feinstein, John Mracek"
|
||||
"Cart.ModelNo" "CX2673"
|
||||
"Cart.Name" "Phoenix (1983) (Atari)"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "C9,C8,C7"
|
||||
""
|
||||
|
||||
"Cart.MD5" "87e79cd41ce136fd4f72cc6e2c161bee"
|
||||
"Cart.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker"
|
||||
"Cart.ModelNo" "CX2675"
|
||||
"Cart.Name" "Ms. Pac-Man (1983) (Atari)"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,1,_,D,1,VARS_VALID_AT_GAME_OVER;_CHERRIES_=_VAR_#4"
|
||||
"Cart.Addresses" "FA,F9,F8,F7,0"
|
||||
""
|
||||
|
||||
"Cart.MD5" "91c2098e88a6b13f977af8c003e0bca5"
|
||||
"Cart.Manufacturer" "Atari - GCC"
|
||||
"Cart.ModelNo" "CX2676"
|
||||
"Cart.Name" "Centipede (1983) (Atari)"
|
||||
"Cart.Formats" "6,0,B,0,B,0,_,B,0,VARIATIONS_CANNOT_BE_DEFINED"
|
||||
"Cart.Addresses" "F4,F5,F6"
|
||||
""
|
||||
|
||||
"Cart.MD5" "91f0a708eeb93c133e9672ad2c8e0429"
|
||||
"Cart.Name" "Oystron (V2.9) (Piero Cavina) (PD)"
|
||||
"Cart.Rarity" "New Release"
|
||||
"Cart.Variations" "3"
|
||||
"Cart.Formats" "5,1,B,0,B,1"
|
||||
"Cart.Addresses" "D4,D3,E5"
|
||||
""
|
||||
|
||||
"Cart.MD5" "94b92a882f6dbaa6993a46e2dcc58402"
|
||||
"Cart.Manufacturer" "Activision, Larry Miller"
|
||||
"Cart.ModelNo" "AX-026, AX-026-04"
|
||||
"Cart.Name" "Enduro (1983) (Activision)"
|
||||
"Cart.Formats" "6,0,B,0,B,0,DAY"
|
||||
"Cart.Addresses" "AA,A9,A8,0,AD"
|
||||
""
|
||||
|
||||
"Cart.MD5" "9ad36e699ef6f45d9eb6c4cf90475c9f"
|
||||
"Cart.Manufacturer" "Imagic, Dennis Koble"
|
||||
"Cart.ModelNo" "720103-1A, 720103-1B, IA3203, IX-010-04"
|
||||
"Cart.Name" "Atlantis (1982) (Imagic)"
|
||||
"Cart.Note" "AKA Lost City of Atlantis"
|
||||
"Cart.Rarity" "Uncommon"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,2,B,0,B,1"
|
||||
"Cart.Addresses" "A3,A2,8D"
|
||||
""
|
||||
|
||||
"Cart.MD5" "ab5bf1ef5e463ad1cbb11b6a33797228"
|
||||
"Cart.Manufacturer" "Imagic, Rob Fulop"
|
||||
"Cart.ModelNo" "720104-1A, 720104-1B, IA3204"
|
||||
"Cart.Name" "Cosmic Ark (1982) (Imagic)"
|
||||
"Cart.Variations" "6"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "AE,B0,B2,BC"
|
||||
""
|
||||
|
||||
"Cart.MD5" "ac7c2260378975614192ca2bc3d20e0b"
|
||||
"Cart.Manufacturer" "Activision, David Crane"
|
||||
"Cart.ModelNo" "AG-930-04, AZ-030"
|
||||
"Cart.Name" "Decathlon (1983) (Activision)"
|
||||
"Cart.Rarity" "Rare"
|
||||
"Cart.Variations" "10"
|
||||
"Cart.Formats" "4,0,B,0,D,1,_,B,0,DECATHLON_&_100M_DASH_SHARE_VARIATION_1"
|
||||
"Cart.Addresses" "95,96,80,0"
|
||||
""
|
||||
|
||||
"Cart.MD5" "be929419902e21bd7830a7a7d746195d"
|
||||
"Cart.Manufacturer" "Activision, Garry Kitchen"
|
||||
"Cart.ModelNo" "AX-025, AX-025-04"
|
||||
"Cart.Name" "Keystone Kapers (1983) (Activision)"
|
||||
"Cart.Formats" "6"
|
||||
"Cart.Addresses" "9A,9B,9C"
|
||||
""
|
||||
|
||||
"Cart.MD5" "c1cb228470a87beb5f36e90ac745da26"
|
||||
"Cart.Manufacturer" "Activision, Bob Whitehead"
|
||||
"Cart.ModelNo" "AX-015, AX-015-04"
|
||||
"Cart.Name" "Chopper Command (1982) (Activision)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,1"
|
||||
"Cart.Addresses" "EC,EE,F0,E0"
|
||||
""
|
||||
|
||||
"Cart.MD5" "c5930d0e8cdae3e037349bfa08e871be"
|
||||
"Cart.Manufacturer" "Atari, Howard Scott Warshaw - Sears"
|
||||
"Cart.ModelNo" "CX2655 - 49-75167"
|
||||
"Cart.Name" "Yars' Revenge (1982) (Atari)"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "8"
|
||||
"Cart.Formats" "6,0,B,0,B,1,_,B,0,VARIATIONS_ARE_LARGER_BY_1"
|
||||
"Cart.Addresses" "E0,E1,E2,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "c6556e082aac04260596b4045bc122de"
|
||||
"Cart.Manufacturer" "Atari - GCC, Dave Payne"
|
||||
"Cart.ModelNo" "CX2669"
|
||||
"Cart.Name" "Vanguard (1983) (Atari)"
|
||||
"Cart.Formats" "6,0,B,0,B,0,_,B,0,SCORE_IS_FOR_CURRENT_PLAYER"
|
||||
"Cart.Addresses" "99,98,97"
|
||||
""
|
||||
|
||||
"Cart.MD5" "ccbd36746ed4525821a8083b0d6d2c2c"
|
||||
"Cart.Manufacturer" "Atari, Brad Stewart - Sears"
|
||||
"Cart.ModelNo" "CX2649, 49-75163"
|
||||
"Cart.Name" "Asteroids (1981) (Atari) [no copyright]"
|
||||
"Cart.Rarity" "Common"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "66"
|
||||
"Cart.Formats" "5,1,H,1,D,0,_,B,0,VARIATIONS_>_32_DIFFER_BY_1"
|
||||
"Cart.Addresses" "BD,BE,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "d69559f9c9dc6ef528d841bf9d91b275"
|
||||
"Cart.Manufacturer" "Activision, Alan Miller"
|
||||
"Cart.ModelNo" "AX-016"
|
||||
"Cart.Name" "StarMaster (1982) (Activision)"
|
||||
"Cart.Note" "Use Color/BW switch to change between galactic chart and front views"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "4,0,B,0,B,1,_,B,0,SCORE_ONLY_CALCULATED_WHEN_GAME_IS_OVER"
|
||||
"Cart.Addresses" "C1,C2,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "dd7884b4f93cab423ac471aa1935e3df"
|
||||
"Cart.Manufacturer" "Atari, Brad Stewart - Sears"
|
||||
"Cart.ModelNo" "CX2649, 49-75163"
|
||||
"Cart.Name" "Asteroids (1981) (Atari)"
|
||||
"Cart.Variations" "66"
|
||||
"Cart.Formats" "5,1,H,1,D,0,_,B,0,VARIATIONS_>_32_DIFFER_BY_1"
|
||||
"Cart.Addresses" "BD,BE,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "dde55d9868911407fe8b3fefef396f00"
|
||||
"Cart.Name" "Seawolf (2004) (Xype, Manuel Rotschkar)"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,0,B,0,_,B,0,USER_DEFINED_VARIATION_BASED_ON_SWITCHES"
|
||||
"Cart.Addresses" "90,91,92,0,0"
|
||||
""
|
||||
|
||||
"Cart.MD5" "f0e0addc07971561ab80d9abe1b8d333"
|
||||
"Cart.Manufacturer" "Imagic, Rob Fulop"
|
||||
"Cart.ModelNo" "720000-200, 720101-1B, 720101-1C, IA3200, IA3200C, IX-006-04"
|
||||
"Cart.Name" "Demon Attack (1982) (Imagic)"
|
||||
"Cart.Note" "AKA Death from Above"
|
||||
"Cart.Variations" "10"
|
||||
"Cart.Formats" "6,0,B,0,B,0,WAVE,B,1"
|
||||
"Cart.Addresses" "81,83,85,EA,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "f1489e27a4539a0c6c8529262f9f7e18"
|
||||
"Cart.Manufacturer" "Champ Games"
|
||||
"Cart.ModelNo" "CG-01-P"
|
||||
"Cart.Name" "Lady Bug (PAL60)"
|
||||
"Cart.Rarity" "Homebrew"
|
||||
"Console.RightDiff" "A"
|
||||
"Display.Format" "PAL60"
|
||||
"Display.Phosphor" "YES"
|
||||
"Cart.Variations" "3"
|
||||
"Cart.Formats" "6,0,B,0,B,1,PART,D,1"
|
||||
"Cart.Addresses" "8E,8D,8C,8A,89"
|
||||
""
|
||||
|
||||
"Cart.MD5" "f34f08e5eb96e500e851a80be3277a56"
|
||||
"Cart.Manufacturer" "Atari, Brad Stewart - Sears"
|
||||
"Cart.ModelNo" "CX2622 - 6-99813, 49-75107"
|
||||
"Cart.Name" "Breakout (1978) (Atari)"
|
||||
"Cart.Note" "Uses the Paddle Controllers"
|
||||
"Controller.MouseAxis" "01 60"
|
||||
"Cart.Formats" "3,0,B,0,B,0,_,B,0,VARIATIONS_CANNOT_BE_DEFINED"
|
||||
"Cart.Addresses" "CE,CD"
|
||||
""
|
||||
|
||||
"Cart.MD5" "f8240e62d8c0a64a61e19388414e3104"
|
||||
"Cart.Manufacturer" "Activision, Steve Cartwright"
|
||||
"Cart.ModelNo" "AX-013"
|
||||
"Cart.Name" "Barnstorming (1982) (Activision)"
|
||||
"Cart.Rarity" "Uncommon"
|
||||
"Cart.Variations" "4"
|
||||
"Cart.Formats" "6,0,B,1,B,1"
|
||||
"Cart.Addresses" "B5,B6,B7,80"
|
||||
""
|
||||
|
||||
"Cart.MD5" "fca4a5be1251927027f2c24774a02160"
|
||||
"Cart.Manufacturer" "Activision, John Van Ryzin"
|
||||
"Cart.ModelNo" "AZ-036-04"
|
||||
"Cart.Name" "H.E.R.O. (1984) (Activision)"
|
||||
"Cart.Variations" "5"
|
||||
"Cart.Formats" "6,0,B,0,B,1,LEVEL,D,1"
|
||||
"Cart.Addresses" "B7,B8,B9,80,F5"
|
||||
""
|
||||
|
|
@ -285,7 +285,7 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
|
||||
getDynamicBounds(w, h);
|
||||
myOptions = make_unique<OptionsDialog>(instance(), parent(), this, w, h,
|
||||
Menu::AppMode::debugger);
|
||||
OptionsMenu::AppMode::debugger);
|
||||
}
|
||||
myOptions->open();
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ class AmigaMouse : public PointingDevice
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "AmigaMouse"; }
|
||||
string name() const override { return "Amiga mouse"; }
|
||||
|
||||
protected:
|
||||
uInt8 ioPortA(uInt8 countH, uInt8 countV, uInt8, uInt8) override
|
||||
|
|
|
@ -38,7 +38,7 @@ class AtariMouse : public PointingDevice
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "AtariMouse"; }
|
||||
string name() const override { return "Atari mouse"; }
|
||||
|
||||
protected:
|
||||
uInt8 ioPortA(uInt8 countH, uInt8 countV, uInt8, uInt8) override
|
||||
|
|
|
@ -44,7 +44,7 @@ class BoosterGrip : public Joystick
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "BoosterGrip"; }
|
||||
string name() const override { return "Booster Grip"; }
|
||||
|
||||
private:
|
||||
/**
|
||||
|
|
|
@ -301,7 +301,7 @@ class MovieInputs : public Serializable
|
|||
|
||||
// Automatically generated
|
||||
// Several not used
|
||||
#define addr_kernel_48 0x800
|
||||
// #define addr_kernel_48 0x800
|
||||
#define addr_transport_direction 0x880
|
||||
#define addr_transport_buttons 0x894
|
||||
#define addr_right_line 0x948
|
||||
|
@ -317,7 +317,7 @@ class MovieInputs : public Serializable
|
|||
#define addr_set_gcol7 0x96a
|
||||
#define addr_set_gdata7 0x96e
|
||||
#define addr_set_gcol8 0x972
|
||||
#define addr_left_line 0x980
|
||||
// #define addr_left_line 0x980
|
||||
#define addr_set_gdata1 0x982
|
||||
#define addr_set_gcol1 0x988
|
||||
#define addr_set_aud_left 0x98c
|
||||
|
@ -331,27 +331,27 @@ class MovieInputs : public Serializable
|
|||
#define addr_set_gdata2 0x9a8
|
||||
#define addr_set_gcol3 0x9ac
|
||||
#define addr_pick_continue 0x9be
|
||||
#define addr_main_start 0xa00
|
||||
#define addr_aud_bank_setup 0xa0c
|
||||
#define addr_tg0 0xa24
|
||||
#define addr_title_again 0xa3b
|
||||
#define addr_wait_cnt 0xa77
|
||||
// #define addr_main_start 0xa00
|
||||
// #define addr_aud_bank_setup 0xa0c
|
||||
// #define addr_tg0 0xa24
|
||||
// #define addr_title_again 0xa3b
|
||||
// #define addr_wait_cnt 0xa77
|
||||
#define addr_end_lines 0xa80
|
||||
#define addr_set_aud_endlines 0xa80
|
||||
#define addr_set_overscan_size 0xa9a
|
||||
#define addr_set_vblank_size 0xab0
|
||||
#define addr_pick_extra_lines 0xab9
|
||||
#define addr_pick_transport 0xac6
|
||||
#define addr_wait_lines 0xac9
|
||||
#define addr_transport_done1 0xada
|
||||
#define addr_draw_title 0xb00
|
||||
// #define addr_wait_lines 0xac9
|
||||
// #define addr_transport_done1 0xada
|
||||
// #define addr_draw_title 0xb00
|
||||
#define addr_title_loop 0xb50
|
||||
#define addr_black_bar 0xb52
|
||||
#define addr_animate_bar1 0xb58
|
||||
#define addr_animate_bar_again1 0xb5a
|
||||
#define addr_animate_dex1 0xb65
|
||||
// #define addr_black_bar 0xb52
|
||||
// #define addr_animate_bar1 0xb58
|
||||
// #define addr_animate_bar_again1 0xb5a
|
||||
// #define addr_animate_dex1 0xb65
|
||||
#define addr_audio_bank 0xb80
|
||||
#define addr_reset_loop 0xbfa
|
||||
// #define addr_reset_loop 0xbfa
|
||||
|
||||
// scale adjustments, automatically generated
|
||||
static constexpr uInt8 scale0[16] = {
|
||||
|
@ -480,7 +480,7 @@ static constexpr uInt8 brightLabelEven[] = {
|
|||
0, 49, 48, 12, 96,
|
||||
6, 140, 231, 96, 0,
|
||||
0, 225, 48, 12, 96,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
|
@ -497,7 +497,7 @@ static constexpr uInt8 brightLabelOdd[] = {
|
|||
0, 113, 48, 12, 96,
|
||||
7, 142, 127, 96, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
|
@ -514,7 +514,7 @@ static constexpr uInt8 volumeLabelEven[] = {
|
|||
0, 12, 192, 15, 192,
|
||||
30, 112, 119, 176, 0,
|
||||
0, 7, 252, 12, 254,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
|
@ -531,7 +531,7 @@ static constexpr uInt8 volumeLabelOdd[] = {
|
|||
0, 14, 192, 13, 192,
|
||||
14, 224, 62, 48, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
|
||||
#include "System.hxx"
|
||||
#include "Control.hxx"
|
||||
|
@ -107,10 +108,10 @@ string Controller::getName(const Type type)
|
|||
static const std::array<string, int(Controller::Type::LastType)> NAMES =
|
||||
{
|
||||
"Unknown",
|
||||
"AmigaMouse", "AtariMouse", "AtariVox", "BoosterGrip", "CompuMate",
|
||||
"Driving", "Sega Genesis", "Joystick", "Keyboard", "KidVid", "MindLink",
|
||||
"Paddles", "Paddles_IAxis", "Paddles_IAxDr", "SaveKey", "TrakBall",
|
||||
"Lightgun", "QuadTari"
|
||||
"Amiga mouse", "Atari mouse", "AtariVox", "Booster Grip", "CompuMate",
|
||||
"Driving", "Sega Genesis", "Joystick", "Keyboard", "Kid Vid", "MindLink",
|
||||
"Paddles", "Paddles_IAxis", "Paddles_IAxDr", "SaveKey", "Trak-Ball",
|
||||
"Light Gun", "QuadTari"
|
||||
};
|
||||
|
||||
return NAMES[int(type)];
|
||||
|
@ -148,6 +149,41 @@ Controller::Type Controller::getType(const string& propName)
|
|||
return Type::Unknown;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Controller::setDigitalDeadZone(int deadZone)
|
||||
{
|
||||
DIGITAL_DEAD_ZONE = digitalDeadZoneValue(deadZone);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
int Controller::digitalDeadZoneValue(int deadZone)
|
||||
{
|
||||
deadZone = BSPF::clamp(deadZone, MIN_DIGITAL_DEADZONE, MAX_DIGITAL_DEADZONE);
|
||||
|
||||
return 3200 + deadZone * 1000;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Controller::setAnalogDeadZone(int deadZone)
|
||||
{
|
||||
ANALOG_DEAD_ZONE = analogDeadZoneValue(deadZone);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
int Controller::analogDeadZoneValue(int deadZone)
|
||||
{
|
||||
deadZone = BSPF::clamp(deadZone, MIN_ANALOG_DEADZONE, MAX_ANALOG_DEADZONE);
|
||||
|
||||
return deadZone * std::round(32768 / 2. / MAX_DIGITAL_DEADZONE);
|
||||
}
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Controller::setMouseSensitivity(int sensitivity)
|
||||
{
|
||||
MOUSE_SENSITIVITY = BSPF::clamp(sensitivity, MIN_MOUSE_SENSE, MAX_MOUSE_SENSE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Controller::setAutoFireRate(int rate, bool isNTSC)
|
||||
{
|
||||
|
@ -156,5 +192,7 @@ void Controller::setAutoFireRate(int rate, bool isNTSC)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
int Controller::DIGITAL_DEAD_ZONE = 3200;
|
||||
int Controller::ANALOG_DEAD_ZONE = 0;
|
||||
int Controller::MOUSE_SENSITIVITY = -1;
|
||||
int Controller::AUTO_FIRE_RATE = 0;
|
||||
|
||||
|
|
|
@ -71,6 +71,13 @@ class Controller : public Serializable
|
|||
friend class ControllerLowLevel;
|
||||
|
||||
public:
|
||||
static constexpr int MIN_DIGITAL_DEADZONE = 0;
|
||||
static constexpr int MAX_DIGITAL_DEADZONE = 29;
|
||||
static constexpr int MIN_ANALOG_DEADZONE = 0;
|
||||
static constexpr int MAX_ANALOG_DEADZONE = 29;
|
||||
static constexpr int MIN_MOUSE_SENSE = 1;
|
||||
static constexpr int MAX_MOUSE_SENSE = 20;
|
||||
|
||||
/**
|
||||
Enumeration of the controller jacks
|
||||
*/
|
||||
|
@ -273,6 +280,43 @@ class Controller : public Serializable
|
|||
*/
|
||||
static Type getType(const string& propName);
|
||||
|
||||
/**
|
||||
Sets the dead zone amount for real analog joysticks.
|
||||
|
||||
@param deadZone Value from 0 to 29
|
||||
*/
|
||||
static void setDigitalDeadZone(int deadZone);
|
||||
|
||||
/**
|
||||
Sets the dead zone for analog paddles.
|
||||
|
||||
@param deadZone Value from 0 to 29
|
||||
*/
|
||||
static void setAnalogDeadZone(int deadZone);
|
||||
|
||||
/**
|
||||
Retrieves the effective digital dead zone value
|
||||
*/
|
||||
static int digitalDeadZoneValue(int deadZone);
|
||||
|
||||
/**
|
||||
Retrieves the effective analog dead zone value
|
||||
*/
|
||||
static int analogDeadZoneValue(int deadZone);
|
||||
|
||||
inline static int digitalDeadZone() { return DIGITAL_DEAD_ZONE; }
|
||||
|
||||
inline static int analogDeadZone() { return ANALOG_DEAD_ZONE; }
|
||||
|
||||
/**
|
||||
Sets the sensitivity for analog emulation movement
|
||||
using a mouse.
|
||||
|
||||
@param sensitivity Value from 1 to MAX_MOUSE_SENSE, with larger
|
||||
values causing more movement
|
||||
*/
|
||||
static void setMouseSensitivity(int sensitivity);
|
||||
|
||||
/**
|
||||
Sets the auto fire rate. 0 disables auto fire.
|
||||
|
||||
|
@ -366,6 +410,14 @@ class Controller : public Serializable
|
|||
/// The callback that is dispatched whenver an analog pin has changed
|
||||
onAnalogPinUpdateCallback myOnAnalogPinUpdateCallback{nullptr};
|
||||
|
||||
/// Defines the dead zone of analog joysticks for digital Atari controllers
|
||||
static int DIGITAL_DEAD_ZONE;
|
||||
|
||||
/// Defines the dead zone of analog joysticks for analog Atari controllers
|
||||
static int ANALOG_DEAD_ZONE;
|
||||
|
||||
static int MOUSE_SENSITIVITY;
|
||||
|
||||
/// Defines the speed of the auto fire
|
||||
static int AUTO_FIRE_RATE;
|
||||
|
||||
|
|
|
@ -86,8 +86,10 @@ Controller::Type ControllerDetector::autodetectPort(
|
|||
{
|
||||
if(usesPaddle(image, size, port, settings))
|
||||
type = Controller::Type::Paddles;
|
||||
else if(isProbablyKidVid(image, size, port))
|
||||
type = Controller::Type::KidVid;
|
||||
}
|
||||
// TODO: BOOSTERGRIP, DRIVING, MINDLINK, ATARIVOX, KIDVID
|
||||
// TODO: BOOSTERGRIP, DRIVING, COMPUMATE, MINDLINK, ATARIVOX
|
||||
// not detectable: PADDLES_IAXIS, PADDLES_IAXDR
|
||||
return type;
|
||||
}
|
||||
|
@ -728,3 +730,17 @@ bool ControllerDetector::isProbablyQuadTari(const ByteBuffer& image, size_t size
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool ControllerDetector::isProbablyKidVid(const ByteBuffer& image, size_t size,
|
||||
Controller::Jack port)
|
||||
{
|
||||
if(port == Controller::Jack::Right)
|
||||
{
|
||||
const int SIG_SIZE = 5;
|
||||
uInt8 signature[SIG_SIZE] = {0xA9, 0x03, 0x8D, 0x81, 0x02};
|
||||
|
||||
return searchForBytes(image, size, signature, SIG_SIZE);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -125,6 +125,9 @@ class ControllerDetector
|
|||
static bool isProbablyQuadTari(const ByteBuffer& image, size_t size,
|
||||
Controller::Jack port);
|
||||
|
||||
// Returns true if a Kid Vid code pattern is found.
|
||||
static bool isProbablyKidVid(const ByteBuffer& image, size_t size,
|
||||
Controller::Jack port);
|
||||
private:
|
||||
// Following constructors and assignment operators not supported
|
||||
ControllerDetector() = delete;
|
||||
|
|
|
@ -223,7 +223,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "0dfbdadf8f1bc718e7e1bb3ccd5fef3d", "", "", "Mr. Pac-Man (New start tune) (El Destructo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "0e0808227ef41f6825c06f25082c2e56", "", "", "Candi (Hack) [a]", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Only player 1 supported\",\"score_addresses\":[\"0xe6\",\"0xe8\"],\"variations_address\":\"0xdc\",\"variations_bcd\":false,\"variations_bcd_A\":false,\"variations_count\":112,\"variations_zero_based\":true}", "" },
|
||||
{ "0e08cd2c5bcf11c6a7e5a009a7715b6a", "", "", "Boing! (PD) [a1]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "0e224ea74310da4e7e2103400eb1b4bf", "Atari, Peter C. Niday, Gary Shannon, Howard Scott Warshaw", "", "Mind Maze (10-10-1984) (Atari) (Prototype)", "Uses the MindLink controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/mindmaze/mindmaze.htm" },
|
||||
{ "0e224ea74310da4e7e2103400eb1b4bf", "Atari, Peter C. Niday, Gary Shannon, Howard Scott Warshaw", "", "Mind Maze (10-10-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/mindmaze/mindmaze.htm" },
|
||||
{ "0e23d0ed4c33b2011ab4cc93a7619683", "Thomas Jentzsch", "", "Centipede - Amiga Mouse Hack v1.4 (PAL60) (Half-Speed) (TJ)", "Uses Amiga Mouse Controller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Variations cannot be defined\",\"score_addresses\":[\"0xf4\",\"0xf5\",\"0xf6\"],\"score_digits\":6,\"variations_count\":1}", "https://atariage.com/store/index.php?l=product_detail&p=1180" },
|
||||
{ "0e4b2b6e014a93ef8be896823da0d4ec", "", "", "Skiing (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "0e713d4e272ea7322c5b27d645f56dd0", "Home Vision - Gem International Corp. - VDI", "VCS83105", "Panda Chase (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -268,7 +268,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "10c47acca2ecd212b900ad3cf6942dbb", "Atari - Axlon, Tod Frye - Heuristica, Agustin Ortiz", "CX26169", "Shooting Arcade (03-07-1989) (Atari) (Prototype) [a4]", "Uses the Light Gun Controller (left only)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/shootingarcade/shootingarcade.htm" },
|
||||
{ "10c8cfd8c37522f11d47540ff024e5f9", "Canal 3 - Intellivision", "C 3016", "Demon Attack (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x81\",\"0x83\",\"0x85\"],\"score_digits\":6,\"special_address\":\"0x80\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_address\":\"0xea\",\"variations_count\":10}", "" },
|
||||
{ "10eae73a07b3da044b72473d8d366267", "Funvision - Fund. Int'l Co.", "", "Karate (1982) (Funvision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "10f0ecaf962aef1fc28abed870b01b65", "Atari, Paul Donaldson", "", "Bionic Breakthrough (06-22-1984) (Atari) (Prototype)", "Uses the Mindlink Controller", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/bionic/bionic.htm" },
|
||||
{ "10f0ecaf962aef1fc28abed870b01b65", "Atari, Paul Donaldson", "", "Bionic Breakthrough (06-22-1984) (Atari) (Prototype)", "Uses MindLink Controller", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/bionic/bionic.htm" },
|
||||
{ "10f62443f1ae087dc588a77f9e8f43e9", "Atari, Carla Meninsky", "CX2637, CX2637P", "Dodge 'Em (1980) (Atari) (PAL) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "110ac8ecaf1b69f41bc94c59dfcb8b2d", "", "", "Demon Attack (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x81\",\"0x83\",\"0x85\"],\"score_digits\":6,\"special_address\":\"0x80\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_address\":\"0xea\",\"variations_count\":10}", "" },
|
||||
{ "111029770226b319524134193886a10e", "Hozer Video Games", "", "Gunfight 2600 - One Limit Reached! (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -880,7 +880,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "3d48b8b586a09bdbf49f1a016bf4d29a", "Video Game Cartridge - Ariola", "TP-606", "Hole Hunter (Video Game Cartridge)", "AKA Topy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "3d6fc7a19be76d808aa233415cb583fc", "CCE", "C-833", "Target Practice (1983) (CCE)", "AKA Carnival", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "3d7749fb9c2f91a276dfe494495234c5", "Jone Yuan Telephonic Enterprise Co", "", "Checkers (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "3d7aad37c55692814211c8b590a0334c", "Atari, Dan Oliver", "", "Telepathy (1983) (Atari) (Prototype)", "Uses both left joystick and right Mindlink controllers (press Fire on respective controller to begin)", "Prototype", "", "", "", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "78", "", "", "", "", "", "http://www.atariprotos.com/2600/software/telepathy/telepathy.htm" },
|
||||
{ "3d7aad37c55692814211c8b590a0334c", "Atari, Dan Oliver", "", "Telepathy (1983) (Atari) (Prototype)", "Uses both left joystick and right MindLink controllers (press Fire on respective controller to begin)", "Prototype", "", "", "", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "78", "", "", "", "", "", "http://www.atariprotos.com/2600/software/telepathy/telepathy.htm" },
|
||||
{ "3d8a2d6493123a53ade45e3e2c5cafa0", "Atari, Jim Huether - Sears", "CX2629 - 6-99843, 49-75118", "Sky Diver (1979) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "3d934bb980e2e63e1ead3e7756928ccd", "Activision, Steve Cartwright - Ariola", "EAX-017, EAX-017-04I - 711 017-720", "MegaMania (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xdb\",\"0xdc\",\"0xdd\"],\"score_digits\":6,\"variations_address\":\"0x80\",\"variations_count\":4,\"variations_zero_based\":true}", "" },
|
||||
{ "3d9c2fccf8b11630762ff00811c19277", "", "", "Challenge of.... Nexar, The (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -1168,7 +1168,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "524693b337f7ecc9e8b9126e04a232af", "", "", "Euchre (19-08-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "5256f68d1491986aae5cfdff539bfeb5", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-26-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/moonpatrol/moonpatrol.htm" },
|
||||
{ "525ea747d746f3e80e3027720e1fa7ac", "Activision, Garry Kitchen - Ariola", "EAZ-032 - 771 032-712", "Pressure Cooker (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "525f2dfc8b21b0186cff2568e0509bfc", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}", "" },
|
||||
{ "525f2dfc8b21b0186cff2568e0509bfc", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}", "" },
|
||||
{ "52615ae358a68de6e76467e95eb404c7", "", "", "DJdsl-wopd (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "", "" },
|
||||
{ "528400fad9a77fd5ad7fc5fdc2b7d69d", "Starpath Corporation, Stephen H. Landrum, Jon Leupp", "11 AR-4201", "Sword of Saros (1983) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "52a0003efb3b1c49fcde4dbc2c685d8f", "Atari, Alan Miller - Sears", "CX2641 - 99807, 49-75105", "Surround (1977) (Atari) (4K) [a]", "", "", "", "", "2K", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -2246,7 +2246,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "a1ca372388b6465a693e4626cc98b865", "Quelle", "176.543 7", "Der Vielfrass (1983) (Quelle) (PAL)", "AKA Fast Food", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a1ead9c181d67859aa93c44e40f1709c", "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds", "", "Tax Avoiders (1986) (American Videogame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a1f9159121142d42e63e6fb807d337aa", "Quelle - Otto Versand", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a204cd4fb1944c86e800120706512a64", "Coleco, Rob Harris", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Controller", "", "", "", "", "", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a204cd4fb1944c86e800120706512a64", "Coleco, Rob Harris", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Voice Module", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle - Otto Versand", "719.383 2 - 649635, 781393, 781784, 986404", "Motocross (1983) (Quelle) (PAL)", "AKA Motorcross", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "a20d931a8fddcd6f6116ed21ff5c4832", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "", "" },
|
||||
{ "a2170318a8ef4b50a1b1d38567c220d6", "Amiga - Video Soft", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a1]", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/surfsup/surfsup.htm" },
|
||||
|
@ -2391,7 +2391,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "ac3dd22dd945724be705ddd2785487c2", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (06-15-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/moonpatrol/moonpatrol.htm" },
|
||||
{ "ac53b83e1b57a601eeae9d3ce1b4a458", "Retroactive", "", "Qb (2.15) (Retroactive) (NTSC)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}", "https://atariage.com/store/index.php?l=product_detail&p=926" },
|
||||
{ "ac5f78bae0638cf3f2a0c8d07eb4df69", "", "", "Minesweeper (V.99) (Soren Gust) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ac7c2260378975614192ca2bc3d20e0b", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}", "" },
|
||||
{ "ac7c2260378975614192ca2bc3d20e0b", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}", "" },
|
||||
{ "ac9adbd6de786a242e19d4bec527982b", "Activision, Alan Miller - Ariola", "EAG-012-04I, EAX-012, EAX-012-04B - 711 012-720", "Ice Hockey (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "aca09ffea77174b148b96b205109db4d", "Activision, Alan Miller", "AG-007, CAG-007", "Tennis (1981) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "acaa27d214039d89d7031609aafa55c3", "", "", "Sprite Demo 6 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -3285,7 +3285,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "ee456542b93fa8d7e6a8c689b5a0413c", "", "", "Chronocolor Donkey Kong Clean (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ee4c186123d31a279ed7a84d3578df23", "Atari, Carol Shaw, Nick 'Sandy Maiwald' Turner", "CX2608", "Super Breakout (1982 - 1981) (Atari) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "01 45", "", "", "", "", "{\"score_addresses\":[\"0xdc\",\"0xdd\"],\"variations_address\":\"0xc0\",\"variations_count\":9}", "" },
|
||||
{ "ee659ae50e9df886ac4f8d7ad10d046a", "Exus Corporation", "", "Video Reflex (1983) (Exus)", "AKA Foot Craz", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ee6665683ebdb539e89ba620981cb0f6", "Coleco", "2658", "Berenstain Bears (1983) (Coleco)", "Uses the KidVid Controller", "Unbelievably Rare", "", "", "", "A", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ee6665683ebdb539e89ba620981cb0f6", "Coleco", "2658", "Berenstain Bears (1983) (Coleco)", "Uses the Kid Vid Voice Module", "Unbelievably Rare", "", "", "", "A", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ee67dc0b01746372d2b983d88f48e24f", "", "", "Scroller Demo (02-01-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "ee681f566aad6c07c61bbbfc66d74a27", "Activision", "", "Unknown Activision Game (10-29-1982) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/unknown1/unknown1.htm" },
|
||||
{ "ee6cbedf6c0aac90faa0a8dbc093ffbe", "CCE", "", "My Golf (CCE) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -3315,7 +3315,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
|
|||
{ "f04ee80011d95798006378643650aaa7", "Atari, Bill Aspromonte, John Russell, Michael Sierchio, Robert Zdybel", "CX26114", "Pigs in Space (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/pigsinspace/pigsinspace.htm" },
|
||||
{ "f0510abbfbe24ead552e92e3841f63f3", "Thomas Jentzsch", "", "Reactor - Atari Mouse Hack v1.3 (NTSC) (Full-Speed) (TJ)", "Uses Atari Mouse Controller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=1186" },
|
||||
{ "f0536303f49006806bac3aec15738336", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (4 of 4) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "f0541d2f7cda5ec7bab6d62b6128b823", "Atari, Paul Donaldson", "", "Bionic Breakthrough (1984) (Atari) (Prototype)", "Uses Mindlink Controller (left only)", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/bionic/bionic.htm" },
|
||||
{ "f0541d2f7cda5ec7bab6d62b6128b823", "Atari, Paul Donaldson", "", "Bionic Breakthrough (1984) (Atari) (Prototype)", "Uses MindLink Controller", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://www.atariprotos.com/2600/software/bionic/bionic.htm" },
|
||||
{ "f060826626aac9e0d8cda0282f4b7fc3", "Atari, David Crane - Sears", "CX2605 - 6-99822, 49-75109", "Outlaw (1978) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "f0631c6675033428238408885d7e4fde", "Paul Slocum", "", "Test Cart (2002) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "", "https://atariage.com/store/index.php?l=product_detail&p=102" },
|
||||
{ "f066bea7ab0a37b83c83c924a87c5b67", "", "", "Air Raiders (1982) (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
|
|
@ -147,7 +147,9 @@ class Event
|
|||
HighScoresMenuMode,
|
||||
// Input settings
|
||||
DecreaseDeadzone, IncreaseDeadzone,
|
||||
DecAnalogDeadzone, IncAnalogDeadzone,
|
||||
DecAnalogSense, IncAnalogSense,
|
||||
DecAnalogLinear, IncAnalogLinear,
|
||||
DecDejtterAveraging, IncDejtterAveraging,
|
||||
DecDejtterReaction, IncDejtterReaction,
|
||||
DecDigitalSense, IncDigitalSense,
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "OSystem.hxx"
|
||||
#include "Joystick.hxx"
|
||||
#include "Paddles.hxx"
|
||||
#include "MindLink.hxx"
|
||||
#include "Lightgun.hxx"
|
||||
#include "PointingDevice.hxx"
|
||||
#include "Driving.hxx"
|
||||
|
@ -57,7 +58,7 @@
|
|||
#include "DebuggerParser.hxx"
|
||||
#endif
|
||||
#ifdef GUI_SUPPORT
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "CommandMenu.hxx"
|
||||
#include "HighScoresMenu.hxx"
|
||||
#include "MessageMenu.hxx"
|
||||
|
@ -98,11 +99,14 @@ void EventHandler::initialize()
|
|||
setActionMappings(EventMode::kEmulationMode);
|
||||
setActionMappings(EventMode::kMenuMode);
|
||||
|
||||
Joystick::setDeadZone(myOSystem.settings().getInt("joydeadzone"));
|
||||
Controller::setDigitalDeadZone(myOSystem.settings().getInt("joydeadzone"));
|
||||
Controller::setAnalogDeadZone(myOSystem.settings().getInt("adeadzone"));
|
||||
Paddles::setAnalogLinearity(myOSystem.settings().getInt("plinear"));
|
||||
Paddles::setDejitterDiff(myOSystem.settings().getInt("dejitter.diff"));
|
||||
Paddles::setDejitterBase(myOSystem.settings().getInt("dejitter.base"));
|
||||
Paddles::setDejitterDiff(myOSystem.settings().getInt("dejitter.diff"));
|
||||
Paddles::setDigitalSensitivity(myOSystem.settings().getInt("dsense"));
|
||||
Paddles::setMouseSensitivity(myOSystem.settings().getInt("msense"));
|
||||
Controller::setMouseSensitivity(myOSystem.settings().getInt("msense"));
|
||||
PointingDevice::setSensitivity(myOSystem.settings().getInt("tsense"));
|
||||
Driving::setSensitivity(myOSystem.settings().getInt("dcsense"));
|
||||
Controller::setAutoFireRate(myOSystem.settings().getInt("autofirerate"));
|
||||
|
@ -455,7 +459,9 @@ bool EventHandler::skipInputSetting() const
|
|||
&& (myAdjustSetting == AdjustSetting::DEADZONE
|
||||
|| myAdjustSetting == AdjustSetting::FOUR_DIRECTIONS))
|
||||
|| (!paddle
|
||||
&& (myAdjustSetting == AdjustSetting::ANALOG_SENSITIVITY
|
||||
&& (myAdjustSetting == AdjustSetting::ANALOG_DEADZONE
|
||||
|| myAdjustSetting == AdjustSetting::ANALOG_SENSITIVITY
|
||||
|| myAdjustSetting == AdjustSetting::ANALOG_LINEARITY
|
||||
|| myAdjustSetting == AdjustSetting::DEJITTER_AVERAGING
|
||||
|| myAdjustSetting == AdjustSetting::DEJITTER_REACTION
|
||||
|| myAdjustSetting == AdjustSetting::DIGITAL_SENSITIVITY
|
||||
|
@ -590,8 +596,10 @@ AdjustFunction EventHandler::getAdjustSetting(AdjustSetting setting)
|
|||
std::bind(&Console::toggleInter, &myOSystem.console(), _1),
|
||||
|
||||
// *** Input settings ***
|
||||
std::bind(&PhysicalJoystickHandler::changeDeadzone, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changeDigitalDeadZone, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changeAnalogPaddleDeadZone, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changeAnalogPaddleSensitivity, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changeAnalogPaddleLinearity, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changePaddleDejitterAveraging, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changePaddleDejitterReaction, &joyHandler(), _1),
|
||||
std::bind(&PhysicalJoystickHandler::changeDigitalPaddleSensitivity, &joyHandler(), _1),
|
||||
|
@ -1356,7 +1364,7 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated)
|
|||
case Event::DecreaseDeadzone:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeDeadzone(-1);
|
||||
myPJoyHandler->changeDigitalDeadZone(-1);
|
||||
myAdjustSetting = AdjustSetting::DEADZONE;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
|
@ -1365,17 +1373,35 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated)
|
|||
case Event::IncreaseDeadzone:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeDeadzone(+1);
|
||||
myPJoyHandler->changeDigitalDeadZone(+1);
|
||||
myAdjustSetting = AdjustSetting::DEADZONE;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::DecAnalogDeadzone:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleDeadZone(-1);
|
||||
myAdjustSetting = AdjustSetting::ANALOG_DEADZONE;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::IncAnalogDeadzone:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleDeadZone(+1);
|
||||
myAdjustSetting = AdjustSetting::ANALOG_DEADZONE;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::DecAnalogSense:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleSensitivity(-1);
|
||||
myAdjustSetting = AdjustSetting::PADDLE_SENSITIVITY;
|
||||
myAdjustSetting = AdjustSetting::ANALOG_SENSITIVITY;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
@ -1384,10 +1410,27 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated)
|
|||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleSensitivity(+1);
|
||||
myAdjustSetting = AdjustSetting::PADDLE_SENSITIVITY;
|
||||
myAdjustSetting = AdjustSetting::ANALOG_SENSITIVITY;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::DecAnalogLinear:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleLinearity(-1);
|
||||
myAdjustSetting = AdjustSetting::ANALOG_LINEARITY;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::IncAnalogLinear:
|
||||
if(pressed)
|
||||
{
|
||||
myPJoyHandler->changeAnalogPaddleLinearity(+1);
|
||||
myAdjustSetting = AdjustSetting::ANALOG_LINEARITY;
|
||||
myAdjustActive = true;
|
||||
}
|
||||
return;
|
||||
|
||||
case Event::DecDejtterAveraging:
|
||||
|
@ -2991,7 +3034,7 @@ void EventHandler::setState(EventHandlerState state)
|
|||
|
||||
#ifdef GUI_SUPPORT
|
||||
case EventHandlerState::OPTIONSMENU:
|
||||
myOverlay = &myOSystem.menu();
|
||||
myOverlay = &myOSystem.optionsMenu();
|
||||
enableTextEvents(true);
|
||||
break;
|
||||
|
||||
|
@ -3040,11 +3083,11 @@ void EventHandler::setState(EventHandlerState state)
|
|||
}
|
||||
|
||||
// Inform various subsystems about the new state
|
||||
myOSystem.stateChanged(myState);
|
||||
myOSystem.frameBuffer().stateChanged(myState);
|
||||
myOSystem.frameBuffer().setCursorState();
|
||||
myOSystem.stateChanged(myState); // does nothing
|
||||
myOSystem.frameBuffer().stateChanged(myState); // ignores state
|
||||
myOSystem.frameBuffer().setCursorState(); // en/disables cursor for UI and emulation states
|
||||
if(myOSystem.hasConsole())
|
||||
myOSystem.console().stateChanged(myState);
|
||||
myOSystem.console().stateChanged(myState); // does nothing
|
||||
|
||||
// Sometimes an extraneous mouse motion event is generated
|
||||
// after a state change, which should be supressed
|
||||
|
@ -3279,11 +3322,14 @@ EventHandler::EmulActionList EventHandler::ourEmulActionList = { {
|
|||
{ Event::VolumeDecrease, "Decrease volume", "" },
|
||||
{ Event::VolumeIncrease, "Increase volume", "" },
|
||||
|
||||
|
||||
{ Event::DecreaseDeadzone, "Decrease joystick deadzone", "" },
|
||||
{ Event::IncreaseDeadzone, "Increase joystick deadzone", "" },
|
||||
{ Event::DecreaseDeadzone, "Decrease digital dead zone", "" },
|
||||
{ Event::IncreaseDeadzone, "Increase digital dead zone", "" },
|
||||
{ Event::DecAnalogDeadzone, "Decrease analog dead zone", "" },
|
||||
{ Event::IncAnalogDeadzone, "Increase analog dead zone", "" },
|
||||
{ Event::DecAnalogSense, "Decrease analog paddle sensitivity", "" },
|
||||
{ Event::IncAnalogSense, "Increase analog paddle sensitivity", "" },
|
||||
{ Event::DecAnalogLinear, "Decrease analog paddle linearity", "" },
|
||||
{ Event::IncAnalogLinear, "Increase analog paddle linearity", "" },
|
||||
{ Event::DecDejtterAveraging, "Decrease paddle dejitter averaging", "" },
|
||||
{ Event::IncDejtterAveraging, "Increase paddle dejitter averaging", "" },
|
||||
{ Event::DecDejtterReaction, "Decrease paddle dejitter reaction", "" },
|
||||
|
@ -3467,7 +3513,9 @@ const Event::EventSet EventHandler::KeyboardEvents = {
|
|||
|
||||
const Event::EventSet EventHandler::DevicesEvents = {
|
||||
Event::DecreaseDeadzone, Event::IncreaseDeadzone,
|
||||
Event::DecAnalogDeadzone, Event::IncAnalogDeadzone,
|
||||
Event::DecAnalogSense, Event::IncAnalogSense,
|
||||
Event::DecAnalogLinear, Event::IncAnalogLinear,
|
||||
Event::DecDejtterAveraging, Event::IncDejtterAveraging,
|
||||
Event::DecDejtterReaction, Event::IncDejtterReaction,
|
||||
Event::DecDigitalSense, Event::IncDigitalSense,
|
||||
|
|
|
@ -473,7 +473,9 @@ class EventHandler
|
|||
INTERPOLATION,
|
||||
// *** Input group ***
|
||||
DEADZONE,
|
||||
ANALOG_DEADZONE,
|
||||
ANALOG_SENSITIVITY,
|
||||
ANALOG_LINEARITY,
|
||||
DEJITTER_AVERAGING,
|
||||
DEJITTER_REACTION,
|
||||
DIGITAL_SENSITIVITY,
|
||||
|
@ -645,7 +647,7 @@ class EventHandler
|
|||
#else
|
||||
REFRESH_SIZE = 0,
|
||||
#endif
|
||||
EMUL_ACTIONLIST_SIZE = 212 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
|
||||
EMUL_ACTIONLIST_SIZE = 216 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
|
||||
MENU_ACTIONLIST_SIZE = 19
|
||||
;
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
#include "ConsoleFont.hxx"
|
||||
#include "ConsoleBFont.hxx"
|
||||
#include "Launcher.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "CommandMenu.hxx"
|
||||
#include "HighScoresMenu.hxx"
|
||||
#include "MessageMenu.hxx"
|
||||
|
@ -379,19 +379,19 @@ void FrameBuffer::update(UpdateMode mode)
|
|||
#ifdef GUI_SUPPORT
|
||||
case EventHandlerState::OPTIONSMENU:
|
||||
{
|
||||
myOSystem.menu().tick();
|
||||
redraw |= myOSystem.menu().needsRedraw();
|
||||
myOSystem.optionsMenu().tick();
|
||||
redraw |= myOSystem.optionsMenu().needsRedraw();
|
||||
if(redraw)
|
||||
{
|
||||
clear();
|
||||
myTIASurface->render(true);
|
||||
myOSystem.menu().draw(forceRedraw);
|
||||
myOSystem.optionsMenu().draw(forceRedraw);
|
||||
}
|
||||
else if(rerender)
|
||||
{
|
||||
clear();
|
||||
myTIASurface->render(true);
|
||||
myOSystem.menu().render();
|
||||
myOSystem.optionsMenu().render();
|
||||
}
|
||||
break; // EventHandlerState::OPTIONSMENU
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ class Genesis : public Joystick
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "Genesis"; }
|
||||
string name() const override { return "Sega Genesis"; }
|
||||
|
||||
private:
|
||||
/**
|
||||
|
|
|
@ -157,20 +157,3 @@ bool Joystick::setMouseControl(
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Joystick::setDeadZone(int deadzone)
|
||||
{
|
||||
_DEAD_ZONE = deadZoneValue(deadzone);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
int Joystick::deadZoneValue(int deadzone)
|
||||
{
|
||||
deadzone = BSPF::clamp(deadzone, DEAD_ZONE_MIN, DEAD_ZONE_MAX);
|
||||
|
||||
return 3200 + deadzone * 1000;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
int Joystick::_DEAD_ZONE = 3200;
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
class Joystick : public Controller
|
||||
{
|
||||
public:
|
||||
static constexpr int DEAD_ZONE_MIN = 0;
|
||||
static constexpr int DEAD_ZONE_MAX = 29;
|
||||
|
||||
/**
|
||||
Create a new joystick controller plugged into the specified jack
|
||||
|
||||
|
@ -88,19 +85,6 @@ class Joystick : public Controller
|
|||
bool setMouseControl(
|
||||
Controller::Type xtype, int xid, Controller::Type ytype, int yid) override;
|
||||
|
||||
/**
|
||||
Sets the deadzone amount for real analog joysticks.
|
||||
Technically, this isn't really used by the Joystick class at all,
|
||||
but it seemed like the best place to put it.
|
||||
*/
|
||||
static void setDeadZone(int deadzone);
|
||||
|
||||
/**
|
||||
Retrieves the effective deadzone value
|
||||
*/
|
||||
static int deadZoneValue(int deadzone);
|
||||
inline static int deadzone() { return _DEAD_ZONE; }
|
||||
|
||||
protected:
|
||||
/**
|
||||
Update the button pin states.
|
||||
|
@ -123,8 +107,6 @@ class Joystick : public Controller
|
|||
// Controller to emulate in normal mouse axis mode
|
||||
int myControlID{-1};
|
||||
|
||||
static int _DEAD_ZONE;
|
||||
|
||||
private:
|
||||
/**
|
||||
Update the axes pin states according to the keyboard
|
||||
|
|
|
@ -66,7 +66,7 @@ class Lightgun : public Controller
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "Lightgun"; }
|
||||
string name() const override { return "Light Gun"; }
|
||||
|
||||
private:
|
||||
const FrameBuffer& myFrameBuffer;
|
||||
|
|
|
@ -22,10 +22,6 @@
|
|||
MindLink::MindLink(Jack jack, const Event& event, const System& system)
|
||||
: Controller(jack, event, system, Controller::Type::MindLink)
|
||||
{
|
||||
setPin(DigitalPin::One, true);
|
||||
setPin(DigitalPin::Two, true);
|
||||
setPin(DigitalPin::Three, true);
|
||||
setPin(DigitalPin::Four, true);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -39,19 +35,16 @@ void MindLink::update()
|
|||
if(!myMouseEnabled)
|
||||
return;
|
||||
|
||||
myMindlinkPos = (myMindlinkPos & 0x3fffffff) +
|
||||
(myEvent.get(Event::MouseAxisXMove) << 3);
|
||||
if(myMindlinkPos < 0x2800)
|
||||
myMindlinkPos = 0x2800;
|
||||
if(myMindlinkPos >= 0x3800)
|
||||
myMindlinkPos = 0x3800;
|
||||
|
||||
myMindlinkShift = 1;
|
||||
nextMindlinkBit();
|
||||
myMindlinkPos = BSPF::clamp((myMindlinkPos & ~CALIBRATE_FLAG) +
|
||||
myEvent.get(Event::MouseAxisXMove) * MOUSE_SENSITIVITY,
|
||||
MIN_POS, MAX_POS);
|
||||
|
||||
if(myEvent.get(Event::MouseButtonLeftValue) ||
|
||||
myEvent.get(Event::MouseButtonRightValue))
|
||||
myMindlinkPos |= 0x4000; // this bit starts a game
|
||||
myMindlinkPos = CALIBRATE_FLAG; // flag starts game & calibates
|
||||
|
||||
myMindlinkShift = 1; // start transfer with least significant bit
|
||||
nextMindlinkBit();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -63,8 +56,8 @@ void MindLink::nextMindlinkBit()
|
|||
setPin(DigitalPin::Four, false);
|
||||
if(myMindlinkPos & myMindlinkShift)
|
||||
setPin(DigitalPin::Four, true);
|
||||
myMindlinkShift <<= 1;
|
||||
}
|
||||
myMindlinkShift <<= 1; // next bit
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -79,3 +72,4 @@ bool MindLink::setMouseControl(
|
|||
(xid != -1 || yid != -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
the Stella core actually stores this information in boolean arrays
|
||||
addressable by DigitalPin number.
|
||||
|
||||
@author Stephen Anthony & z26 team
|
||||
@author Stephen Anthony, Thomas Jentzsch & z26 team
|
||||
*/
|
||||
class MindLink : public Controller
|
||||
{
|
||||
|
@ -104,10 +104,15 @@ class MindLink : public Controller
|
|||
private:
|
||||
void nextMindlinkBit();
|
||||
|
||||
// Range of valid values
|
||||
static constexpr int MIN_POS = 0x2700;
|
||||
static constexpr int MAX_POS = 0x3e00;
|
||||
static constexpr int CALIBRATE_FLAG = 0x8000; // this causes a left side calibration
|
||||
|
||||
private:
|
||||
// Position value in Mindlink controller
|
||||
// Gets transferred bitwise (16 bits)
|
||||
int myMindlinkPos{0x2800};
|
||||
int myMindlinkPos{MIN_POS};
|
||||
|
||||
// Which bit to transfer next
|
||||
int myMindlinkShift{1};
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "Debugger.hxx"
|
||||
#endif
|
||||
#ifdef GUI_SUPPORT
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "CommandMenu.hxx"
|
||||
#include "HighScoresMenu.hxx"
|
||||
#include "MessageMenu.hxx"
|
||||
|
@ -177,7 +177,7 @@ bool OSystem::initialize(const Settings::Options& options)
|
|||
|
||||
#ifdef GUI_SUPPORT
|
||||
// Create various subsystems (menu and launcher GUI objects, etc)
|
||||
myMenu = make_unique<Menu>(*this);
|
||||
myOptionsMenu = make_unique<OptionsMenu>(*this);
|
||||
myCommandMenu = make_unique<CommandMenu>(*this);
|
||||
myHighScoresManager = make_unique<HighScoresManager>(*this);
|
||||
myHighScoresMenu = make_unique<HighScoresMenu>(*this);
|
||||
|
@ -510,7 +510,7 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum,
|
|||
}
|
||||
// Check for first PlusROM start
|
||||
if(myConsole->cartridge().isPlusROM() &&
|
||||
settings().getString("plusroms.nick") == EmptyString)
|
||||
settings().getString("plusroms.id") == EmptyString)
|
||||
{
|
||||
myEventHandler->changeStateByEvent(Event::PlusRomsSetupMode);
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class AudioSettings;
|
|||
class CommandMenu;
|
||||
class HighScoresMenu;
|
||||
class Launcher;
|
||||
class Menu;
|
||||
class OptionsMenu;
|
||||
class MessageMenu;
|
||||
class PlusRomsMenu;
|
||||
class TimeMachine;
|
||||
|
@ -200,11 +200,11 @@ class OSystem
|
|||
|
||||
#ifdef GUI_SUPPORT
|
||||
/**
|
||||
Get the settings menu of the system.
|
||||
Get the option menu of the system.
|
||||
|
||||
@return The settings menu object
|
||||
@return The option menu object
|
||||
*/
|
||||
Menu& menu() const { return *myMenu; }
|
||||
OptionsMenu& optionsMenu() const { return *myOptionsMenu; }
|
||||
|
||||
/**
|
||||
Get the command menu of the system.
|
||||
|
@ -516,8 +516,8 @@ class OSystem
|
|||
#endif
|
||||
|
||||
#ifdef GUI_SUPPORT
|
||||
// Pointer to the Menu object
|
||||
unique_ptr<Menu> myMenu;
|
||||
// Pointer to the OptionMenu object
|
||||
unique_ptr<OptionsMenu> myOptionsMenu;
|
||||
|
||||
// Pointer to the CommandMenu object
|
||||
unique_ptr<CommandMenu> myCommandMenu;
|
||||
|
|
|
@ -25,8 +25,8 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
|
|||
bool swappaddle, bool swapaxis, bool swapdir, bool altmap)
|
||||
: Controller(jack, event, system, Controller::Type::Paddles)
|
||||
{
|
||||
// We must start with minimum resistance; see commit
|
||||
// 38b452e1a047a0dca38c5bcce7c271d40f76736e for more information
|
||||
// We must start with a physical valid resistance (e.g. 0);
|
||||
// see commit 38b452e1a047a0dca38c5bcce7c271d40f76736e for more information
|
||||
setPin(AnalogPin::Five, AnalogReadout::connectToVcc());
|
||||
setPin(AnalogPin::Nine, AnalogReadout::connectToVcc());
|
||||
|
||||
|
@ -195,10 +195,65 @@ void Paddles::update()
|
|||
setPin(DigitalPin::Three, !getAutoFireStateP1(firePressedB));
|
||||
}
|
||||
|
||||
AnalogReadout::Connection Paddles::getReadOut(int lastAxis, int& newAxis, int center)
|
||||
{
|
||||
const float range = ANALOG_RANGE - analogDeadZone() * 2;
|
||||
|
||||
// dead zone, ignore changes inside the dead zone
|
||||
if(newAxis > analogDeadZone())
|
||||
newAxis -= analogDeadZone();
|
||||
else if(newAxis < -analogDeadZone())
|
||||
newAxis += analogDeadZone();
|
||||
else
|
||||
newAxis = 0; // treat any dead zone value as zero
|
||||
|
||||
static constexpr std::array<float, MAX_DEJITTER - MIN_DEJITTER + 1> bFac = {
|
||||
// higher values mean more dejitter strength
|
||||
0.f, // off
|
||||
0.50f, 0.59f, 0.67f, 0.74f, 0.80f,
|
||||
0.85f, 0.89f, 0.92f, 0.94f, 0.95f
|
||||
};
|
||||
static constexpr std::array<float, MAX_DEJITTER - MIN_DEJITTER + 1> dFac = {
|
||||
// lower values mean more dejitter strength
|
||||
1.f, // off
|
||||
1.0f / 181, 1.0f / 256, 1.0f / 362, 1.0f / 512, 1.0f / 724,
|
||||
1.0f / 1024, 1.0f / 1448, 1.0f / 2048, 1.0f / 2896, 1.0f / 4096
|
||||
};
|
||||
const float baseFactor = bFac[DEJITTER_BASE];
|
||||
const float diffFactor = dFac[DEJITTER_DIFF];
|
||||
|
||||
// dejitter, suppress small changes only
|
||||
float dejitter = powf(baseFactor, std::abs(newAxis - lastAxis) * diffFactor);
|
||||
int newVal = newAxis * (1 - dejitter) + lastAxis * dejitter;
|
||||
|
||||
// only use new dejittered value for larger differences
|
||||
if(abs(newVal - newAxis) > 10)
|
||||
newAxis = newVal;
|
||||
|
||||
// apply linearity
|
||||
float linearVal = newAxis / (range / 2); // scale to -1.0..+1.0
|
||||
|
||||
if(newAxis >= 0)
|
||||
linearVal = powf(std::abs(linearVal), LINEARITY);
|
||||
else
|
||||
linearVal = -powf(std::abs(linearVal), LINEARITY);
|
||||
|
||||
newAxis = linearVal * (range / 2); // scale back to ANALOG_RANGE
|
||||
|
||||
// scale axis to range including dead zone
|
||||
const Int32 scaledAxis = newAxis * ANALOG_RANGE / range;
|
||||
|
||||
// scale result
|
||||
return AnalogReadout::connectToVcc(MAX_RESISTANCE *
|
||||
BSPF::clamp((ANALOG_MAX_VALUE - (scaledAxis * SENSITIVITY + center)) /
|
||||
float(ANALOG_RANGE), 0.F, 1.F));
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Paddles::updateAnalogAxes()
|
||||
{
|
||||
// Analog axis events from Stelladaptor-like devices
|
||||
// Analog axis events from Stelladaptor-like devices,
|
||||
// (which includes analog USB controllers)
|
||||
// These devices generate data in the range -32768 to 32767,
|
||||
// so we have to scale appropriately
|
||||
// Since these events are generated and stored indefinitely,
|
||||
|
@ -206,20 +261,6 @@ bool Paddles::updateAnalogAxes()
|
|||
// previous values by a pre-defined amount)
|
||||
// Otherwise, it would always override input from digital and mouse
|
||||
|
||||
static constexpr std::array<double, MAX_DEJITTER - MIN_DEJITTER + 1> bFac = {
|
||||
// higher values mean more dejitter strength
|
||||
0, // off
|
||||
0.50, 0.59, 0.67, 0.74, 0.80,
|
||||
0.85, 0.89, 0.92, 0.94, 0.95
|
||||
};
|
||||
static constexpr std::array<double, MAX_DEJITTER - MIN_DEJITTER + 1> dFac = {
|
||||
// lower values mean more dejitter strength
|
||||
1, // off
|
||||
1.0 / 181, 1.0 / 256, 1.0 / 362, 1.0 / 512, 1.0 / 724,
|
||||
1.0 / 1024, 1.0 / 1448, 1.0 / 2048, 1.0 / 2896, 1.0 / 4096
|
||||
};
|
||||
const double baseFactor = bFac[DEJITTER_BASE];
|
||||
const double diffFactor = dFac[DEJITTER_DIFF];
|
||||
|
||||
int sa_xaxis = myEvent.get(myAAxisValue);
|
||||
int sa_yaxis = myEvent.get(myBAxisValue);
|
||||
|
@ -227,31 +268,13 @@ bool Paddles::updateAnalogAxes()
|
|||
|
||||
if(abs(myLastAxisX - sa_xaxis) > 10)
|
||||
{
|
||||
// dejitter, suppress small changes only
|
||||
double dejitter = std::pow(baseFactor, abs(sa_xaxis - myLastAxisX) * diffFactor);
|
||||
int new_val = sa_xaxis * (1 - dejitter) + myLastAxisX * dejitter;
|
||||
|
||||
// only use new dejittered value for larger differences
|
||||
if(abs(new_val - sa_xaxis) > 10)
|
||||
sa_xaxis = new_val;
|
||||
|
||||
setPin(AnalogPin::Nine, AnalogReadout::connectToVcc(MAX_RESISTANCE *
|
||||
(BSPF::clamp(32768 - Int32(Int32(sa_xaxis) * SENSITIVITY + XCENTER), 0, 65536) / 65536.0)));
|
||||
setPin(AnalogPin::Nine, getReadOut(myLastAxisX, sa_xaxis, XCENTER));
|
||||
sa_changed = true;
|
||||
}
|
||||
|
||||
if(abs(myLastAxisY - sa_yaxis) > 10)
|
||||
{
|
||||
// dejitter, suppress small changes only
|
||||
double dejitter = std::pow(baseFactor, abs(sa_yaxis - myLastAxisY) * diffFactor);
|
||||
int new_val = sa_yaxis * (1 - dejitter) + myLastAxisY * dejitter;
|
||||
|
||||
// only use new dejittered value for larger differences
|
||||
if(abs(new_val - sa_yaxis) > 10)
|
||||
sa_yaxis = new_val;
|
||||
|
||||
setPin(AnalogPin::Five, AnalogReadout::connectToVcc(MAX_RESISTANCE *
|
||||
(BSPF::clamp(32768 - Int32(Int32(sa_yaxis) * SENSITIVITY + YCENTER), 0, 65536) / 65536.0)));
|
||||
setPin(AnalogPin::Five, getReadOut(myLastAxisY, sa_yaxis, YCENTER));
|
||||
sa_changed = true;
|
||||
}
|
||||
myLastAxisX = sa_xaxis;
|
||||
|
@ -271,6 +294,7 @@ void Paddles::updateMouse(bool& firePressedA, bool& firePressedB)
|
|||
myCharge[myMPaddleID] = BSPF::clamp(myCharge[myMPaddleID] -
|
||||
(myEvent.get(myAxisMouseMotion) * MOUSE_SENSITIVITY),
|
||||
TRIGMIN, TRIGRANGE);
|
||||
|
||||
if(myMPaddleID == 0)
|
||||
firePressedA = firePressedA
|
||||
|| myEvent.get(Event::MouseButtonLeftValue)
|
||||
|
@ -424,6 +448,11 @@ float Paddles::analogSensitivityValue(int sensitivity)
|
|||
static_cast<float>(BSPF::clamp(sensitivity, MIN_ANALOG_SENSE, MAX_ANALOG_SENSE)));
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Paddles::setAnalogLinearity(int linearity)
|
||||
{
|
||||
LINEARITY = 100.f / BSPF::clamp(linearity, MIN_ANALOG_LINEARITY, MAX_ANALOG_LINEARITY);
|
||||
}
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Paddles::setDejitterBase(int strength)
|
||||
{
|
||||
|
@ -443,12 +472,6 @@ void Paddles::setDigitalSensitivity(int sensitivity)
|
|||
DIGITAL_DISTANCE = 20 + (DIGITAL_SENSITIVITY << 3);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Paddles::setMouseSensitivity(int sensitivity)
|
||||
{
|
||||
MOUSE_SENSITIVITY = BSPF::clamp(sensitivity, MIN_MOUSE_SENSE, MAX_MOUSE_SENSE);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Paddles::setDigitalPaddleRange(int range)
|
||||
{
|
||||
|
@ -460,10 +483,10 @@ void Paddles::setDigitalPaddleRange(int range)
|
|||
int Paddles::XCENTER = 0;
|
||||
int Paddles::YCENTER = 0;
|
||||
float Paddles::SENSITIVITY = 1.0;
|
||||
|
||||
int Paddles::TRIGRANGE = Paddles::TRIGMAX;
|
||||
int Paddles::DIGITAL_SENSITIVITY = -1;
|
||||
int Paddles::DIGITAL_DISTANCE = -1;
|
||||
int Paddles::MOUSE_SENSITIVITY = -1;
|
||||
float Paddles::LINEARITY = 1.0;
|
||||
int Paddles::DEJITTER_BASE = 0;
|
||||
int Paddles::DEJITTER_DIFF = 0;
|
||||
int Paddles::TRIGRANGE = Paddles::TRIGMAX;
|
||||
|
||||
int Paddles::DIGITAL_SENSITIVITY = -1;
|
||||
int Paddles::DIGITAL_DISTANCE = -1;
|
||||
|
|
|
@ -48,15 +48,18 @@ class Paddles : public Controller
|
|||
~Paddles() override = default;
|
||||
|
||||
public:
|
||||
static constexpr int ANALOG_MIN_VALUE = -32768;
|
||||
static constexpr int ANALOG_MAX_VALUE = 32767;
|
||||
static constexpr int ANALOG_RANGE = ANALOG_MAX_VALUE - ANALOG_MIN_VALUE + 1;
|
||||
static constexpr float BASE_ANALOG_SENSE = 0.148643628F;
|
||||
static constexpr int MIN_ANALOG_SENSE = 0;
|
||||
static constexpr int MAX_ANALOG_SENSE = 30;
|
||||
static constexpr int MIN_ANALOG_LINEARITY = 25;
|
||||
static constexpr int MAX_ANALOG_LINEARITY = 100;
|
||||
static constexpr int MIN_ANALOG_CENTER = -10;
|
||||
static constexpr int MAX_ANALOG_CENTER = 30;
|
||||
static constexpr int MIN_DIGITAL_SENSE = 1;
|
||||
static constexpr int MAX_DIGITAL_SENSE = 20;
|
||||
static constexpr int MIN_MOUSE_SENSE = 1;
|
||||
static constexpr int MAX_MOUSE_SENSE = 20;
|
||||
static constexpr int MIN_DEJITTER = 0;
|
||||
static constexpr int MAX_DEJITTER = 10;
|
||||
static constexpr int MIN_MOUSE_RANGE = 1;
|
||||
|
@ -111,6 +114,13 @@ class Paddles : public Controller
|
|||
*/
|
||||
static void setAnalogYCenter(int ycenter);
|
||||
|
||||
/**
|
||||
Sets the linearity of analog paddles.
|
||||
|
||||
@param linearity Value from 25 to 100
|
||||
*/
|
||||
static void setAnalogLinearity(int linearity);
|
||||
|
||||
/**
|
||||
Sets the sensitivity for analog paddles.
|
||||
|
||||
|
@ -121,6 +131,7 @@ class Paddles : public Controller
|
|||
|
||||
static float analogSensitivityValue(int sensitivity);
|
||||
|
||||
|
||||
/**
|
||||
@param strength Value from 0 to 10
|
||||
*/
|
||||
|
@ -142,15 +153,6 @@ class Paddles : public Controller
|
|||
*/
|
||||
static void setDigitalSensitivity(int sensitivity);
|
||||
|
||||
/**
|
||||
Sets the sensitivity for analog emulation of paddle movement
|
||||
using a mouse.
|
||||
|
||||
@param sensitivity Value from 1 to MAX_MOUSE_SENSE, with larger
|
||||
values causing more movement
|
||||
*/
|
||||
static void setMouseSensitivity(int sensitivity);
|
||||
|
||||
/**
|
||||
Sets the maximum upper range for digital/mouse emulation of paddle
|
||||
movement (ie, a value of 50 means to only use 50% of the possible
|
||||
|
@ -192,17 +194,18 @@ class Paddles : public Controller
|
|||
|
||||
static int XCENTER;
|
||||
static int YCENTER;
|
||||
static float SENSITIVITY;
|
||||
static float SENSITIVITY, LINEARITY;
|
||||
|
||||
static int DIGITAL_SENSITIVITY, DIGITAL_DISTANCE;
|
||||
static int DEJITTER_BASE, DEJITTER_DIFF;
|
||||
static int MOUSE_SENSITIVITY;
|
||||
|
||||
/**
|
||||
Swap two events.
|
||||
*/
|
||||
void swapEvents(Event::Type& event1, Event::Type& event2);
|
||||
|
||||
AnalogReadout::Connection getReadOut(int lastAxis, int& newAxis, int center);
|
||||
|
||||
/**
|
||||
Update the axes pin state according to the events currently set.
|
||||
*/
|
||||
|
|
|
@ -326,7 +326,7 @@ void PlusROM::send()
|
|||
{
|
||||
#if defined(HTTP_LIB_SUPPORT)
|
||||
if (myPendingRequests.size() >= MAX_CONCURRENT_REQUESTS) {
|
||||
// Try to make room by cosuming any requests that have completed.
|
||||
// Try to make room by consuming any requests that have completed.
|
||||
receive();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "Logger.hxx"
|
||||
#include "AudioSettings.hxx"
|
||||
#include "PaletteHandler.hxx"
|
||||
#include "Joystick.hxx"
|
||||
#include "Paddles.hxx"
|
||||
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
|
@ -114,6 +115,8 @@ Settings::Settings()
|
|||
setPermanent("usemouse", "analog");
|
||||
setPermanent("grabmouse", "true");
|
||||
setPermanent("cursor", "2");
|
||||
setPermanent("adeadzone", "0");
|
||||
setPermanent("plinear", "100");
|
||||
setPermanent("dejitter.base", "0");
|
||||
setPermanent("dejitter.diff", "0");
|
||||
setPermanent("dsense", "10");
|
||||
|
@ -205,6 +208,7 @@ Settings::Settings()
|
|||
setPermanent("plr.bankrandom", "false");
|
||||
setPermanent("plr.ramrandom", "true");
|
||||
setPermanent("plr.cpurandom", "AXYP");
|
||||
setPermanent("plr.tiarandom", "true");
|
||||
setPermanent("plr.colorloss", "false");
|
||||
setPermanent("plr.tv.jitter", "true");
|
||||
setPermanent("plr.tv.jitter_recovery", "10");
|
||||
|
@ -224,6 +228,7 @@ Settings::Settings()
|
|||
setPermanent("dev.bankrandom", "true");
|
||||
setPermanent("dev.ramrandom", "true");
|
||||
setPermanent("dev.cpurandom", "SAXYP");
|
||||
setPermanent("dev.tiarandom", "true");
|
||||
setPermanent("dev.colorloss", "true");
|
||||
setPermanent("dev.tv.jitter", "true");
|
||||
setPermanent("dev.tv.jitter_recovery", "2");
|
||||
|
@ -354,26 +359,34 @@ void Settings::validate()
|
|||
AudioSettings::normalize(*this);
|
||||
#endif
|
||||
|
||||
i = getInt("joydeadzone");
|
||||
if(i < 0) setValue("joydeadzone", "0");
|
||||
else if(i > 29) setValue("joydeadzone", "29");
|
||||
setValue("joydeadzone", BSPF::clamp(getInt("joydeadzone"),
|
||||
Controller::MIN_DIGITAL_DEADZONE, Joystick::MAX_DIGITAL_DEADZONE));
|
||||
|
||||
setValue("adeadzone", BSPF::clamp(getInt("adeadzone"),
|
||||
Controller::MIN_ANALOG_DEADZONE, Controller::MAX_ANALOG_DEADZONE));
|
||||
|
||||
setValue("psense", BSPF::clamp(getInt("psense"),
|
||||
Paddles::MIN_ANALOG_SENSE, Paddles::MAX_ANALOG_SENSE));
|
||||
|
||||
setValue("plinear", BSPF::clamp(getInt("plinear"),
|
||||
Paddles::MIN_ANALOG_LINEARITY, Paddles::MAX_ANALOG_LINEARITY));
|
||||
|
||||
setValue("dejitter.base", BSPF::clamp(getInt("dejitter.base"),
|
||||
Paddles::MIN_DEJITTER, Paddles::MAX_DEJITTER));
|
||||
|
||||
setValue("dejitter.diff", BSPF::clamp(getInt("dejitter.diff"),
|
||||
Paddles::MIN_DEJITTER, Paddles::MAX_DEJITTER));
|
||||
|
||||
setValue("dsense", BSPF::clamp(getInt("dsense"),
|
||||
Paddles::MIN_DIGITAL_SENSE, Paddles::MAX_DIGITAL_SENSE));
|
||||
|
||||
setValue("msense", BSPF::clamp(getInt("msense"),
|
||||
Controller::MIN_MOUSE_SENSE, Controller::MAX_MOUSE_SENSE));
|
||||
|
||||
i = getInt("cursor");
|
||||
if(i < 0 || i > 3)
|
||||
setValue("cursor", "2");
|
||||
|
||||
i = getInt("psense");
|
||||
if(i < Paddles::MIN_ANALOG_SENSE || i > Paddles::MAX_ANALOG_SENSE)
|
||||
setValue("psense", "20");
|
||||
|
||||
i = getInt("dsense");
|
||||
if(i < Paddles::MIN_DIGITAL_SENSE || i > Paddles::MAX_DIGITAL_SENSE)
|
||||
setValue("dsense", "10");
|
||||
|
||||
i = getInt("msense");
|
||||
if(i < 1 || i > 20)
|
||||
setValue("msense", "10");
|
||||
|
||||
i = getInt("tsense");
|
||||
if(i < 1 || i > 20)
|
||||
setValue("tsense", "10");
|
||||
|
@ -503,22 +516,24 @@ void Settings::usage() const
|
|||
<< " -loglevel <0|1|2> Set level of logging during application run\n"
|
||||
<< endl
|
||||
<< " -logtoconsole <1|0> Log output to console/commandline\n"
|
||||
<< " -joydeadzone <number> Sets 'deadzone' area for analog joysticks (0-29)\n"
|
||||
<< " -joydeadzone <0-29> Sets digital 'dead zone' area for analog joysticks\n"
|
||||
<< " -joyallow4 <1|0> Allow all 4 directions on a joystick to be\n"
|
||||
<< " pressed simultaneously\n"
|
||||
<< " -usemouse <always|\n"
|
||||
<< " analog|\n"
|
||||
<< " never> Use mouse as a controller as specified by ROM\n"
|
||||
<< " properties in given mode(see manual)\n"
|
||||
<< " -grabmouse <1|0> Locks the mouse cursor in the TIA window\n"
|
||||
<< " -cursor <0,1,2,3> Set cursor state in UI/emulation modes\n"
|
||||
<< " -dejitter.base <0-10> Strength of analog paddle value averaging\n"
|
||||
<< " -dejitter.diff <0-10> Strength of analog paddle reaction to fast movements\n"
|
||||
<< " -psense <0-30> Sensitivity of analog paddle movement\n"
|
||||
<< " -dsense <1-20> Sensitivity of digital emulated paddle movement\n"
|
||||
<< " -msense <1-20> Sensitivity of mouse emulated paddle movement\n"
|
||||
<< " -tsense <1-20> Sensitivity of mouse emulated trackball movement\n"
|
||||
<< " -dcsense <1-20> Sensitivity of digital emulated driving controller\n"
|
||||
<< " -grabmouse <1|0> Locks the mouse cursor in the TIA window\n"
|
||||
<< " -cursor <0,1,2,3> Set cursor state in UI/emulation modes\n"
|
||||
<< " -adeadzone <0-29> Sets analog 'dead zone' area for analog joysticks\n"
|
||||
<< " -plinear <25-100> Sets paddle linearity\n"
|
||||
<< " -dejitter.base <0-10> Strength of analog paddle value averaging\n"
|
||||
<< " -dejitter.diff <0-10> Strength of analog paddle reaction to fast movements\n"
|
||||
<< " -psense <0-30> Sensitivity of analog paddle movement\n"
|
||||
<< " -dsense <1-20> Sensitivity of digital emulated paddle movement\n"
|
||||
<< " -msense <1-20> Sensitivity of mouse emulated paddle movement\n"
|
||||
<< " -tsense <1-20> Sensitivity of mouse emulated trackball movement\n"
|
||||
<< " -dcsense <1-20> Sensitivity of digital emulated driving controller\n"
|
||||
<< " movement\n"
|
||||
<< " -autofirerate <0-30> Set fire button's autofire rate (0 means off)\n"
|
||||
<< " -saport <lr|rl> How to assign virtual ports to multiple\n"
|
||||
|
@ -663,8 +678,8 @@ void Settings::usage() const
|
|||
<< " handling and RAM initialization\n"
|
||||
<< " -plr.bankrandom <1|0> Randomize the startup bank on reset\n"
|
||||
<< " -plr.ramrandom <1|0> Randomize the contents of RAM on reset\n"
|
||||
<< " -plr.cpurandom <1|0> Randomize the contents of CPU registers on\n"
|
||||
<< " reset\n"
|
||||
<< " -plr.tiarandom <1|0> Randomize the TIA registers on reset\n"
|
||||
<< " -plr.ramrandom <1|0> Randomize the contents of RAM on reset\n"
|
||||
<< " -plr.debugcolors <1|0> Enable debug colors\n"
|
||||
<< " -plr.colorloss <1|0> Enable PAL color-loss effect\n"
|
||||
<< " -plr.tv.jitter <1|0> Enable TV jitter effect\n"
|
||||
|
@ -681,6 +696,7 @@ void Settings::usage() const
|
|||
<< " -dev.ramrandom <1|0> Randomize the contents of RAM on reset\n"
|
||||
<< " -dev.cpurandom <1|0> Randomize the contents of CPU registers on\n"
|
||||
<< " reset\n"
|
||||
<< " -dev.tiarandom <1|0> Randomize the TIA registers on reset\n"
|
||||
<< " -dev.debugcolors <1|0> Enable debug colors\n"
|
||||
<< " -dev.colorloss <1|0> Enable PAL color-loss effect\n"
|
||||
<< " -dev.tv.jitter <1|0> Enable TV jitter effect\n"
|
||||
|
|
|
@ -38,7 +38,7 @@ class TrakBall : public PointingDevice
|
|||
/**
|
||||
Returns the name of this controller.
|
||||
*/
|
||||
string name() const override { return "TrakBall"; }
|
||||
string name() const override { return "Trak-Ball"; }
|
||||
|
||||
protected:
|
||||
uInt8 ioPortA(uInt8 countH, uInt8 countV, uInt8 left, uInt8 down) override
|
||||
|
|
|
@ -1249,10 +1249,8 @@
|
|||
"Cart.MD5" "0e224ea74310da4e7e2103400eb1b4bf"
|
||||
"Cart.Manufacturer" "Atari, Peter C. Niday, Gary Shannon, Howard Scott Warshaw"
|
||||
"Cart.Name" "Mind Maze (10-10-1984) (Atari) (Prototype)"
|
||||
"Cart.Note" "Uses the MindLink controller"
|
||||
"Cart.Rarity" "Prototype"
|
||||
"Cart.Url" "http://www.atariprotos.com/2600/software/mindmaze/mindmaze.htm"
|
||||
"Controller.Right" "MINDLINK"
|
||||
""
|
||||
|
||||
"Cart.MD5" "0e23d0ed4c33b2011ab4cc93a7619683"
|
||||
|
@ -1544,7 +1542,7 @@
|
|||
"Cart.MD5" "10f0ecaf962aef1fc28abed870b01b65"
|
||||
"Cart.Manufacturer" "Atari, Paul Donaldson"
|
||||
"Cart.Name" "Bionic Breakthrough (06-22-1984) (Atari) (Prototype)"
|
||||
"Cart.Note" "Uses the Mindlink Controller"
|
||||
"Cart.Note" "Uses MindLink Controller"
|
||||
"Cart.Rarity" "Prototype"
|
||||
"Cart.Url" "http://www.atariprotos.com/2600/software/bionic/bionic.htm"
|
||||
"Controller.Left" "MINDLINK"
|
||||
|
@ -5482,7 +5480,7 @@
|
|||
"Cart.MD5" "3d7aad37c55692814211c8b590a0334c"
|
||||
"Cart.Manufacturer" "Atari, Dan Oliver"
|
||||
"Cart.Name" "Telepathy (1983) (Atari) (Prototype)"
|
||||
"Cart.Note" "Uses both left joystick and right Mindlink controllers (press Fire on respective controller to begin)"
|
||||
"Cart.Note" "Uses both left joystick and right MindLink controllers (press Fire on respective controller to begin)"
|
||||
"Cart.Rarity" "Prototype"
|
||||
"Cart.Url" "http://www.atariprotos.com/2600/software/telepathy/telepathy.htm"
|
||||
"Controller.Right" "MINDLINK"
|
||||
|
@ -7301,6 +7299,7 @@
|
|||
"Cart.ModelNo" "AG-930-04, AZ-030"
|
||||
"Cart.Name" "Decathlon (1983) (Activision) [fixed]"
|
||||
"Cart.Highscore" "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}"
|
||||
"Controller.Right" "PADDLES"
|
||||
""
|
||||
|
||||
"Cart.MD5" "52615ae358a68de6e76467e95eb404c7"
|
||||
|
@ -14183,8 +14182,7 @@
|
|||
"Cart.Manufacturer" "Coleco, Rob Harris"
|
||||
"Cart.ModelNo" "2511"
|
||||
"Cart.Name" "Smurfs Save the Day (1983) (Coleco)"
|
||||
"Cart.Note" "Uses the Kid Vid Controller"
|
||||
"Controller.Right" "KIDVID"
|
||||
"Cart.Note" "Uses the Kid Vid Voice Module"
|
||||
""
|
||||
|
||||
"Cart.MD5" "a20b7abbcdf90fbc29ac0fafa195bd12"
|
||||
|
@ -15086,6 +15084,7 @@
|
|||
"Cart.Name" "Decathlon (1983) (Activision)"
|
||||
"Cart.Rarity" "Rare"
|
||||
"Cart.Highscore" "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}"
|
||||
"Controller.Right" "PADDLES"
|
||||
""
|
||||
|
||||
"Cart.MD5" "ac9adbd6de786a242e19d4bec527982b"
|
||||
|
@ -20774,10 +20773,9 @@
|
|||
"Cart.Manufacturer" "Coleco"
|
||||
"Cart.ModelNo" "2658"
|
||||
"Cart.Name" "Berenstain Bears (1983) (Coleco)"
|
||||
"Cart.Note" "Uses the KidVid Controller"
|
||||
"Cart.Note" "Uses the Kid Vid Voice Module"
|
||||
"Cart.Rarity" "Unbelievably Rare"
|
||||
"Console.LeftDiff" "A"
|
||||
"Controller.Right" "KIDVID"
|
||||
""
|
||||
|
||||
"Cart.MD5" "ee67dc0b01746372d2b983d88f48e24f"
|
||||
|
@ -20958,7 +20956,7 @@
|
|||
"Cart.MD5" "f0541d2f7cda5ec7bab6d62b6128b823"
|
||||
"Cart.Manufacturer" "Atari, Paul Donaldson"
|
||||
"Cart.Name" "Bionic Breakthrough (1984) (Atari) (Prototype)"
|
||||
"Cart.Note" "Uses Mindlink Controller (left only)"
|
||||
"Cart.Note" "Uses MindLink Controller"
|
||||
"Cart.Rarity" "Prototype"
|
||||
"Cart.Url" "http://www.atariprotos.com/2600/software/bionic/bionic.htm"
|
||||
"Controller.Left" "MINDLINK"
|
||||
|
|
|
@ -198,6 +198,15 @@ void TIA::reset()
|
|||
// Simply call initialize(); mostly to get around calling a virtual method
|
||||
// from the constructor
|
||||
initialize();
|
||||
|
||||
if(myRandomize)
|
||||
for(uInt32 i = 0; i < 0x10000; ++i)
|
||||
{
|
||||
uInt16 address = mySystem->randGenerator().next() & 0x3F;
|
||||
uInt8 value = mySystem->randGenerator().next();
|
||||
poke(address, value);
|
||||
cycle(2); // process delay queue
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -956,6 +965,7 @@ void TIA::applyDeveloperSettings()
|
|||
setBlSwapDelay(false);
|
||||
}
|
||||
|
||||
myRandomize = mySettings.getBool(devSettings ? "dev.tiarandom" : "plr.tiarandom");
|
||||
myTIAPinsDriven = devSettings ? mySettings.getBool("dev.tiadriven") : false;
|
||||
|
||||
myEnableJitter = mySettings.getBool(devSettings ? "dev.tv.jitter" : "plr.tv.jitter");
|
||||
|
|
|
@ -819,6 +819,11 @@ class TIA : public Device
|
|||
// Frames since the last time a frame was rendered to the render buffer
|
||||
uInt32 myFramesSinceLastRender{0};
|
||||
|
||||
/**
|
||||
* Setting this to true randomizes TIA on reset.
|
||||
*/
|
||||
bool myRandomize{false};
|
||||
|
||||
/**
|
||||
* Setting this to true injects random values into undefined reads.
|
||||
*/
|
||||
|
|
|
@ -145,11 +145,15 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
|
|||
myRandomBankWidget->setToolTip("Randomize the startup bank for\n"
|
||||
"most classic bankswitching types.");
|
||||
wid.push_back(myRandomBankWidget);
|
||||
|
||||
myRandomizeTIAWidget = new CheckboxWidget(myTab, font, myRandomBankWidget->getRight() + fontWidth * 2.5, ypos + 1,
|
||||
"Randomize TIA");
|
||||
wid.push_back(myRandomizeTIAWidget);
|
||||
ypos += lineHeight + VGAP;
|
||||
|
||||
// Randomize RAM
|
||||
myRandomizeRAMWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1,
|
||||
"Randomize zero-page and extended RAM", kRandRAMID);
|
||||
"Randomize zero-page and extended RAM");
|
||||
wid.push_back(myRandomizeRAMWidget);
|
||||
ypos += lineHeight + VGAP;
|
||||
|
||||
|
@ -162,7 +166,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
|
|||
for(int i = 0; i < 5; ++i)
|
||||
{
|
||||
myRandomizeCPUWidget[i] = new CheckboxWidget(myTab, font, xpos, ypos + 1,
|
||||
cpuregsLabels[i], kRandCPUID);
|
||||
cpuregsLabels[i]);
|
||||
wid.push_back(myRandomizeCPUWidget[i]);
|
||||
xpos += CheckboxWidget::boxSize(font) + font.getStringWidth("XX") + fontWidth * 2.5;
|
||||
}
|
||||
|
@ -669,6 +673,7 @@ void DeveloperDialog::loadSettings(SettingsSet set)
|
|||
myConsole[set] = instance().settings().getString(prefix + "console") == "7800" ? 1 : 0;
|
||||
// Randomization
|
||||
myRandomBank[set] = instance().settings().getBool(prefix + "bankrandom");
|
||||
myRandomizeTIA[set] = instance().settings().getBool(prefix + "tiarandom");
|
||||
myRandomizeRAM[set] = instance().settings().getBool(prefix + "ramrandom");
|
||||
myRandomizeCPU[set] = instance().settings().getString(prefix + "cpurandom");
|
||||
// Undriven TIA pins
|
||||
|
@ -725,6 +730,7 @@ void DeveloperDialog::saveSettings(SettingsSet set)
|
|||
|
||||
// Randomization
|
||||
instance().settings().setValue(prefix + "bankrandom", myRandomBank[set]);
|
||||
instance().settings().setValue(prefix + "tiarandom", myRandomizeTIA[set]);
|
||||
instance().settings().setValue(prefix + "ramrandom", myRandomizeRAM[set]);
|
||||
instance().settings().setValue(prefix + "cpurandom", myRandomizeCPU[set]);
|
||||
|
||||
|
@ -786,6 +792,7 @@ void DeveloperDialog::getWidgetStates(SettingsSet set)
|
|||
myConsole[set] = myConsoleWidget->getSelected() == 1;
|
||||
// Randomization
|
||||
myRandomBank[set] = myRandomBankWidget->getState();
|
||||
myRandomizeTIA[set] = myRandomizeTIAWidget->getState();
|
||||
myRandomizeRAM[set] = myRandomizeRAMWidget->getState();
|
||||
string cpurandom;
|
||||
const std::array<string, 5> cpuregs = {"S", "A", "X", "Y", "P"};
|
||||
|
@ -841,6 +848,7 @@ void DeveloperDialog::setWidgetStates(SettingsSet set)
|
|||
myConsoleWidget->setSelectedIndex(myConsole[set]);
|
||||
// Randomization
|
||||
myRandomBankWidget->setState(myRandomBank[set]);
|
||||
myRandomizeTIAWidget->setState(myRandomizeTIA[set]);
|
||||
myRandomizeRAMWidget->setState(myRandomizeRAM[set]);
|
||||
|
||||
const string& cpurandom = myRandomizeCPU[set];
|
||||
|
@ -1025,6 +1033,7 @@ void DeveloperDialog::setDefaults()
|
|||
myConsole[set] = 0;
|
||||
// Randomization
|
||||
myRandomBank[set] = devSettings ? true : false;
|
||||
myRandomizeTIA[set] = true;
|
||||
myRandomizeRAM[set] = true;
|
||||
myRandomizeCPU[set] = devSettings ? "SAXYP" : "AXYP";
|
||||
// Undriven TIA pins
|
||||
|
|
|
@ -57,8 +57,6 @@ class DeveloperDialog : public Dialog
|
|||
kPlrSettings = 'DVpl',
|
||||
kDevSettings = 'DVdv',
|
||||
kConsole = 'DVco',
|
||||
kRandRAMID = 'DVrm',
|
||||
kRandCPUID = 'DVcp',
|
||||
kTIAType = 'DVtt',
|
||||
kTVJitter = 'DVjt',
|
||||
kTVJitterChanged = 'DVjr',
|
||||
|
@ -94,6 +92,7 @@ class DeveloperDialog : public Dialog
|
|||
PopUpWidget* myConsoleWidget{nullptr};
|
||||
StaticTextWidget* myLoadingROMLabel{nullptr};
|
||||
CheckboxWidget* myRandomBankWidget{nullptr};
|
||||
CheckboxWidget* myRandomizeTIAWidget{nullptr};
|
||||
CheckboxWidget* myRandomizeRAMWidget{nullptr};
|
||||
StaticTextWidget* myRandomizeCPULabel{nullptr};
|
||||
CheckboxWidget* myUndrivenPinsWidget{nullptr};
|
||||
|
@ -154,6 +153,7 @@ class DeveloperDialog : public Dialog
|
|||
std::array<bool, 2> myDetectedInfo;
|
||||
std::array<int, 2> myConsole;
|
||||
std::array<bool, 2> myRandomBank;
|
||||
std::array<bool, 2> myRandomizeTIA;
|
||||
std::array<bool, 2> myRandomizeRAM;
|
||||
std::array<string, 2> myRandomizeCPU;
|
||||
std::array<bool, 2> myColorLoss;
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "FrameBuffer.hxx"
|
||||
#include "FBSurface.hxx"
|
||||
#include "Font.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "Dialog.hxx"
|
||||
#include "Widget.hxx"
|
||||
#include "TabWidget.hxx"
|
||||
|
|
|
@ -277,17 +277,17 @@ void GameInfoDialog::addControllersTab()
|
|||
VarList::push_back(items, "Paddles", "PADDLES");
|
||||
VarList::push_back(items, "Paddles_IAxis", "PADDLES_IAXIS");
|
||||
VarList::push_back(items, "Paddles_IAxDr", "PADDLES_IAXDR");
|
||||
VarList::push_back(items, "BoosterGrip", "BOOSTERGRIP");
|
||||
VarList::push_back(items, "Booster Grip", "BOOSTERGRIP");
|
||||
VarList::push_back(items, "Driving", "DRIVING");
|
||||
VarList::push_back(items, "Keyboard", "KEYBOARD");
|
||||
VarList::push_back(items, "AmigaMouse", "AMIGAMOUSE");
|
||||
VarList::push_back(items, "AtariMouse", "ATARIMOUSE");
|
||||
VarList::push_back(items, "Trakball", "TRAKBALL");
|
||||
VarList::push_back(items, "Amiga mouse", "AMIGAMOUSE");
|
||||
VarList::push_back(items, "Atari mouse", "ATARIMOUSE");
|
||||
VarList::push_back(items, "Trak-Ball", "TRAKBALL");
|
||||
VarList::push_back(items, "AtariVox", "ATARIVOX");
|
||||
VarList::push_back(items, "SaveKey", "SAVEKEY");
|
||||
VarList::push_back(items, "Sega Genesis", "GENESIS");
|
||||
VarList::push_back(items, "KidVid", "KIDVID");
|
||||
VarList::push_back(items, "Lightgun", "LIGHTGUN");
|
||||
VarList::push_back(items, "Kid Vid", "KIDVID");
|
||||
VarList::push_back(items, "Light Gun", "LIGHTGUN");
|
||||
VarList::push_back(items, "MindLink", "MINDLINK");
|
||||
VarList::push_back(items, "QuadTari", "QUADTARI");
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ static constexpr std::array<uInt32, BUTTON_GFX_H_LARGE> NEXT_GFX_LARGE = {
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
HighScoresDialog::HighScoresDialog(OSystem& osystem, DialogContainer& parent,
|
||||
int max_w, int max_h,
|
||||
Menu::AppMode mode)
|
||||
OptionsMenu::AppMode mode)
|
||||
: Dialog(osystem, parent, osystem.frameBuffer().font(), "High Scores"),
|
||||
_max_w{max_w},
|
||||
_max_h{max_h},
|
||||
|
@ -219,7 +219,7 @@ HighScoresDialog::~HighScoresDialog()
|
|||
void HighScoresDialog::loadConfig()
|
||||
{
|
||||
// Enable blending (only once is necessary)
|
||||
if (myMode == Menu::AppMode::emulator && !surface().attributes().blending)
|
||||
if (myMode == OptionsMenu::AppMode::emulator && !surface().attributes().blending)
|
||||
{
|
||||
surface().attributes().blending = true;
|
||||
surface().attributes().blendalpha = 90;
|
||||
|
@ -314,7 +314,7 @@ void HighScoresDialog::handleCommand(CommandSender* sender, int cmd, int data, i
|
|||
saveConfig();
|
||||
[[fallthrough]];
|
||||
case kCloseCmd:
|
||||
if(myMode != Menu::AppMode::emulator)
|
||||
if(myMode != OptionsMenu::AppMode::emulator)
|
||||
close();
|
||||
else
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
|
|
|
@ -28,7 +28,7 @@ namespace GUI {
|
|||
}
|
||||
class Serializer;
|
||||
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "Dialog.hxx"
|
||||
#include "HighScoresManager.hxx"
|
||||
#include "json_lib.hxx"
|
||||
|
@ -47,7 +47,7 @@ class HighScoresDialog : public Dialog
|
|||
static constexpr uInt32 NUM_RANKS = 10;
|
||||
|
||||
HighScoresDialog(OSystem& osystem, DialogContainer& parent,
|
||||
int max_w, int max_h, Menu::AppMode mode);
|
||||
int max_w, int max_h, OptionsMenu::AppMode mode);
|
||||
~HighScoresDialog() override;
|
||||
|
||||
protected:
|
||||
|
@ -110,7 +110,7 @@ class HighScoresDialog : public Dialog
|
|||
StaticTextWidget* myMD5Widget{nullptr};
|
||||
StaticTextWidget* myCheckSumWidget{nullptr};
|
||||
|
||||
Menu::AppMode myMode{Menu::AppMode::emulator};
|
||||
OptionsMenu::AppMode myMode{OptionsMenu::AppMode::emulator};
|
||||
|
||||
private:
|
||||
// Following constructors and assignment operators not supported
|
||||
|
|
|
@ -38,7 +38,7 @@ Dialog* HighScoresMenu::baseDialog()
|
|||
if (myHighScoresDialog == nullptr)
|
||||
myHighScoresDialog = new HighScoresDialog(myOSystem, *this,
|
||||
FBMinimum::Width, FBMinimum::Height,
|
||||
Menu::AppMode::emulator);
|
||||
OptionsMenu::AppMode::emulator);
|
||||
|
||||
return myHighScoresDialog;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "EventHandler.hxx"
|
||||
#include "Joystick.hxx"
|
||||
#include "Paddles.hxx"
|
||||
#include "MindLink.hxx"
|
||||
#include "PointingDevice.hxx"
|
||||
#include "Driving.hxx"
|
||||
#include "SaveKey.hxx"
|
||||
|
@ -54,7 +55,7 @@ InputDialog::InputDialog(OSystem& osystem, DialogContainer& parent,
|
|||
|
||||
// Set real dimensions
|
||||
setSize(48 * fontWidth + PopUpWidget::dropDownWidth(_font) + HBORDER * 2,
|
||||
_th + VGAP * 3 + lineHeight + 13 * (lineHeight + VGAP) + VGAP * 8 + buttonHeight + VBORDER * 3,
|
||||
_th + VGAP * 3 + lineHeight + 13 * (lineHeight + VGAP) + VGAP * 9 + buttonHeight + VBORDER * 3,
|
||||
max_w, max_h);
|
||||
|
||||
// The tab widget
|
||||
|
@ -111,30 +112,54 @@ void InputDialog::addDevicePortTab()
|
|||
// Devices/ports
|
||||
tabID = myTab->addTab(" Devices & Ports ", TabWidget::AUTO_WIDTH);
|
||||
|
||||
ypos = VBORDER;
|
||||
xpos = HBORDER; ypos = VBORDER;
|
||||
lwidth = _font.getStringWidth("Digital paddle sensitivity ");
|
||||
|
||||
// Add joystick deadzone setting
|
||||
myDeadzone = new SliderWidget(myTab, _font, HBORDER, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Joystick deadzone size", lwidth, kDeadzoneChanged, 5 * fontWidth);
|
||||
myDeadzone->setMinValue(Joystick::DEAD_ZONE_MIN);
|
||||
myDeadzone->setMaxValue(Joystick::DEAD_ZONE_MAX);
|
||||
myDeadzone->setTickmarkIntervals(4);
|
||||
wid.push_back(myDeadzone);
|
||||
// Add digital dead zone setting
|
||||
myDigitalDeadzone = new SliderWidget(myTab, _font, xpos, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Digital dead zone size ",
|
||||
lwidth, kDDeadzoneChanged, 3 * fontWidth, "%");
|
||||
myDigitalDeadzone->setMinValue(Controller::MIN_DIGITAL_DEADZONE);
|
||||
myDigitalDeadzone->setMaxValue(Controller::MAX_DIGITAL_DEADZONE);
|
||||
myDigitalDeadzone->setTickmarkIntervals(5);
|
||||
myDigitalDeadzone->setToolTip("Adjust dead zone size for analog joysticks when emulating digital controllers.");
|
||||
wid.push_back(myDigitalDeadzone);
|
||||
|
||||
xpos = HBORDER; ypos += lineHeight + VGAP * 3;
|
||||
// Add analog dead zone
|
||||
ypos += lineHeight + VGAP;
|
||||
myAnalogDeadzone = new SliderWidget(myTab, _font, xpos, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Analog dead zone size",
|
||||
lwidth, kADeadzoneChanged, 3 * fontWidth, "%");
|
||||
myAnalogDeadzone->setMinValue(Controller::MIN_ANALOG_DEADZONE);
|
||||
myAnalogDeadzone->setMaxValue(Controller::MAX_ANALOG_DEADZONE);
|
||||
myAnalogDeadzone->setTickmarkIntervals(5);
|
||||
myAnalogDeadzone->setToolTip("Adjust dead zone size for analog joysticks when emulating analog controllers.");
|
||||
wid.push_back(myAnalogDeadzone);
|
||||
|
||||
ypos += lineHeight + VGAP * (3 - 2);
|
||||
new StaticTextWidget(myTab, _font, xpos, ypos+1, "Analog paddle:");
|
||||
xpos += fontWidth * 2;
|
||||
|
||||
// Add analog paddle sensitivity
|
||||
ypos += lineHeight;
|
||||
myPaddleSpeed = new SliderWidget(myTab, _font, xpos, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Sensitivity",
|
||||
lwidth - fontWidth * 2, kPSpeedChanged, 4 * fontWidth, "%");
|
||||
myPaddleSpeed->setMinValue(0); myPaddleSpeed->setMaxValue(Paddles::MAX_ANALOG_SENSE);
|
||||
"Sensitivity",
|
||||
lwidth - fontWidth * 2, kPSpeedChanged, 4 * fontWidth, "%");
|
||||
myPaddleSpeed->setMinValue(0);
|
||||
myPaddleSpeed->setMaxValue(Paddles::MAX_ANALOG_SENSE);
|
||||
myPaddleSpeed->setTickmarkIntervals(3);
|
||||
wid.push_back(myPaddleSpeed);
|
||||
|
||||
// Add analog paddle linearity
|
||||
ypos += lineHeight + VGAP;
|
||||
myPaddleLinearity = new SliderWidget(myTab, _font, xpos, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Linearity", lwidth - fontWidth * 2, 0, 4 * fontWidth, "%");
|
||||
myPaddleLinearity->setMinValue(Paddles::MIN_ANALOG_LINEARITY);
|
||||
myPaddleLinearity->setMaxValue(Paddles::MAX_ANALOG_LINEARITY);
|
||||
myPaddleLinearity->setStepValue(5);
|
||||
myPaddleLinearity->setTickmarkIntervals(3);
|
||||
myPaddleLinearity->setToolTip("Adjust paddle movement linearity.");
|
||||
wid.push_back(myPaddleLinearity);
|
||||
|
||||
// Add dejitter (analog paddles)
|
||||
ypos += lineHeight + VGAP;
|
||||
|
@ -160,7 +185,7 @@ void InputDialog::addDevicePortTab()
|
|||
wid.push_back(myDejitterDiff);
|
||||
|
||||
// Add paddle speed (digital emulation)
|
||||
ypos += lineHeight + VGAP * 3;
|
||||
ypos += lineHeight + VGAP * (3 - 2);
|
||||
myDPaddleSpeed = new SliderWidget(myTab, _font, HBORDER, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Digital paddle sensitivity",
|
||||
lwidth, kDPSpeedChanged, 4 * fontWidth, "%");
|
||||
|
@ -168,7 +193,7 @@ void InputDialog::addDevicePortTab()
|
|||
myDPaddleSpeed->setTickmarkIntervals(4);
|
||||
wid.push_back(myDPaddleSpeed);
|
||||
|
||||
ypos += lineHeight + VGAP * 3;
|
||||
ypos += lineHeight + VGAP * (3 - 2);
|
||||
myAutoFireRate = new SliderWidget(myTab, _font, HBORDER, ypos - 1, 13 * fontWidth, lineHeight,
|
||||
"Autofire rate",
|
||||
lwidth, kAutoFireChanged, 5 * fontWidth, "Hz");
|
||||
|
@ -177,7 +202,7 @@ void InputDialog::addDevicePortTab()
|
|||
wid.push_back(myAutoFireRate);
|
||||
|
||||
// Add 'allow all 4 directions' for joystick
|
||||
ypos += lineHeight + VGAP * 4;
|
||||
ypos += lineHeight + VGAP * (4 - 2);
|
||||
myAllowAll4 = new CheckboxWidget(myTab, _font, HBORDER, ypos,
|
||||
"Allow all 4 directions on joystick");
|
||||
wid.push_back(myAllowAll4);
|
||||
|
@ -197,7 +222,7 @@ void InputDialog::addDevicePortTab()
|
|||
int fwidth;
|
||||
|
||||
// Add EEPROM erase (part 1/2)
|
||||
ypos += VGAP * 3;
|
||||
ypos += VGAP * (3 - 1);
|
||||
fwidth = _font.getStringWidth("AtariVox/SaveKey");
|
||||
new StaticTextWidget(myTab, _font, _w - HBORDER - 2 - fwidth, ypos,
|
||||
"AtariVox/SaveKey");
|
||||
|
@ -337,11 +362,15 @@ void InputDialog::loadConfig()
|
|||
myCursorState->setSelected(settings.getString("cursor"), "2");
|
||||
handleCursorState();
|
||||
|
||||
// Joystick deadzone
|
||||
myDeadzone->setValue(settings.getInt("joydeadzone"));
|
||||
// Digital dead zone
|
||||
myDigitalDeadzone->setValue(settings.getInt("joydeadzone"));
|
||||
// Analog dead zone
|
||||
myAnalogDeadzone->setValue(settings.getInt("adeadzone"));
|
||||
|
||||
// Paddle speed (analog)
|
||||
myPaddleSpeed->setValue(settings.getInt("psense"));
|
||||
// Paddle linearity (analog)
|
||||
myPaddleLinearity->setValue(settings.getInt("plinear"));
|
||||
// Paddle dejitter (analog)
|
||||
myDejitterBase->setValue(settings.getInt("dejitter.base"));
|
||||
myDejitterDiff->setValue(settings.getInt("dejitter.diff"));
|
||||
|
@ -403,17 +432,25 @@ void InputDialog::saveConfig()
|
|||
Settings& settings = instance().settings();
|
||||
|
||||
// *** Device & Ports ***
|
||||
// Joystick deadzone
|
||||
int deadzone = myDeadzone->getValue();
|
||||
settings.setValue("joydeadzone", deadzone);
|
||||
Joystick::setDeadZone(deadzone);
|
||||
// Digital dead zone
|
||||
int deadZone = myDigitalDeadzone->getValue();
|
||||
settings.setValue("joydeadzone", deadZone);
|
||||
Controller::setDigitalDeadZone(deadZone);
|
||||
// Analog dead zone
|
||||
deadZone = myAnalogDeadzone->getValue();
|
||||
settings.setValue("adeadzone", deadZone);
|
||||
Controller::setAnalogDeadZone(deadZone);
|
||||
|
||||
// Paddle speed (analog)
|
||||
int sensitivity = myPaddleSpeed->getValue();
|
||||
settings.setValue("psense", sensitivity);
|
||||
Paddles::setAnalogSensitivity(sensitivity);
|
||||
// Paddle linearity (analog)
|
||||
int linearity = myPaddleLinearity->getValue();
|
||||
settings.setValue("plinear", linearity);
|
||||
Paddles::setAnalogLinearity(linearity);
|
||||
|
||||
// Paddle speed (digital and mouse)
|
||||
// Paddle dejitter (analog)
|
||||
int dejitter = myDejitterBase->getValue();
|
||||
settings.setValue("dejitter.base", dejitter);
|
||||
Paddles::setDejitterBase(dejitter);
|
||||
|
@ -453,6 +490,7 @@ void InputDialog::saveConfig()
|
|||
sensitivity = myMPaddleSpeed->getValue();
|
||||
settings.setValue("msense", sensitivity);
|
||||
Paddles::setMouseSensitivity(sensitivity);
|
||||
MindLink::setMouseSensitivity(sensitivity);
|
||||
|
||||
// Trackball speed
|
||||
sensitivity = myTrackBallSpeed->getValue();
|
||||
|
@ -490,11 +528,17 @@ void InputDialog::setDefaults()
|
|||
break;
|
||||
|
||||
case 1: // Devices & Ports
|
||||
// Joystick deadzone
|
||||
myDeadzone->setValue(0);
|
||||
// Digital dead zone
|
||||
myDigitalDeadzone->setValue(0);
|
||||
|
||||
// Analog dead zone
|
||||
myAnalogDeadzone->setValue(0);
|
||||
|
||||
// Paddle speed (analog)
|
||||
myPaddleSpeed->setValue(20);
|
||||
|
||||
// Paddle linearity
|
||||
myPaddleLinearity->setValue(100);
|
||||
#if defined(RETRON77)
|
||||
myDejitterBase->setValue(2);
|
||||
myDejitterDiff->setValue(6);
|
||||
|
@ -653,8 +697,14 @@ void InputDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
setDefaults();
|
||||
break;
|
||||
|
||||
case kDeadzoneChanged:
|
||||
myDeadzone->setValueLabel(Joystick::deadZoneValue(myDeadzone->getValue()));
|
||||
case kDDeadzoneChanged:
|
||||
myDigitalDeadzone->setValueLabel(std::round(Controller::digitalDeadZoneValue(myDigitalDeadzone->getValue()) * 100.f /
|
||||
(Paddles::ANALOG_RANGE / 2)));
|
||||
break;
|
||||
|
||||
case kADeadzoneChanged:
|
||||
myAnalogDeadzone->setValueLabel(std::round(Controller::analogDeadZoneValue(myAnalogDeadzone->getValue()) * 100.f /
|
||||
(Paddles::ANALOG_RANGE / 2)));
|
||||
break;
|
||||
|
||||
case kPSpeedChanged:
|
||||
|
|
|
@ -71,11 +71,12 @@ class InputDialog : public Dialog
|
|||
|
||||
private:
|
||||
enum {
|
||||
kDeadzoneChanged = 'DZch',
|
||||
kDDeadzoneChanged = 'DDch',
|
||||
kADeadzoneChanged = 'ADch',
|
||||
kPSpeedChanged = 'Ppch',
|
||||
kDejitterAvChanged = 'JAch',
|
||||
kDejitterReChanged = 'JRch',
|
||||
kDPSpeedChanged = 'PDch',
|
||||
kDPSpeedChanged = 'DSch',
|
||||
kAutoFireChanged = 'AFch',
|
||||
kTBSpeedChanged = 'TBch',
|
||||
kDCSpeedChanged = 'DCch',
|
||||
|
@ -96,8 +97,10 @@ class InputDialog : public Dialog
|
|||
|
||||
PopUpWidget* myAVoxPort{nullptr};
|
||||
|
||||
SliderWidget* myDeadzone{nullptr};
|
||||
SliderWidget* myDigitalDeadzone{nullptr};
|
||||
SliderWidget* myAnalogDeadzone{nullptr};
|
||||
SliderWidget* myPaddleSpeed{nullptr};
|
||||
SliderWidget* myPaddleLinearity{nullptr};
|
||||
SliderWidget* myDejitterBase{nullptr};
|
||||
SliderWidget* myDejitterDiff{nullptr};
|
||||
SliderWidget* myDPaddleSpeed{nullptr};
|
||||
|
|
|
@ -926,10 +926,10 @@ void LauncherDialog::openSettings()
|
|||
// Create an options dialog, similar to the in-game one
|
||||
if (instance().settings().getBool("basic_settings"))
|
||||
myDialog = make_unique<StellaSettingsDialog>(instance(), parent(),
|
||||
_w, _h, Menu::AppMode::launcher);
|
||||
_w, _h, OptionsMenu::AppMode::launcher);
|
||||
else
|
||||
myDialog = make_unique<OptionsDialog>(instance(), parent(), this, _w, _h,
|
||||
Menu::AppMode::launcher);
|
||||
OptionsMenu::AppMode::launcher);
|
||||
myDialog->open();
|
||||
}
|
||||
|
||||
|
@ -938,7 +938,7 @@ void LauncherDialog::openHighScores()
|
|||
{
|
||||
// Create an high scores dialog, similar to the in-game one
|
||||
myDialog = make_unique<HighScoresDialog>(instance(), parent(), _w, _h,
|
||||
Menu::AppMode::launcher);
|
||||
OptionsMenu::AppMode::launcher);
|
||||
myDialog->open();
|
||||
}
|
||||
|
||||
|
|
|
@ -321,14 +321,14 @@ void MinUICommandDialog::openSettings()
|
|||
if (instance().settings().getBool("basic_settings"))
|
||||
{
|
||||
myDialog = make_unique<StellaSettingsDialog>(instance(), parent(),
|
||||
1280, 720, Menu::AppMode::launcher);
|
||||
1280, 720, OptionsMenu::AppMode::launcher);
|
||||
myDialog->open();
|
||||
}
|
||||
else
|
||||
{
|
||||
myDialog = make_unique<OptionsDialog>(instance(), parent(), this,
|
||||
FBMinimum::Width, FBMinimum::Height,
|
||||
Menu::AppMode::launcher);
|
||||
OptionsMenu::AppMode::launcher);
|
||||
myDialog->open();
|
||||
}
|
||||
}
|
||||
|
@ -337,6 +337,6 @@ void MinUICommandDialog::openSettings()
|
|||
void MinUICommandDialog::openHighscores()
|
||||
{
|
||||
myDialog = make_unique<HighScoresDialog>(instance(), parent(),
|
||||
1280, 720, Menu::AppMode::emulator);
|
||||
1280, 720, OptionsMenu::AppMode::emulator);
|
||||
myDialog->open();
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "OptionsDialog.hxx"
|
||||
#include "Launcher.hxx"
|
||||
#include "Settings.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
|
||||
#ifdef CHEATCODE_SUPPORT
|
||||
#include "CheatCodeDialog.hxx"
|
||||
|
@ -47,13 +47,13 @@
|
|||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent,
|
||||
GuiObject* boss, int max_w, int max_h, Menu::AppMode mode)
|
||||
GuiObject* boss, int max_w, int max_h, OptionsMenu::AppMode mode)
|
||||
: Dialog(osystem, parent, osystem.frameBuffer().font(), "Options"),
|
||||
myBoss{boss},
|
||||
myMode{mode}
|
||||
{
|
||||
// do not show basic settings options in debugger
|
||||
bool minSettings = osystem.settings().getBool("minimal_ui") && mode != Menu::AppMode::debugger;
|
||||
bool minSettings = osystem.settings().getBool("minimal_ui") && mode != OptionsMenu::AppMode::debugger;
|
||||
const int buttonHeight = Dialog::buttonHeight(),
|
||||
VBORDER = Dialog::vBorder(),
|
||||
HBORDER = Dialog::hBorder(),
|
||||
|
@ -138,7 +138,7 @@ OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent,
|
|||
addToFocusList(wid);
|
||||
|
||||
// Certain buttons are disabled depending on mode
|
||||
if(myMode == Menu::AppMode::launcher)
|
||||
if(myMode == OptionsMenu::AppMode::launcher)
|
||||
{
|
||||
myCheatCodeButton->clearFlags(Widget::FLAG_ENABLED);
|
||||
}
|
||||
|
@ -186,7 +186,7 @@ void OptionsDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
case kBasSetCmd:
|
||||
// enable basic settings
|
||||
instance().settings().setValue("basic_settings", true);
|
||||
if (myMode != Menu::AppMode::emulator)
|
||||
if (myMode != OptionsMenu::AppMode::emulator)
|
||||
close();
|
||||
else
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
|
@ -297,7 +297,7 @@ void OptionsDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
break;
|
||||
|
||||
case kExitCmd:
|
||||
if(myMode != Menu::AppMode::emulator)
|
||||
if(myMode != OptionsMenu::AppMode::emulator)
|
||||
close();
|
||||
else
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
|
|
|
@ -23,14 +23,14 @@ class DialogContainer;
|
|||
class GuiObject;
|
||||
class OSystem;
|
||||
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "Dialog.hxx"
|
||||
|
||||
class OptionsDialog : public Dialog
|
||||
{
|
||||
public:
|
||||
OptionsDialog(OSystem& osystem, DialogContainer& parent, GuiObject* boss,
|
||||
int max_w, int max_h, Menu::AppMode mode);
|
||||
int max_w, int max_h, OptionsMenu::AppMode mode);
|
||||
~OptionsDialog() override;
|
||||
|
||||
private:
|
||||
|
@ -46,7 +46,7 @@ class OptionsDialog : public Dialog
|
|||
|
||||
GuiObject* myBoss{nullptr};
|
||||
// Indicates if this dialog is used for global (vs. in-game) settings
|
||||
Menu::AppMode myMode{Menu::AppMode::emulator};
|
||||
OptionsMenu::AppMode myMode{OptionsMenu::AppMode::emulator};
|
||||
|
||||
enum {
|
||||
kBasSetCmd = 'BAST',
|
||||
|
|
|
@ -22,23 +22,23 @@
|
|||
#include "OSystem.hxx"
|
||||
#include "FrameBuffer.hxx"
|
||||
#include "bspf.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Menu::Menu(OSystem& osystem)
|
||||
OptionsMenu::OptionsMenu(OSystem& osystem)
|
||||
: DialogContainer(osystem)
|
||||
{
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Menu::~Menu()
|
||||
OptionsMenu::~OptionsMenu()
|
||||
{
|
||||
delete stellaSettingDialog; stellaSettingDialog = nullptr;
|
||||
delete optionsDialog; optionsDialog = nullptr;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Dialog* Menu::baseDialog()
|
||||
Dialog* OptionsMenu::baseDialog()
|
||||
{
|
||||
if (myOSystem.settings().getBool("basic_settings"))
|
||||
{
|
|
@ -15,8 +15,8 @@
|
|||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//============================================================================
|
||||
|
||||
#ifndef MENU_HXX
|
||||
#define MENU_HXX
|
||||
#ifndef OPTIONS_MENU_HXX
|
||||
#define OPTIONS_MENU_HXX
|
||||
|
||||
class OSystem;
|
||||
class StellaSettingsDialog;
|
||||
|
@ -29,7 +29,7 @@ class OptionsDialog;
|
|||
|
||||
@author Stephen Anthony
|
||||
*/
|
||||
class Menu : public DialogContainer
|
||||
class OptionsMenu : public DialogContainer
|
||||
{
|
||||
public:
|
||||
// Current Stella mode
|
||||
|
@ -38,8 +38,8 @@ class Menu : public DialogContainer
|
|||
/**
|
||||
Create a new menu stack
|
||||
*/
|
||||
explicit Menu(OSystem& osystem);
|
||||
~Menu() override;
|
||||
explicit OptionsMenu(OSystem& osystem);
|
||||
~OptionsMenu() override;
|
||||
|
||||
private:
|
||||
Dialog* baseDialog() override;
|
||||
|
@ -48,11 +48,11 @@ class Menu : public DialogContainer
|
|||
|
||||
private:
|
||||
// Following constructors and assignment operators not supported
|
||||
Menu() = delete;
|
||||
Menu(const Menu&) = delete;
|
||||
Menu(Menu&&) = delete;
|
||||
Menu& operator=(const Menu&) = delete;
|
||||
Menu& operator=(Menu&&) = delete;
|
||||
OptionsMenu() = delete;
|
||||
OptionsMenu(const OptionsMenu&) = delete;
|
||||
OptionsMenu(OptionsMenu&&) = delete;
|
||||
OptionsMenu& operator=(const OptionsMenu&) = delete;
|
||||
OptionsMenu& operator=(OptionsMenu&&) = delete;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -20,9 +20,7 @@
|
|||
|
||||
#include "PlusRomsSetupDialog.hxx"
|
||||
|
||||
static const int MIN_NICK_LEN = 2;
|
||||
static const int MAX_NICK_LEN = 16;
|
||||
static const char* MIN_NICK_LEN_STR = "Two";
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
PlusRomsSetupDialog::PlusRomsSetupDialog(OSystem& osystem, DialogContainer& parent,
|
||||
|
@ -33,7 +31,8 @@ PlusRomsSetupDialog::PlusRomsSetupDialog(OSystem& osystem, DialogContainer& pare
|
|||
return isalnum(c) || (c == '_');
|
||||
};
|
||||
|
||||
setTextFilter(filter, 0);
|
||||
setTextFilter(filter);
|
||||
setToolTip("Enter your PlusCart High Score Club nickname here.");
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -46,6 +45,9 @@ void PlusRomsSetupDialog::loadConfig()
|
|||
void PlusRomsSetupDialog::saveConfig()
|
||||
{
|
||||
instance().settings().setValue("plusroms.nick", getResult(0));
|
||||
if(instance().settings().getString("plusroms.id") == EmptyString)
|
||||
instance().settings().setValue("plusroms.id", "12345678901234567890123456789012"); // TODO: generate in PlusROM class
|
||||
// Note: The user can cancel, so the existance of an ID must be checked (and generated if not existing) when transmitting scores
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -56,13 +58,8 @@ void PlusRomsSetupDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
{
|
||||
case GuiObject::kOKCmd:
|
||||
case EditableWidget::kAcceptCmd:
|
||||
if(getResult(0).length() >= MIN_NICK_LEN)
|
||||
{
|
||||
saveConfig();
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
}
|
||||
else
|
||||
setMessage(MIN_NICK_LEN_STR + string(" characters minimum"));
|
||||
saveConfig();
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
break;
|
||||
|
||||
case kCloseCmd:
|
||||
|
|
|
@ -47,17 +47,17 @@ QuadTariDialog::QuadTariDialog(GuiObject* boss, const GUI::Font& font, int max_w
|
|||
VarList::push_back(ctrls, "Paddles", "PADDLES");
|
||||
//VarList::push_back(ctrls, "Paddles_IAxis", "PADDLES_IAXIS");
|
||||
//VarList::push_back(ctrls, "Paddles_IAxDr", "PADDLES_IAXDR");
|
||||
//VarList::push_back(ctrls, "BoosterGrip", "BOOSTERGRIP");
|
||||
//VarList::push_back(ctrls, "Booster Grip", "BOOSTERGRIP");
|
||||
VarList::push_back(ctrls, "Driving", "DRIVING");
|
||||
//VarList::push_back(ctrls, "Keyboard", "KEYBOARD");
|
||||
//VarList::push_back(ctrls, "AmigaMouse", "AMIGAMOUSE");
|
||||
//VarList::push_back(ctrls, "AtariMouse", "ATARIMOUSE");
|
||||
//VarList::push_back(ctrls, "Trakball", "TRAKBALL");
|
||||
//VarList::push_back(ctrls, "Amiga mouse", "AMIGAMOUSE");
|
||||
//VarList::push_back(ctrls, "Atari mouse", "ATARIMOUSE");
|
||||
//VarList::push_back(ctrls, "Trak-Ball", "TRAKBALL");
|
||||
VarList::push_back(ctrls, "AtariVox", "ATARIVOX");
|
||||
VarList::push_back(ctrls, "SaveKey", "SAVEKEY");
|
||||
//VarList::push_back(ctrls, "Sega Genesis", "GENESIS");
|
||||
//VarList::push_back(ctrls, "KidVid", "KIDVID");
|
||||
//VarList::push_back(ctrls, "Lightgun", "LIGHTGUN");
|
||||
//VarList::push_back(ctrls, "Kid Vid", "KIDVID");
|
||||
//VarList::push_back(ctrls, "Light Gun", "LIGHTGUN");
|
||||
//VarList::push_back(ctrls, "MindLink", "MINDLINK");
|
||||
//VarList::push_back(ctrls, "QuadTari", "QUADTARI");
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
StellaSettingsDialog::StellaSettingsDialog(OSystem& osystem, DialogContainer& parent,
|
||||
int max_w, int max_h, Menu::AppMode mode)
|
||||
int max_w, int max_h, OptionsMenu::AppMode mode)
|
||||
: Dialog(osystem, parent, osystem.frameBuffer().font(), "Basic settings"),
|
||||
myMode{mode}
|
||||
{
|
||||
|
@ -187,12 +187,12 @@ void StellaSettingsDialog::addGameOptions(WidgetArray& wid, int& xpos, int& ypos
|
|||
VarList::push_back(ctrls, "Auto-detect", "AUTO");
|
||||
VarList::push_back(ctrls, "Joystick", "JOYSTICK");
|
||||
VarList::push_back(ctrls, "Paddles", "PADDLES");
|
||||
VarList::push_back(ctrls, "BoosterGrip", "BOOSTERGRIP");
|
||||
VarList::push_back(ctrls, "Booster Grip", "BOOSTERGRIP");
|
||||
VarList::push_back(ctrls, "Driving", "DRIVING");
|
||||
VarList::push_back(ctrls, "Keyboard", "KEYBOARD");
|
||||
VarList::push_back(ctrls, "AmigaMouse", "AMIGAMOUSE");
|
||||
VarList::push_back(ctrls, "AtariMouse", "ATARIMOUSE");
|
||||
VarList::push_back(ctrls, "Trakball", "TRAKBALL");
|
||||
VarList::push_back(ctrls, "Amiga mouse", "AMIGAMOUSE");
|
||||
VarList::push_back(ctrls, "Atari mouse", "ATARIMOUSE");
|
||||
VarList::push_back(ctrls, "Trak-Ball", "TRAKBALL");
|
||||
VarList::push_back(ctrls, "Sega Genesis", "GENESIS");
|
||||
VarList::push_back(ctrls, "QuadTari", "QUADTARI");
|
||||
|
||||
|
@ -351,7 +351,7 @@ void StellaSettingsDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
saveConfig();
|
||||
[[fallthrough]];
|
||||
case GuiObject::kCloseCmd:
|
||||
if (myMode != Menu::AppMode::emulator)
|
||||
if (myMode != OptionsMenu::AppMode::emulator)
|
||||
close();
|
||||
else
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
|
@ -363,7 +363,7 @@ void StellaSettingsDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
|
||||
case kConfirmSwitchCmd:
|
||||
instance().settings().setValue("basic_settings", false);
|
||||
if (myMode != Menu::AppMode::emulator)
|
||||
if (myMode != OptionsMenu::AppMode::emulator)
|
||||
close();
|
||||
else
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
class PopUpWidget;
|
||||
|
||||
#include "Props.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OptionsMenu.hxx"
|
||||
#include "Dialog.hxx"
|
||||
|
||||
#if defined(RETRON77)
|
||||
|
@ -39,7 +39,7 @@ class StellaSettingsDialog : public Dialog
|
|||
{
|
||||
public:
|
||||
StellaSettingsDialog(OSystem& osystem, DialogContainer& parent,
|
||||
int max_w, int max_h, Menu::AppMode mode);
|
||||
int max_w, int max_h, OptionsMenu::AppMode mode);
|
||||
~StellaSettingsDialog() override;
|
||||
|
||||
private:
|
||||
|
@ -103,7 +103,7 @@ class StellaSettingsDialog : public Dialog
|
|||
#endif
|
||||
|
||||
// Indicates if this dialog is used for global (vs. in-game) settings
|
||||
Menu::AppMode myMode{Menu::AppMode::emulator};
|
||||
OptionsMenu::AppMode myMode{OptionsMenu::AppMode::emulator};
|
||||
|
||||
enum {
|
||||
kAdvancedSettings = 'SSad',
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "Cart.hxx"
|
||||
#include "CartDPC.hxx"
|
||||
#include "Dialog.hxx"
|
||||
#include "Menu.hxx"
|
||||
#include "OSystem.hxx"
|
||||
#include "EditTextWidget.hxx"
|
||||
#include "PopUpWidget.hxx"
|
||||
|
|
|
@ -30,12 +30,12 @@ MODULE_OBJS := \
|
|||
src/gui/Launcher.o \
|
||||
src/gui/ListWidget.o \
|
||||
src/gui/LoggerDialog.o \
|
||||
src/gui/Menu.o \
|
||||
src/gui/MessageBox.o \
|
||||
src/gui/MessageDialog.o \
|
||||
src/gui/MessageMenu.o \
|
||||
src/gui/MinUICommandDialog.o\
|
||||
src/gui/OptionsDialog.o \
|
||||
src/gui/OptionsMenu.o \
|
||||
src/gui/PlusRomsMenu.o\
|
||||
src/gui/PlusRomsSetupDialog.o\
|
||||
src/gui/PopUpWidget.o \
|
||||
|
|
|
@ -981,7 +981,7 @@
|
|||
<ClCompile Include="..\gui\Launcher.cxx" />
|
||||
<ClCompile Include="..\gui\LauncherDialog.cxx" />
|
||||
<ClCompile Include="..\gui\ListWidget.cxx" />
|
||||
<ClCompile Include="..\gui\Menu.cxx" />
|
||||
<ClCompile Include="..\gui\OptionsMenu.cxx" />
|
||||
<ClCompile Include="..\gui\MessageBox.cxx" />
|
||||
<ClCompile Include="..\gui\OptionsDialog.cxx" />
|
||||
<ClCompile Include="..\gui\PopUpWidget.cxx" />
|
||||
|
@ -2096,7 +2096,7 @@
|
|||
<ClInclude Include="..\gui\Launcher.hxx" />
|
||||
<ClInclude Include="..\gui\LauncherDialog.hxx" />
|
||||
<ClInclude Include="..\gui\ListWidget.hxx" />
|
||||
<ClInclude Include="..\gui\Menu.hxx" />
|
||||
<ClInclude Include="..\gui\OptionsMenu.hxx" />
|
||||
<ClInclude Include="..\gui\MessageBox.hxx" />
|
||||
<ClInclude Include="..\gui\OptionsDialog.hxx" />
|
||||
<ClInclude Include="..\gui\PopUpWidget.hxx" />
|
||||
|
|
|
@ -423,7 +423,7 @@
|
|||
<ClCompile Include="..\gui\ListWidget.cxx">
|
||||
<Filter>Source Files\gui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\gui\Menu.cxx">
|
||||
<ClCompile Include="..\gui\OptionsMenu.cxx">
|
||||
<Filter>Source Files\gui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\gui\MessageBox.cxx">
|
||||
|
@ -1505,7 +1505,7 @@
|
|||
<ClInclude Include="..\gui\ListWidget.hxx">
|
||||
<Filter>Header Files\gui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\gui\Menu.hxx">
|
||||
<ClInclude Include="..\gui\OptionsMenu.hxx">
|
||||
<Filter>Header Files\gui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\gui\MessageBox.hxx">
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue