PRIVATE: implemented DossierChgSheet

This commit is contained in:
neuromancer 2021-03-18 19:17:42 -03:00
parent 43f0921816
commit 04851ed522
3 changed files with 77 additions and 1 deletions

View file

@ -228,7 +228,28 @@ static void fDossierBitmap(ArgArray args) {
} }
static void fDossierChgSheet(ArgArray args) { static void fDossierChgSheet(ArgArray args) {
debugC(1, kPrivateDebugScript, "WARNING: DossierChgSheet is not implemented"); assert(args.size() == 4);
debugC(1, kPrivateDebugScript, "DossierChgSheet(%s,%d,%d,%d)", args[0].u.str, args[1].u.val, args[2].u.val, args[3].u.val);
Common::String s(args[0].u.str);
MaskInfo m;
int p = args[1].u.val;
int x = args[2].u.val;
int y = args[3].u.val;
m.surf = g_private->loadMask(s, x, y, true);
m.cursor = "kExit";
m.nextSetting = "";
m.flag1 = NULL;
m.flag2 = NULL;
if (p == 0)
g_private->_dossierPrevSheetMask = m;
else if (p == 1)
g_private->_dossierNextSheetMask = m;
else
error("Invalid sheet number in DossierChgSheet %d", p);
g_private->_masks.push_front(m);
} }
static void fDossierPrevSuspect(ArgArray args) { static void fDossierPrevSuspect(ArgArray args) {

View file

@ -105,6 +105,8 @@ PrivateEngine::PrivateEngine(OSystem *syst, const ADGameDescription *gd)
_dossierSuspect = 0; _dossierSuspect = 0;
_dossierNextSuspectMask.clear(); _dossierNextSuspectMask.clear();
_dossierPrevSuspectMask.clear(); _dossierPrevSuspectMask.clear();
_dossierNextSheetMask.clear();
_dossierPrevSheetMask.clear();
// Diary // Diary
_diaryLocPrefix = "inface/diary/loclist/"; _diaryLocPrefix = "inface/diary/loclist/";
@ -216,6 +218,10 @@ Common::Error PrivateEngine::run() {
break; break;
else if (selectDossierPrevSuspect(mousePos)) else if (selectDossierPrevSuspect(mousePos))
break; break;
else if (selectDossierNextSheet(mousePos))
break;
else if (selectDossierPrevSheet(mousePos))
break;
selectPauseMovie(mousePos); selectPauseMovie(mousePos);
selectPhoneArea(mousePos); selectPhoneArea(mousePos);
@ -338,6 +344,16 @@ void PrivateEngine::clearAreas() {
_dossierPrevSuspectMask.surf->free(); _dossierPrevSuspectMask.surf->free();
delete _dossierPrevSuspectMask.surf; delete _dossierPrevSuspectMask.surf;
_dossierPrevSuspectMask.clear(); _dossierPrevSuspectMask.clear();
if (_dossierNextSheetMask.surf)
_dossierNextSheetMask.surf->free();
delete _dossierNextSheetMask.surf;
_dossierNextSheetMask.clear();
if (_dossierPrevSheetMask.surf)
_dossierPrevSheetMask.surf->free();
delete _dossierPrevSheetMask.surf;
_dossierPrevSheetMask.clear();
} }
void PrivateEngine::startPoliceBust() { void PrivateEngine::startPoliceBust() {
@ -625,6 +641,41 @@ bool PrivateEngine::selectDossierNextSuspect(Common::Point mousePos) {
return false; return false;
} }
bool PrivateEngine::selectDossierPrevSheet(Common::Point mousePos) {
if (_dossierNextSheetMask.surf == NULL)
return false;
if (inMask(_dossierPrevSheetMask.surf, mousePos)) {
if (_dossierPage == 1) {
_dossierPage = 0;
loadDossier();
drawMask(_dossierNextSuspectMask.surf);
drawMask(_dossierPrevSuspectMask.surf);
drawScreen();
}
return true;
}
return false;
}
bool PrivateEngine::selectDossierNextSheet(Common::Point mousePos) {
if (_dossierNextSheetMask.surf == NULL)
return false;
if (inMask(_dossierNextSheetMask.surf, mousePos)) {
DossierInfo m = _dossiers[_dossierSuspect];
if (_dossierPage == 0 && !m.page2.empty()) {
_dossierPage = 1;
loadDossier();
drawMask(_dossierNextSuspectMask.surf);
drawMask(_dossierPrevSuspectMask.surf);
drawScreen();
}
return true;
}
return false;
}
bool PrivateEngine::selectDossierPrevSuspect(Common::Point mousePos) { bool PrivateEngine::selectDossierPrevSuspect(Common::Point mousePos) {
if (_dossierPrevSuspectMask.surf == NULL) if (_dossierPrevSuspectMask.surf == NULL)
return false; return false;

View file

@ -228,8 +228,12 @@ public:
unsigned int _dossierPage; unsigned int _dossierPage;
MaskInfo _dossierNextSuspectMask; MaskInfo _dossierNextSuspectMask;
MaskInfo _dossierPrevSuspectMask; MaskInfo _dossierPrevSuspectMask;
MaskInfo _dossierNextSheetMask;
MaskInfo _dossierPrevSheetMask;
bool selectDossierNextSuspect(Common::Point); bool selectDossierNextSuspect(Common::Point);
bool selectDossierPrevSuspect(Common::Point); bool selectDossierPrevSuspect(Common::Point);
bool selectDossierNextSheet(Common::Point);
bool selectDossierPrevSheet(Common::Point);
void loadDossier(); void loadDossier();
// Police Bust // Police Bust