2019-05-11 23:11:55 +08:00
|
|
|
#include <stdint.h>
|
2019-07-21 09:57:03 +08:00
|
|
|
#include <stdlib.h>
|
2019-05-11 23:11:55 +08:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
|
#include "../../fceu.h"
|
|
|
|
|
#include "../../fceu-types.h"
|
|
|
|
|
#include "../../vsuni.h"
|
|
|
|
|
#include "../../git.h"
|
|
|
|
|
#include "../../driver.h"
|
|
|
|
|
#include "../../cart.h"
|
|
|
|
|
|
2019-07-21 10:27:26 +08:00
|
|
|
#include "libretro_dipswitch.h"
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
#define MAX_CORE_OPTIONS 8
|
|
|
|
|
#define MAX_VALUES 10
|
|
|
|
|
|
2019-05-11 23:11:55 +08:00
|
|
|
extern CartInfo iNESCart;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
2019-07-21 09:57:03 +08:00
|
|
|
const char *name;
|
2019-05-11 23:11:55 +08:00
|
|
|
uint8 value;
|
|
|
|
|
} SETTING;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
2019-05-21 20:29:53 +08:00
|
|
|
const char *option_name;
|
2019-08-01 22:25:58 +08:00
|
|
|
SETTING settings[MAX_VALUES];
|
2019-05-11 23:11:55 +08:00
|
|
|
} DIPSWITCH;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
2019-08-01 22:25:58 +08:00
|
|
|
unsigned game_id;
|
|
|
|
|
const char *game_name;
|
|
|
|
|
DIPSWITCH core_options[MAX_CORE_OPTIONS];
|
2019-05-11 23:11:55 +08:00
|
|
|
} VSUNIGAME;
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_battlecity = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_BATTLECITY, "battlecity",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Credits for 2 Players",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "2", 0x01 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "1", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "5", 0x02 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "disabled", 0x04 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "enabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-07-21 09:57:03 +08:00
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_castlevania = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_CASTLEVANIA, "castlevania",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "3", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ "2", 0x08 },
|
|
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "100k", 0x00 },
|
|
|
|
|
{ "200k", 0x20 },
|
|
|
|
|
{ "300k", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "400k", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Normal", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_clucluland = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_CLUCLULAND, "clucluland",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ "4", 0x40 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "5", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "2", 0x60 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_drmario = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_DRMARIO, "drmario",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Drop Rate Increase After",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "7 Pills", 0x00 },
|
|
|
|
|
{ "8 Pills", 0x01 },
|
|
|
|
|
{ "9 Pills", 0x02 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ "10 Pills", 0x03 },
|
|
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Virus Level",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1", 0x00 },
|
|
|
|
|
{ "3", 0x04 },
|
|
|
|
|
{ "5", 0x08 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ "7", 0x0c },
|
|
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Drop Speed Up",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Slow", 0x00 },
|
|
|
|
|
{ "Medium", 0x10 },
|
|
|
|
|
{ "Fast", 0x20 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ "Fastest", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Free Play",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "disabled", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ "enabled", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "enabled", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_duckhunt = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_DUCKHUNT, "duckhunt",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x08 },
|
|
|
|
|
{ "Medium", 0x10 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x18 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Easy", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Miss per game",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "5", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Life",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "30000", 0x00 },
|
|
|
|
|
{ "50000", 0x40 },
|
|
|
|
|
{ "80000", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "100000", 0xc0 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_excitebike = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_EXITEBIKE, "excitebike",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Bike",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "100k and Every 50k", 0x00 },
|
|
|
|
|
{ "100k Only", 0x08 },
|
|
|
|
|
{ "Every 100k", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "None", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "1st Qualifying Time",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x20 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "2nd Qualifying Time",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_freedomforce = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_FREEDOMFORCE, "freedomforce",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Health Awarded At",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "10k 50k", 0x10 },
|
|
|
|
|
{ "20k 60k", 0x00 },
|
|
|
|
|
{ "20k 60k Every 60k", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "10k 50k Every 50k", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty (Damage)",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x00 },
|
|
|
|
|
{ "Easy", 0x40 },
|
|
|
|
|
{ "Hard", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hardest", 0x60 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty (Enemy)",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_goonies = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_GOONIES, "goonies",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "4", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "40000", 0x00 },
|
|
|
|
|
{ "50000", 0x20 },
|
|
|
|
|
{ "60000", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "70000", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Timer",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Slow", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Fast", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_gradius = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_GRADIUS, "gradius",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "4", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "100k", 0x00 },
|
|
|
|
|
{ "200k", 0x20 },
|
|
|
|
|
{ "300k", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "400k", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Normal", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_gumshoe = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_GUMSHOE, "gumshoe",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x08 },
|
|
|
|
|
{ "Easy", 0x00 },
|
|
|
|
|
{ "Hard", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hardest", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "5", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bullets per Balloon",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "2", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Man Awarded",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "At 50000", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "None", 0x80 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_hogansalley = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_HOGANSALLEY, "hogansalley",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x08 },
|
|
|
|
|
{ "Easy", 0x00 },
|
|
|
|
|
{ "Hard", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hardest", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Misses Per Game",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "5", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Life",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "30000", 0x00 },
|
|
|
|
|
{ "50000", 0x40 },
|
|
|
|
|
{ "80000", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "100000", 0xc0 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_iceclimber = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_ICECLIMBER, "iceclimber",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ "4", 0x10 },
|
|
|
|
|
{ "5", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "7", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x20 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Time before bear appears",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Long", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Short", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_jajamaru = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_JAJAMARU, "jajamaru",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ "4", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "5", 0x08 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2019-05-21 20:29:53 +08:00
|
|
|
static VSUNIGAME dipswitch_machrider = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_MACHRIDER, "machrider",
|
2019-05-21 20:29:53 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-21 20:29:53 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-21 20:29:53 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Time",
|
2019-05-21 20:29:53 +08:00
|
|
|
{
|
|
|
|
|
{ "280 (Easy)", 0x00 },
|
|
|
|
|
{ "250", 0x10 },
|
|
|
|
|
{ "220", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "200 (Hard)", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-21 20:29:53 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Enemies",
|
2019-05-21 20:29:53 +08:00
|
|
|
{
|
|
|
|
|
{ "Less", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "More", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-21 20:29:53 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2019-05-11 23:11:55 +08:00
|
|
|
static VSUNIGAME dipswitch_mightybj = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_MIGHTYBOMBJACK, "mightybj",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "5 Coins 1 Credit", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ "4", 0x08 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "5", 0x18 },
|
|
|
|
|
{ "2", 0x10 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-07-21 09:57:03 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_pinball = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_PINBALL, "pinball",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x01 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x06 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x04 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x03 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x07 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Side Drain Walls",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "High", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Low", 0x08 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Life",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "50000", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "70000", 0x10 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Balls",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x00 },
|
|
|
|
|
{ "4", 0x40 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "5", 0x20 },
|
|
|
|
|
{ "2", 0x60 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Ball Speed",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Slow", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Fast", 0x80 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_platoon = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_PLATOON, "platoon",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x04 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x08 },
|
|
|
|
|
{ "Medium", 0x10 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x18 },
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x20 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x40 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x60 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x80 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0xa0 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0xc0 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0xe0 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_rbibaseball = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_RBIBASEBALL, "atari_rbibb",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x01 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x02 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3 Coins 1 Credit", 0x03 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "1p-inn 2p-inn time-min",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "2 2 4", 0x0c },
|
|
|
|
|
{ "3 2 6", 0x00 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "4 3 7", 0x08 },
|
|
|
|
|
{ "2 1 3", 0x04 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x10 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_slalom = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_SLALOM, "slalom",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Freestyle Points",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Hold Time", 0x08 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Left Right", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x10 },
|
|
|
|
|
{ "Medium", 0x20 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x30 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Easy", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Allow Continue",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "enabled", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Inverted Input",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "disabled", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "enabled", 0x80 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_smb = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_SMB, "smb",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x06 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x01 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x05 },
|
|
|
|
|
{ "1 Coin 5 Credits", 0x03 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x04 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x02 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "3", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "2", 0x08 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Life",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "100 coins", 0x00 },
|
|
|
|
|
{ "150 coins", 0x20 },
|
|
|
|
|
{ "200 coins", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "250 coins", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Timer",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Slow", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Fast", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Continue Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "4", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_soccer = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_SOCCER, "soccer",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "1 Coin 4 Credits", 0x06 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Points Timer",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1000 Pts", 0x08 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "1200 Pts", 0x18 },
|
|
|
|
|
{ "600 Pts", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "800 Pts", 0x10 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x40 },
|
|
|
|
|
{ "Medium", 0x20 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x60 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Easy", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_starluster = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_STARLUSTER, "starluster",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3 Coins 1 Credit", 0x03 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_superskykid = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_SUPERSKYKID, "superskykid",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
|
2019-05-11 23:11:55 +08:00
|
|
|
{ "Normal", 0x01 },
|
|
|
|
|
{ "Medium", 0x02 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x03 },
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "3", 0x04 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "2", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x08 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3 Coins 1 Credit", 0x18 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_superxevious = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_SUPERXEVIOUS, "superxevious",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x10 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x20 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3 Coins 1 Credit", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_tetris = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_TETRIS, "tetris",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Normal", 0x04 },
|
|
|
|
|
{ "Medium", 0x08 },
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Hard", 0x0c },
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-07-21 09:57:03 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_tkoboxing = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_TKOBOXING, "tkoboxing",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x01 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x02 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "3 Coins 1 Credit", 0x03 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "Normal", 0x04 },
|
|
|
|
|
{ "Hard", 0x08 },
|
|
|
|
|
{ "Very Hard", 0x0c },
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, 0 },
|
2019-07-21 09:57:03 +08:00
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME dipswitch_topgun = {
|
2019-07-21 09:57:03 +08:00
|
|
|
VS_TOPGUN, "topgun",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Coinage",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "1 Coin 1 Credit", 0x00 },
|
|
|
|
|
{ "1 Coin 2 Credits", 0x04 },
|
|
|
|
|
{ "1 Coin 3 Credits", 0x02 },
|
|
|
|
|
{ "2 Coins 1 Credit", 0x01 },
|
|
|
|
|
{ "3 Coins 1 Credit", 0x05 },
|
|
|
|
|
{ "4 Coins 1 Credit", 0x06 },
|
|
|
|
|
{ "5 Coins 1 Credit", 0x03 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Free Play", 0x07 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Lives per Coin",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "3-12 Max", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "2-9 Max", 0x08 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Bonus Life",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "30k and Every 50k", 0x00 },
|
|
|
|
|
{ "50k and Every 100k", 0x20 },
|
|
|
|
|
{ "100k and Every 150k", 0x10 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "200k and Every 200k", 0x30 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Difficulty",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
|
|
|
|
{ "Easy", 0x00 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "Hard", 0x40 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
2019-05-11 23:11:55 +08:00
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ "Demo Sounds",
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
{ "enabled", 0x80 },
|
2019-07-21 09:57:03 +08:00
|
|
|
{ "disabled", 0x00 },
|
|
|
|
|
{ NULL, 0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-08-01 22:25:58 +08:00
|
|
|
{ NULL, { {0} } },
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
enum {
|
|
|
|
|
DPSW_NONE = 0,
|
|
|
|
|
DPSW_VSUNI,
|
|
|
|
|
DPSW_NWC,
|
|
|
|
|
};
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
static struct retro_core_option_definition option_defs_empty = {
|
2019-08-01 20:02:17 +08:00
|
|
|
NULL, NULL, NULL, { {0} }, NULL
|
2019-07-21 09:57:03 +08:00
|
|
|
};
|
|
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
static struct retro_core_option_definition vscoreopt[MAX_CORE_OPTIONS];
|
2019-05-11 23:11:55 +08:00
|
|
|
static VSUNIGAME *vsgame = NULL;
|
2019-08-01 22:25:58 +08:00
|
|
|
|
|
|
|
|
static char *core_key[MAX_CORE_OPTIONS];
|
2019-07-21 09:57:03 +08:00
|
|
|
static unsigned dipswitch_type = DPSW_NONE;
|
2019-08-01 22:25:58 +08:00
|
|
|
static unsigned numCoreOptions = 0;
|
|
|
|
|
static unsigned numValues[MAX_VALUES] = {0};
|
|
|
|
|
static uint8 dipswitchPreset = 0;
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
static const char *str_to_corekey(char *s)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
char *str = s;
|
2019-05-21 20:29:53 +08:00
|
|
|
unsigned i = 0;
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-05-21 20:29:53 +08:00
|
|
|
while (str[i] != '\0')
|
|
|
|
|
{
|
|
|
|
|
if (str[i] == ' ')
|
|
|
|
|
str[i] = '_';
|
|
|
|
|
i++;
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
2019-05-21 20:29:53 +08:00
|
|
|
str[i] = '\0';
|
2019-07-21 09:57:03 +08:00
|
|
|
|
|
|
|
|
return str;
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
static void make_core_options(struct retro_core_option_definition *vs_core_options)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
unsigned i, j;
|
2019-05-21 20:29:53 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
for (i = 0; i < numCoreOptions; i++)
|
2019-05-21 20:29:53 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
struct retro_core_option_value vars_empty = { NULL, NULL };
|
2019-08-01 22:25:58 +08:00
|
|
|
const char *game_name = vsgame->game_name;
|
|
|
|
|
const char *option_name = vsgame->core_options[i].option_name;
|
2019-07-21 09:57:03 +08:00
|
|
|
char key[100] = {0};
|
2019-05-21 20:29:53 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
/* Set core key and sanitize string */
|
2019-08-01 22:25:58 +08:00
|
|
|
sprintf(key, "fceumm_dipswitch_%s-%s", game_name, option_name);
|
2019-08-01 20:02:17 +08:00
|
|
|
core_key[i] = calloc(strlen(key) + 1, sizeof(char));
|
2019-07-21 09:57:03 +08:00
|
|
|
strcpy(core_key[i], key);
|
2019-08-01 22:25:58 +08:00
|
|
|
vs_core_options[i].key = str_to_corekey(core_key[i]);
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
/* Set desc */
|
2019-08-01 22:25:58 +08:00
|
|
|
vs_core_options[i].desc = option_name;
|
2019-05-21 20:29:53 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
/* Set info */
|
2019-08-01 22:25:58 +08:00
|
|
|
vs_core_options[i].info = NULL;
|
2019-07-21 09:57:03 +08:00
|
|
|
|
|
|
|
|
/* Set core values */
|
2019-08-01 22:25:58 +08:00
|
|
|
for (j = 0; j < numValues[i]; j++) {
|
|
|
|
|
const char *var_value = vsgame->core_options[i].settings[j].name;
|
|
|
|
|
vs_core_options[i].values[j].value = var_value;
|
2019-05-21 20:29:53 +08:00
|
|
|
}
|
2019-08-01 22:25:58 +08:00
|
|
|
|
|
|
|
|
vs_core_options[i].values[j] = vars_empty;
|
2019-07-21 09:57:03 +08:00
|
|
|
|
|
|
|
|
/* Set default value. Top entry used as default */
|
2019-08-01 22:25:58 +08:00
|
|
|
vs_core_options[i].default_value = vsgame->core_options[i].settings[0].name;
|
2019-05-21 20:29:53 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static VSUNIGAME *get_vsuni_dipswitch(unsigned id)
|
|
|
|
|
{
|
2019-05-11 23:11:55 +08:00
|
|
|
switch (id) {
|
|
|
|
|
case VS_BATTLECITY:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_battlecity);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_CASTLEVANIA:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_castlevania);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_CLUCLULAND:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_clucluland);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_DRMARIO:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_drmario);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_DUCKHUNT:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_duckhunt);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_EXITEBIKE:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_excitebike);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_FREEDOMFORCE:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_freedomforce);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_GOONIES:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_goonies);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_GRADIUS:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_gradius);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_GUMSHOE:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_gumshoe);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_HOGANSALLEY:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_hogansalley);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_ICECLIMBER:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_iceclimber);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_JAJAMARU:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_jajamaru);
|
2019-05-11 23:11:55 +08:00
|
|
|
/* case VS_LADIESGOLF: */
|
|
|
|
|
/* case VS_STROKEANDMATCHGOLF: */
|
|
|
|
|
case VS_MACHRIDER:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_machrider);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_MIGHTYBOMBJACK:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_mightybj);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_PINBALL:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_pinball);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_PLATOON:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_platoon);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_RBIBASEBALL:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_rbibaseball);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_SLALOM:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_slalom);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_SMB:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_smb);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_SOCCER:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_soccer);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_STARLUSTER:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_starluster);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_SUPERSKYKID:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_superskykid);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_SUPERXEVIOUS:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_superxevious);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_TETRIS:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_tetris);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_TKOBOXING:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_tkoboxing);
|
2019-05-11 23:11:55 +08:00
|
|
|
case VS_TOPGUN:
|
2019-05-21 20:29:53 +08:00
|
|
|
return (&dipswitch_topgun);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
2019-05-21 20:29:53 +08:00
|
|
|
FCEU_printf("No dipsettings found. %d\n", id);
|
|
|
|
|
return (NULL);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
2019-05-21 20:29:53 +08:00
|
|
|
static void update_dipswitch_vsuni(void)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
unsigned index_key;
|
2019-08-01 22:25:58 +08:00
|
|
|
uint8 vsdip_new = 0;
|
|
|
|
|
uint8 last_vsdip = FCEUI_VSUniGetDIPs();
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
for (index_key = 0; index_key < numCoreOptions; index_key++)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
struct retro_variable var = { NULL, NULL };
|
|
|
|
|
const char *key = vscoreopt[index_key].key;
|
|
|
|
|
unsigned index_value;
|
2019-07-20 00:12:02 +08:00
|
|
|
|
|
|
|
|
var.key = key;
|
2019-05-11 23:11:55 +08:00
|
|
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) == 0)
|
|
|
|
|
continue;
|
2019-07-21 09:57:03 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
for (index_value = 0; index_value < numValues[index_key]; index_value++)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
const char *var_value = vscoreopt[index_key].values[index_value].value;
|
2019-08-01 22:25:58 +08:00
|
|
|
uint8 value = 0;
|
2019-07-21 09:57:03 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
if (strcmp(var.value, var_value) != 0)
|
2019-05-11 23:11:55 +08:00
|
|
|
continue;
|
2019-08-01 22:25:58 +08:00
|
|
|
|
|
|
|
|
value = vsgame->core_options[index_key].settings[index_value].value;
|
2019-07-20 00:12:02 +08:00
|
|
|
vsdip_new |= value;
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
vsdip_new |= dipswitchPreset; /* Append any default preset to new value */
|
|
|
|
|
if (last_vsdip != vsdip_new)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-05-21 20:29:53 +08:00
|
|
|
vsdip = vsdip_new;
|
2019-05-11 23:11:55 +08:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
FCEU_printf("Dipswitch changed %d%d%d%d%d%d%d%d\n",
|
|
|
|
|
(vsdip >> 0) & 1, (vsdip >> 1) & 1, (vsdip >> 2) & 1, (vsdip >> 3) & 1,
|
|
|
|
|
(vsdip >> 4) & 1, (vsdip >> 5) & 1, (vsdip >> 6) & 1, (vsdip >> 7) & 1);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Nintendo World Championship */
|
2019-07-20 00:12:02 +08:00
|
|
|
static struct retro_core_option_definition dipswitch_nwc[] = {
|
|
|
|
|
{
|
|
|
|
|
"fceumm_dipswitch_nwc_swa",
|
|
|
|
|
"Dipswitch SW1 (+18.7secs)",
|
|
|
|
|
"Adds 18.7 seconds to total time. Total time = 5 mins + enabled dipswitches.",
|
|
|
|
|
{
|
|
|
|
|
{ "disabled", NULL },
|
|
|
|
|
{ "enabled", NULL },
|
|
|
|
|
{ NULL, NULL},
|
|
|
|
|
},
|
|
|
|
|
"disabled",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"fceumm_dipswitch_nwc_swb",
|
|
|
|
|
"Dipswitch SW1 (+37.5s)",
|
|
|
|
|
"Adds 37.5 seconds to total time. Total time = 5 mins + enabled dipswitches.",
|
|
|
|
|
{
|
|
|
|
|
{ "disabled", NULL },
|
|
|
|
|
{ "enabled", NULL },
|
|
|
|
|
{ NULL, NULL},
|
|
|
|
|
},
|
|
|
|
|
"disabled",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"fceumm_dipswitch_nwc_swc",
|
|
|
|
|
"Dipswitch SW1 (+1m 15s)",
|
|
|
|
|
"Adds 1 minute and 15 seconds to total time. Total time = 5 mins + enabled dipswitches.",
|
|
|
|
|
{
|
|
|
|
|
{ "disabled", NULL },
|
|
|
|
|
{ "enabled", NULL },
|
|
|
|
|
{ NULL, NULL},
|
|
|
|
|
},
|
|
|
|
|
"enabled",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"fceumm_dipswitch_nwc_swd",
|
|
|
|
|
"Dipswitch SW1 (+2m 30s)",
|
|
|
|
|
"Adds 2 minutes and 30 seconds to total time. Total time = 5 mins + time of enabled dipswitches.",
|
|
|
|
|
{
|
|
|
|
|
{ "disabled", NULL },
|
|
|
|
|
{ "enabled", NULL },
|
|
|
|
|
{ NULL, NULL},
|
|
|
|
|
},
|
|
|
|
|
"disabled",
|
|
|
|
|
},
|
2019-07-21 09:57:03 +08:00
|
|
|
|
2019-08-01 20:02:17 +08:00
|
|
|
{ NULL, NULL, NULL, { {0} }, NULL },
|
2019-05-11 23:11:55 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static void update_dipswitch_nwc(void)
|
|
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
unsigned i, dips = 0x00;
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-07-20 00:12:02 +08:00
|
|
|
for (i = 0; i < 4; i++)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
struct retro_variable var = { NULL, NULL };
|
2019-07-20 00:12:02 +08:00
|
|
|
const char *key = dipswitch_nwc[i].key;
|
2019-07-21 09:57:03 +08:00
|
|
|
|
2019-07-20 00:12:02 +08:00
|
|
|
var.key = key;
|
2019-07-21 09:57:03 +08:00
|
|
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) == 0)
|
|
|
|
|
continue;
|
|
|
|
|
if (strcmp(var.value, "enabled") != 0)
|
|
|
|
|
continue;
|
|
|
|
|
dips |= (1 << i);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GameInfo->cspecial != dips)
|
|
|
|
|
{
|
|
|
|
|
GameInfo->cspecial = dips;
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
FCEU_printf("Dipswitch changed = %d%d%d%d\n", (dips >> 0) & 1,
|
|
|
|
|
(dips >> 1) & 1, (dips >> 2) & 1, (dips >> 3) & 1);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
size_t set_dipswitch_variables(unsigned current_index, struct retro_core_option_definition *vars)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
unsigned index = current_index;
|
|
|
|
|
int dipsw_size = 0;
|
2019-05-11 23:11:55 +08:00
|
|
|
|
|
|
|
|
/* VSUNI Dipswitch */
|
|
|
|
|
if (GameInfo->type == GIT_VSUNI)
|
|
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
dipswitchPreset = FCEUI_VSUniGetDIPs();
|
2019-05-21 20:29:53 +08:00
|
|
|
vsgame = get_vsuni_dipswitch(GameInfo->gameid);
|
|
|
|
|
if (vsgame)
|
2019-05-11 23:11:55 +08:00
|
|
|
{
|
2019-08-01 22:25:58 +08:00
|
|
|
unsigned i, j;
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
numCoreOptions = 0;
|
2019-07-21 09:57:03 +08:00
|
|
|
dipswitch_type = DPSW_VSUNI;
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
/* Initialize dipswitch struct with empty values */
|
|
|
|
|
for (i = 0; i < MAX_CORE_OPTIONS; i++)
|
2019-07-21 09:57:03 +08:00
|
|
|
vscoreopt[i] = option_defs_empty;
|
2019-08-01 22:25:58 +08:00
|
|
|
|
|
|
|
|
/* Count number of core options and the number of values for each */
|
|
|
|
|
for (i = 0; i < MAX_CORE_OPTIONS; i++) {
|
|
|
|
|
if (vsgame->core_options[i].option_name) {
|
|
|
|
|
for (j = 0; j < MAX_VALUES; j++) {
|
|
|
|
|
if (vsgame->core_options[i].settings[j].name)
|
|
|
|
|
numValues[i]++;
|
|
|
|
|
}
|
|
|
|
|
numCoreOptions++;
|
|
|
|
|
}
|
2019-07-21 09:57:03 +08:00
|
|
|
}
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
make_core_options(vscoreopt);
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
/* Append dipswitch struct to main core options struct */
|
2019-07-21 09:57:03 +08:00
|
|
|
while (vscoreopt[dipsw_size].key) {
|
|
|
|
|
vars[index] = vscoreopt[dipsw_size];
|
|
|
|
|
index++;
|
|
|
|
|
dipsw_size++;
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
}
|
2019-07-21 09:57:03 +08:00
|
|
|
return (dipsw_size);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Nintendo World Championship cart (Mapper 105)*/
|
|
|
|
|
if (iNESCart.mapper == 105)
|
|
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
dipswitch_type = DPSW_NWC;
|
2019-07-20 00:12:02 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
while (dipswitch_nwc[dipsw_size].key) {
|
|
|
|
|
vars[index] = dipswitch_nwc[dipsw_size];
|
|
|
|
|
index++;
|
|
|
|
|
dipsw_size++;
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
2019-07-21 09:57:03 +08:00
|
|
|
return (dipsw_size);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
dipswitch_type = DPSW_NONE;
|
|
|
|
|
return (0);
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void update_dipswitch(void)
|
|
|
|
|
{
|
2019-07-21 09:57:03 +08:00
|
|
|
switch (dipswitch_type) {
|
|
|
|
|
case DPSW_VSUNI:
|
|
|
|
|
update_dipswitch_vsuni();
|
|
|
|
|
break;
|
|
|
|
|
case DPSW_NWC:
|
2019-05-11 23:11:55 +08:00
|
|
|
update_dipswitch_nwc();
|
2019-07-21 09:57:03 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-05-11 23:11:55 +08:00
|
|
|
|
2019-07-21 09:57:03 +08:00
|
|
|
void DPSW_Cleanup(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i;
|
|
|
|
|
|
2019-08-01 22:25:58 +08:00
|
|
|
for (i = 0; i < MAX_CORE_OPTIONS; i++) {
|
2019-07-21 09:57:03 +08:00
|
|
|
if (core_key[i]) {
|
|
|
|
|
free(core_key[i]);
|
|
|
|
|
core_key[i] = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-05-11 23:11:55 +08:00
|
|
|
}
|