I hope this fixes the control panel for other BS1 versions.
svn-id: r11785
This commit is contained in:
parent
f533de72e4
commit
2c19e18fc8
2 changed files with 45 additions and 2 deletions
|
@ -92,6 +92,10 @@ void ResMan::loadCluDescript(const char *fileName) {
|
||||||
} else
|
} else
|
||||||
_prj.clu[clusCnt] = NULL;
|
_prj.clu[clusCnt] = NULL;
|
||||||
free(cluIndex);
|
free(cluIndex);
|
||||||
|
|
||||||
|
if (_prj.clu[3]->grp[5]->noRes == 29)
|
||||||
|
for (uint8 cnt = 0; cnt < 29; cnt++)
|
||||||
|
_srIdList[cnt] = 0x04050000 | cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResMan::freeCluDescript(void) {
|
void ResMan::freeCluDescript(void) {
|
||||||
|
@ -236,6 +240,8 @@ File *ResMan::openClusterFile(uint32 id) {
|
||||||
BsMemHandle *ResMan::resHandle(uint32 id) {
|
BsMemHandle *ResMan::resHandle(uint32 id) {
|
||||||
uint8 cluster = (uint8)((id >> 24) - 1);
|
uint8 cluster = (uint8)((id >> 24) - 1);
|
||||||
uint8 group = (uint8)(id >> 16);
|
uint8 group = (uint8)(id >> 16);
|
||||||
|
if ((id >> 16) == 0x0405)
|
||||||
|
id = _srIdList[id & 0xFFFF];
|
||||||
|
|
||||||
return &(_prj.clu[cluster]->grp[group]->resHandle[id & 0xFFFF]);
|
return &(_prj.clu[cluster]->grp[group]->resHandle[id & 0xFFFF]);
|
||||||
}
|
}
|
||||||
|
@ -243,6 +249,8 @@ BsMemHandle *ResMan::resHandle(uint32 id) {
|
||||||
uint32 ResMan::resLength(uint32 id) {
|
uint32 ResMan::resLength(uint32 id) {
|
||||||
uint8 cluster = (uint8)((id >> 24) - 1);
|
uint8 cluster = (uint8)((id >> 24) - 1);
|
||||||
uint8 group = (uint8)(id >> 16);
|
uint8 group = (uint8)(id >> 16);
|
||||||
|
if ((id >> 16) == 0x0405)
|
||||||
|
id = _srIdList[id & 0xFFFF];
|
||||||
|
|
||||||
return _prj.clu[cluster]->grp[group]->length[id & 0xFFFF];
|
return _prj.clu[cluster]->grp[group]->length[id & 0xFFFF];
|
||||||
}
|
}
|
||||||
|
@ -250,6 +258,8 @@ uint32 ResMan::resLength(uint32 id) {
|
||||||
uint32 ResMan::resOffset(uint32 id) {
|
uint32 ResMan::resOffset(uint32 id) {
|
||||||
uint8 cluster = (uint8)((id >> 24) - 1);
|
uint8 cluster = (uint8)((id >> 24) - 1);
|
||||||
uint8 group = (uint8)(id >> 16);
|
uint8 group = (uint8)(id >> 16);
|
||||||
|
if ((id >> 16) == 0x0405)
|
||||||
|
id = _srIdList[id & 0xFFFF];
|
||||||
|
|
||||||
return _prj.clu[cluster]->grp[group]->offset[id & 0xFFFF];
|
return _prj.clu[cluster]->grp[group]->offset[id & 0xFFFF];
|
||||||
}
|
}
|
||||||
|
@ -313,3 +323,35 @@ void ResMan::openScriptResourceBigEndian(uint32 id) {
|
||||||
data++;
|
data++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 ResMan::_srIdList[29] = { // the file numbers differ for the control panel file IDs, so we need this array
|
||||||
|
0,
|
||||||
|
0x04050000,
|
||||||
|
0,
|
||||||
|
0x04050001,
|
||||||
|
0x04050002,
|
||||||
|
0x04050003,
|
||||||
|
0x04050004,
|
||||||
|
0x04050005,
|
||||||
|
0x04050006,
|
||||||
|
0x04050007,
|
||||||
|
0x04050000,
|
||||||
|
0x04050009,
|
||||||
|
0x0405000A,
|
||||||
|
0x0405000B,
|
||||||
|
0x0405000C,
|
||||||
|
0x0405000D,
|
||||||
|
0x0405000E,
|
||||||
|
0x0405000F,
|
||||||
|
0x04050010,
|
||||||
|
0x04050011,
|
||||||
|
0x04050012,
|
||||||
|
0x04050013,
|
||||||
|
0x04050014,
|
||||||
|
0x04050015,
|
||||||
|
0x04050016,
|
||||||
|
0x04050017,
|
||||||
|
0x04050018,
|
||||||
|
0x04050019,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
|
@ -61,9 +61,9 @@ public:
|
||||||
Header *lockScript(uint32 scrID);
|
Header *lockScript(uint32 scrID);
|
||||||
void unlockScript(uint32 scrID);
|
void unlockScript(uint32 scrID);
|
||||||
FrameHeader *fetchFrame(void *resourceData, uint32 frameNo);
|
FrameHeader *fetchFrame(void *resourceData, uint32 frameNo);
|
||||||
uint32 resLength(uint32 id); // this should be private. it's used in SwordSound for endian conversion, though
|
|
||||||
// make it private again when the mixer supports little endian data.
|
|
||||||
private:
|
private:
|
||||||
|
uint32 filesInGroup(uint32 id);
|
||||||
|
uint32 resLength(uint32 id);
|
||||||
BsMemHandle *resHandle(uint32 id);
|
BsMemHandle *resHandle(uint32 id);
|
||||||
uint32 resOffset(uint32 id);
|
uint32 resOffset(uint32 id);
|
||||||
void openCptResourceBigEndian(uint32 id);
|
void openCptResourceBigEndian(uint32 id);
|
||||||
|
@ -76,6 +76,7 @@ private:
|
||||||
BsPrj _prj;
|
BsPrj _prj;
|
||||||
MemMan *_memMan;
|
MemMan *_memMan;
|
||||||
static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags
|
static const uint32 _scriptList[TOTAL_SECTIONS]; //a table of resource tags
|
||||||
|
static uint32 _srIdList[29];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //RESMAN_H
|
#endif //RESMAN_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue