simplified character mode handling

svn-id: r26074
This commit is contained in:
Nicola Mettifogo 2007-03-10 22:55:09 +00:00
parent 4e5aa19f74
commit 93d910bf2d
4 changed files with 27 additions and 16 deletions

View file

@ -179,15 +179,15 @@ void Disk::loadTalk(const char *name, Cnv *cnv) {
} else {
// character talk
/*
if (scumm_stricmp(name, _doughName) &&
scumm_stricmp(name, _dinoName) &&
scumm_stricmp(name, _donnaName) &&
scumm_stricmp(name, _drkiName)) return;
*/
char v20[PATH_LEN];
char *v24 = const_cast<char*>(name);
if (!scumm_strnicmp(v24, "mini", 4)) {
if (IS_MINI_CHARACTER(v24)) {
v24+=4;
}
@ -207,10 +207,10 @@ Script* Disk::loadLocation(const char *name) {
char archivefile[PATH_LEN];
if (_vm->_characterName[0] == 'm') {
if (IS_MINI_CHARACTER(_vm->_characterName)) {
sprintf(archivefile, "%s%s", _vm->_characterName+4, _vm->_languageDir);
} else {
if (_vm->_characterName[0] == 'D') strcpy(archivefile, _vm->_languageDir);
if (IS_DUMMY_CHARACTER(_vm->_characterName)) strcpy(archivefile, _vm->_languageDir);
else {
sprintf(archivefile, "%s%s", _vm->_characterName, _vm->_languageDir);
}
@ -257,13 +257,13 @@ Script* Disk::loadScript(const char* name) {
void Disk::loadHead(const char* name, StaticCnv* cnv) {
char path[PATH_LEN];
/*
if (scumm_stricmp(name, _doughName) &&
scumm_stricmp(name, _dinoName) &&
scumm_stricmp(name, _donnaName) &&
scumm_stricmp(name, _drkiName)) return;
if (!scumm_strnicmp(name, "mini", 4)) {
*/
if (IS_MINI_CHARACTER(name)) {
name += 4;
}
@ -290,7 +290,7 @@ void Disk::loadFont(const char* name, Cnv* cnv) {
void Disk::loadObjects(const char *name, Cnv* cnv) {
if (!scumm_strnicmp("mini", name, 4)) {
if (IS_MINI_CHARACTER(name)) {
name += 4;
}

View file

@ -829,7 +829,7 @@ void freeCharacterFrames() {
_vm->_graphics->freeCnv(&_tempFrames);
if (_vm->_characterName[0] != 'D') {
if (!IS_DUMMY_CHARACTER(_vm->_characterName)) {
_vm->_graphics->freeCnv(&_miniCharacterFrames);
_vm->freeTable(_objectsNames);
_vm->_graphics->freeCnv(&_yourTalk);
@ -840,7 +840,7 @@ void freeCharacterFrames() {
}
void Parallaction::selectCharacterMusic(const char *name) {
if (!scumm_strnicmp(name, "mini", 4))
if (IS_MINI_CHARACTER(name))
name+=4;
if (!scumm_stricmp(name, _dinoName)) {
@ -859,7 +859,7 @@ void Parallaction::changeCharacter(const char *name) {
bool miniCharacter = false;
if (!scumm_strnicmp(name, "mini", 4)) {
if (IS_MINI_CHARACTER(name)) {
name+=4;
miniCharacter = true;
}
@ -885,10 +885,10 @@ void Parallaction::changeCharacter(const char *name) {
strcpy(path, v32);
_disk->loadFrames(path, &_tempFrames);
_disk->loadHead(path, &_yourHead);
_disk->loadTalk(path, &_yourTalk);
if (!IS_DUMMY_CHARACTER(name)) {
_disk->loadHead(path, &_yourHead);
_disk->loadTalk(path, &_yourTalk);
if (name[0] != 'D') {
sprintf(path, "mini%s", v32);
_disk->loadFrames(path, &_miniCharacterFrames);

View file

@ -149,6 +149,17 @@ extern const char *_minidonnaName;
extern const char *_minidoughName;
extern const char *_minidrkiName;
// Various ways of detecting character modes used to exist
// inside the engine, so they have been unified in the two
// following macros.
// Mini characters are those used in far away shots, like
// the highway scenery, while Dummy characters are a mere
// workaround to keep the engine happy when showing slides.
// As a sidenote, standard sized characters' names start
// with a lowercase 'd'.
#define IS_MINI_CHARACTER(s) (((s)[0] == 'm'))
#define IS_DUMMY_CHARACTER(s) (((s)[0] == 'D'))
void waitUntilLeftClick();
void addNode(Node *list, Node *n);

View file

@ -122,7 +122,7 @@ void Parallaction::doLoadGame(uint16 slot) {
strcpy(_vm->_characterName, _minidonnaName);
}
if (_vm->_characterName[0] == 'm') {
if (IS_MINI_CHARACTER(_vm->_characterName)) {
strcpy(filename, _vm->_characterName+4);
} else {
strcpy(filename, _vm->_characterName);