Skip to content

Commit c1fe36a

Browse files
committed
add specific support for european KDC roms
1 parent 323312c commit c1fe36a

File tree

6 files changed

+77
-74
lines changed

6 files changed

+77
-74
lines changed

src/kirby.cpp

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
#include "kirby.h"
77
#include <QString>
88

9-
const int fgPaletteBase[] = {0xD4A9, 0xD8ED};
10-
const int waterBase[][2] = {{0xA444, 0xE030},
11-
{0xA46E, 0xE05A}};
9+
const int fgPaletteBase[] = {0xD4A9, 0xD8ED, 0xD8ED};
10+
const int waterBase[][3] = {{0xA444, 0xE030, 0xE030},
11+
{0xA46E, 0xE05A, 0xE05A}};
1212

13-
const int paletteTable[] = {0x80D425, 0x80D869};
14-
const int waterTable[][2] = {{0x8484AF, 0x8484AF},
15-
{0x8484F1, 0x8484F1}};
16-
const int backgroundTable[][2] = {{0x80D0AF, 0x80D517},
17-
{0x80D304, 0x80D748},
18-
{0x80D324, 0x80D768},
19-
{0x84CD23, 0x84CD42}};
13+
const int paletteTable[] = {0x80D425, 0x80D869, 0x80D869};
14+
const int waterTable[][3] = {{0x8484AF, 0x8484AF, 0x8484AF},
15+
{0x8484F1, 0x8484F1, 0x8484F1}};
16+
const int backgroundTable[][3] = {{0x80D0AF, 0x80D517, 0x80D517},
17+
{0x80D304, 0x80D748, 0x80D748},
18+
{0x80D324, 0x80D768, 0x80D768},
19+
{0x84CD23, 0x84CD42, 0x84CD42}};
2020

21-
const int musicTable[] = {0x80C533, 0x80C99D};
22-
const int newMusicAddr[] = {0x80F440, 0x80F950};
21+
const int musicTable[] = {0x80C533, 0x80C99D, 0x80C99D};
22+
const int newMusicAddr[] = {0x80F440, 0x80F950, 0x80F950};
2323

2424
// first dimension is indexed by game number (0 = kirby, 1 = sts)
2525
const char* courseNames[][224 / 8] = {
@@ -70,40 +70,40 @@ const char* courseNames[][224 / 8] = {
7070

7171
const bg_t bgNames[] = {
7272
{"Background 1 (clouds)",
73-
{0x8290, 0xC290},
74-
{0x92BEB1, 0x90A836},
75-
{0x94AC83, 0x928000},
76-
{0xCD33, 0xCD52}},
73+
{0x8290, 0xC290, 0xC290},
74+
{0x92BEB1, 0x90A836, 0x90A836},
75+
{0x94AC83, 0x928000, 0x92855B},
76+
{0xCD33, 0xCD52, 0xCD52}},
7777

7878
{"Background 2 (stars & moon)",
79-
{0x83D0, 0xC3D0},
80-
{0x92D18C, 0x90B1B2},
81-
{0x94EDAB, 0x8EFB5F},
82-
{0xCECA, 0xCEE9}},
79+
{0x83D0, 0xC3D0, 0xC3D0},
80+
{0x92D18C, 0x90B1B2, 0x90B1B2},
81+
{0x94EDAB, 0x8EFB5F, 0x8EFB5F},
82+
{0xCECA, 0xCEE9, 0xCEE9}},
8383

8484
{"Background 3 (waterfalls)",
85-
{0x8330, 0xC330},
86-
{0x93A043, 0x90ED83},
87-
{0x94967D, 0x91E7A2},
88-
{0xCE79, 0xCE98}},
85+
{0x8330, 0xC330, 0xC330},
86+
{0x93A043, 0x90ED83, 0x90ED83},
87+
{0x94967D, 0x91E7A2, 0x91EE62},
88+
{0xCE79, 0xCE98, 0xCE98}},
8989

9090
{"Background 4 (jigsaw)",
91-
{0x82E0, 0xC2E0},
92-
{0x93E286, 0x91AD5B},
93-
{0x93D5F8, 0x91A0CD},
94-
{0xCE64, 0xCE83}},
91+
{0x82E0, 0xC2E0, 0xC2E0},
92+
{0x93E286, 0x91AD5B, 0x91B41B},
93+
{0x93D5F8, 0x91A0CD, 0x91A78D},
94+
{0xCE64, 0xCE83, 0xCE83}},
9595

9696
{"Background 5 (candy)",
97-
{0x8380, 0xC380},
98-
{0x92AB0F, 0x909494},
99-
{0x93FA68, 0x91E20F},
100-
{0xCFAE, 0xCFCD}},
97+
{0x8380, 0xC380, 0xC380},
98+
{0x92AB0F, 0x909494, 0x909494},
99+
{0x93FA68, 0x91E20F, 0x91E8CF},
100+
{0xCFAE, 0xCFCD, 0xCFCD}},
101101

102102
{"Background 6 (ocean)",
103-
{0x85E0, 0xC5E0},
104-
{0x9398A1, 0x90E5E1},
105-
{0x94DA7C, 0x92B347},
106-
{0xCFF3, 0xD012}}
103+
{0x85E0, 0xC5E0, 0xC5E0},
104+
{0x9398A1, 0x90E5E1, 0x90E5E1},
105+
{0x94DA7C, 0x92B347, 0x92B8A2},
106+
{0xCFF3, 0xD012, 0xD012}}
107107
/*
108108
something here (the GFX?) gets loaded to a different address than normal
109109
so it's not usable with the rest of the course BGs

src/kirby.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,21 @@ typedef std::map<uint, QString> StringMap;
2121

2222
typedef struct {
2323
char name[50];
24-
int palette[2];
25-
int pointer1[2];
26-
int pointer2[2];
27-
int anim[2];
24+
int palette[3];
25+
int pointer1[3];
26+
int pointer2[3];
27+
int anim[3];
2828
} bg_t;
2929

30-
extern const int fgPaletteBase[2];
31-
extern const int waterBase[2][2];
32-
extern const int bgPaletteBase[2];
30+
extern const int fgPaletteBase[3];
31+
extern const int waterBase[2][3];
32+
extern const int bgPaletteBase[3];
3333

34-
extern const int paletteTable[2];
35-
extern const int waterTable[2][2];
36-
extern const int backgroundTable[4][2];
37-
extern const int musicTable[2];
38-
extern const int newMusicAddr[2];
34+
extern const int paletteTable[3];
35+
extern const int waterTable[2][3];
36+
extern const int backgroundTable[4][3];
37+
extern const int musicTable[3];
38+
extern const int newMusicAddr[3];
3939

4040
extern const char* courseNames[][224 / 8];
4141
extern const bg_t bgNames[];

src/level.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,23 @@ using namespace stuff;
2828
const int numLevels[] = {28 * 8, 9 * 8};
2929

3030
//Locations of chunk data in ROM (using CPU addressing.)
31-
const int headerTable[] = {0x8aa670, 0x88a770};
32-
const int terrainTable[] = {0x8aa970, 0x88aa70, 0x85da80};
33-
const int obstacleTable[] = {0x8aac70, 0x88ad70, 0x85dd08};
34-
const int heightTable[] = {0x8aaf70, 0x88b070, 0x85db58};
35-
const int flagsTable[] = {0x8ab270, 0x88b370, 0x85dc30};
36-
const int rowStartTable[] = {0x8ab570, 0x88b670, 0x85dde0};
37-
const int rowEndTable[] = {0x8ab870, 0x88b970, 0x85deb8};
38-
const int rowOffsetTable[] = {0x8abb70, 0x88bc70, 0x85df90};
39-
const int layer1Table[] = {0x8abe70, 0x88bf70, 0x85e068};
40-
const int layer2Table[] = {0x8ac170, 0x88c270, 0x85e140};
41-
const int clippingTable[] = {0x8ac470, 0x88c570, 0x85e218};
31+
const int headerTable[] = {0x8aa670, 0x88a770, 0x88a770};
32+
const int terrainTable[] = {0x8aa970, 0x88aa70, 0x88aa70, 0x85da80};
33+
const int obstacleTable[] = {0x8aac70, 0x88ad70, 0x88ad70, 0x85dd08};
34+
const int heightTable[] = {0x8aaf70, 0x88b070, 0x88b070, 0x85db58};
35+
const int flagsTable[] = {0x8ab270, 0x88b370, 0x88b370, 0x85dc30};
36+
const int rowStartTable[] = {0x8ab570, 0x88b670, 0x88b670, 0x85dde0};
37+
const int rowEndTable[] = {0x8ab870, 0x88b970, 0x88b970, 0x85deb8};
38+
const int rowOffsetTable[] = {0x8abb70, 0x88bc70, 0x88bc70, 0x85df90};
39+
const int layer1Table[] = {0x8abe70, 0x88bf70, 0x88bf70, 0x85e068};
40+
const int layer2Table[] = {0x8ac170, 0x88c270, 0x88c270, 0x85e140};
41+
const int clippingTable[] = {0x8ac470, 0x88c570, 0x88c570, 0x85e218};
4242

4343
// for Special Tee Shot only
4444
const int widthTable = 0x85fa26;
4545
const int lengthTable = 0x85fab6;
4646

47-
const uint newDataAddress[] = {0xa88000, 0xa08000, 0xa08000};
47+
const uint newDataAddress[] = {0xa88000, 0xa08000, 0xa08000, 0xa08000};
4848

4949
// blank tile used for rendering playfield
5050
const maptile_t noTile = {0, 0, 0, {0, 0, 0, 0, 0, 0}};

src/mainwindow.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ void MainWindow::openFile() {
390390

391391
// dirty hack due to the fact that music track 0x83 was deleted
392392
// in the US/EU version of KDC, and further music tracks shifted down
393-
if (ver == ROMFile::kirby_us && levels[level]->music >= 0x83)
393+
if (ver != ROMFile::kirby_jp && levels[level]->music >= 0x83)
394394
levels[level]->music++;
395395
}
396396
}
@@ -506,7 +506,7 @@ void MainWindow::saveFile() {
506506
for (int i = 0; i < numLevels[game]; i++) {
507507
// dirty hack due to the fact that music track 0x83 was deleted
508508
// in the US/EU version of KDC, and further music tracks shifted down
509-
if (ver == ROMFile::kirby_us && levels[level]->music >= 0x84)
509+
if (ver != ROMFile::kirby_jp && levels[level]->music >= 0x84)
510510
rom.writeByte(newMusicAddr[ver] + i, levels[i]->music - 1);
511511
else
512512
rom.writeByte(newMusicAddr[ver] + i, levels[i]->music);

src/romfile.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,23 +70,24 @@ uint ROMFile::toOffset(uint address) {
7070
}
7171

7272
/*
73-
Opens the file and also verifies that it is one of the ROMS supported
73+
Opens the file and also verifies that it is one of the ROMs supported
7474
by the editor; displays a dialog and returns false on failure.
7575
7676
For KDC, this checks for the string "ninten" at various offsets.
7777
It also determines whether the ROM is headered or not.
7878
*/
79-
const struct {int address; char string[7]; ROMFile::game_e game;} versions[] = {
79+
const struct {int address; char string[7]; uint8_t region; ROMFile::game_e game;} versions[] = {
8080
// Kirby Bowl (JP)
81-
{0x8ECE, "ninten", ROMFile::kirby},
81+
{0x8ECE, "ninten", 0, ROMFile::kirby},
8282
// Kirby's Dream Course (US/EU)
83-
{0x8ECC, "ninten", ROMFile::kirby},
83+
{0x8ECC, "ninten", 1, ROMFile::kirby},
84+
{0x8ECC, "ninten", 2, ROMFile::kirby},
8485

8586
// Special Tee Shot (currently debug mode only)
8687
// checks title of rom (which can and may be changed); find something better
87-
{0xFFC0, "\xBD\xCD\xDF\xBC\xAC\xD9", ROMFile::sts},
88+
{0xFFC0, "\xBD\xCD\xDF\xBC\xAC\xD9", 0, ROMFile::sts},
8889

89-
{0, "", ROMFile::kirby}
90+
{0, "", 0, ROMFile::kirby}
9091
};
9192

9293
bool ROMFile::openROM(OpenMode flags) {
@@ -95,6 +96,7 @@ bool ROMFile::openROM(OpenMode flags) {
9596

9697
QSettings settings("settings.ini", QSettings::IniFormat, this);
9798
char buf[6];
99+
uint8_t region = readByte(0xFFD9);;
98100
bool debug = settings.value("MainWindow/debug", false).toBool();
99101

100102
header = this->size() % BANK_SIZE == 0x200;
@@ -104,7 +106,7 @@ bool ROMFile::openROM(OpenMode flags) {
104106
continue;
105107

106108
readBytes(versions[i].address, 6, buf);
107-
if (!memcmp(buf, versions[i].string, 6)) {
109+
if (!memcmp(buf, versions[i].string, 6) && region == versions[i].region) {
108110
game = versions[i].game;
109111
version = (ROMFile::version_e)i;
110112
return true;

src/romfile.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ class ROMFile: public QFile {
1717
public:
1818

1919
enum version_e {
20-
kirby_jp = 0,
21-
kirby_us = 1,
22-
sts_jp = 2
20+
kirby_jp,
21+
kirby_us,
22+
kirby_eu,
23+
sts_jp
2324
};
2425

2526
enum game_e {
26-
kirby = 0,
27-
sts = 1
27+
kirby,
28+
sts
2829
};
2930

3031
ROMFile();

0 commit comments

Comments
 (0)