Initial commit
This commit is contained in:
246
engines/watchmaker/classes/do_string.cpp
Normal file
246
engines/watchmaker/classes/do_string.cpp
Normal file
@@ -0,0 +1,246 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "watchmaker/classes/do_string.h"
|
||||
#include "watchmaker/globvar.h"
|
||||
#include "watchmaker/message.h"
|
||||
#include "watchmaker/define.h"
|
||||
#include "watchmaker/ll/ll_anim.h"
|
||||
#include "watchmaker/schedule.h"
|
||||
#include "watchmaker/ll/ll_string.h"
|
||||
#include "watchmaker/windows_hacks.h"
|
||||
#include "watchmaker/ll/ll_sound.h"
|
||||
#include "watchmaker/t2d/expr.h"
|
||||
#include "watchmaker/classes/do_sound.h"
|
||||
|
||||
// Locals
|
||||
#define DEFAULT_TEXT_X 25
|
||||
#define DEFAULT_TEXT_Y 537
|
||||
#define DEFAULT_TEXT_DX SCREEN_RES_X-DEFAULT_TEXT_X*2
|
||||
|
||||
namespace Watchmaker {
|
||||
|
||||
char UWStr[100];
|
||||
|
||||
/* -----------------18/03/98 11.11-------------------
|
||||
* PlayerSpeak
|
||||
* --------------------------------------------------*/
|
||||
bool PlayerSpeak(WGame &game, int32 n) {
|
||||
int32 EndSpeakTime, SentTime;
|
||||
uint8 show_text;
|
||||
int32 speechn = 0;
|
||||
Init &init = game.init;
|
||||
|
||||
if (!n) return false;
|
||||
|
||||
if (Sentence[n][0] == '*') {
|
||||
StartAnim(game, aBOH);
|
||||
return false;
|
||||
} else if (Sentence[n][0] == '#') {
|
||||
StartAnim(game, aPENSA);
|
||||
return false;
|
||||
}
|
||||
|
||||
SentTime = VisemaRecon(n);
|
||||
if ((n <= 15) && (bDialogActive)) {
|
||||
switch (n) {
|
||||
case 1:
|
||||
SentTime = 4560;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocOROLOGIAIO;
|
||||
break;
|
||||
case 2:
|
||||
SentTime = 1200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 3:
|
||||
SentTime = 5960;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 4:
|
||||
SentTime = 8200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocCHIRURGO;
|
||||
break;
|
||||
case 5:
|
||||
SentTime = 800;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocCHIRURGO;
|
||||
break;
|
||||
case 6:
|
||||
SentTime = 4560;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 7:
|
||||
SentTime = 7200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocCHIRURGO;
|
||||
break;
|
||||
case 8:
|
||||
SentTime = 7200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 9:
|
||||
SentTime = 5520;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocCHIRURGO;
|
||||
break;
|
||||
case 10:
|
||||
SentTime = 7720;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 11:
|
||||
SentTime = 1600;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocCHIRURGO;
|
||||
break;
|
||||
case 12:
|
||||
SentTime = 1200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 13:
|
||||
SentTime = 2560;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
case 14:
|
||||
SentTime = 6720;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocTRADUTTORE;
|
||||
break;
|
||||
case 15:
|
||||
SentTime = 2200;
|
||||
init.Anim[aDUMMY_dR391_A].obj = ocVECCHIO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (game.gameOptions.subtitles_on) show_text = 1;
|
||||
else show_text = 0;
|
||||
|
||||
if (game.gameOptions.speech_on) {
|
||||
if (StartSpeech(game, n)) {
|
||||
speechn = MAX_SOUNDS + n;
|
||||
DebugLogWindow("PP %d, SentTime %d", speechn, SentTime);
|
||||
} else show_text = 1;
|
||||
}
|
||||
|
||||
if (show_text) {
|
||||
if (InvStatus & INV_ON)
|
||||
Text(DEFAULT_TEXT_X, DEFAULT_TEXT_Y, DEFAULT_TEXT_DX, Sentence[n]);
|
||||
else
|
||||
Text(20, DEFAULT_TEXT_Y, DEFAULT_TEXT_DX, Sentence[n]);
|
||||
}
|
||||
|
||||
// DebugLogFile("PLS (%d) %s",SentTime,Sentence[n]);
|
||||
EndSpeakTime = TheTime + SentTime;
|
||||
bSomeOneSpeak = TRUE;
|
||||
bPlayerSpeak = TRUE;
|
||||
bSkipTalk = FALSE;
|
||||
|
||||
if (speechn)
|
||||
_vm->_messageSystem.doEvent(EventClass::MC_STRING, ME_PLAYERCONTINUESPEAK_WAITWAVE, MP_WAIT_RETRACE, 0, 0, 0, &speechn, nullptr, nullptr);
|
||||
else
|
||||
_vm->_messageSystem.doEvent(EventClass::MC_STRING, ME_PLAYERCONTINUESPEAK, MP_WAIT_RETRACE, 0, 0, 0, &EndSpeakTime, nullptr, nullptr);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------18/03/98 11.06-------------------
|
||||
* doString
|
||||
* --------------------------------------------------*/
|
||||
void doString(WGame &game) {
|
||||
switch (TheMessage->event) {
|
||||
case ME_PLAYERSPEAK:
|
||||
PlayerSpeak(game, TheMessage->wparam1);
|
||||
break;
|
||||
|
||||
case ME_PLAYERCONTINUESPEAK:
|
||||
if (((int32)TheTime > TheMessage->lparam[0]) || (bSkipTalk)) {
|
||||
bSomeOneSpeak = false;
|
||||
bPlayerSpeak = false;
|
||||
bSkipTalk = false;
|
||||
bAnimWaitText = false;
|
||||
ClearText();
|
||||
if (!bDialogActive) _vm->_messageSystem.addWaitingMsgs(MP_WAIT_LINK);
|
||||
} else {
|
||||
TheMessage->flags |= MP_WAIT_RETRACE;
|
||||
ReEvent();
|
||||
}
|
||||
break;
|
||||
case ME_PLAYERCONTINUESPEAK_WAITWAVE: {
|
||||
bool isp;
|
||||
|
||||
isp = sIsPlaying(TheMessage->lparam[0]);
|
||||
|
||||
if ((!isp) || bSkipTalk) {
|
||||
if (bSkipTalk && isp) {
|
||||
sStopSound(TheMessage->lparam[0]);
|
||||
}
|
||||
|
||||
bSomeOneSpeak = false;
|
||||
bPlayerSpeak = false;
|
||||
bSkipTalk = false;
|
||||
bAnimWaitText = false;
|
||||
ClearText();
|
||||
if (!bDialogActive) _vm->_messageSystem.addWaitingMsgs(MP_WAIT_LINK);
|
||||
} else {
|
||||
TheMessage->flags |= MP_WAIT_RETRACE;
|
||||
ReEvent();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------17/03/98 16.19-------------------
|
||||
* ShowObjName
|
||||
* --------------------------------------------------*/
|
||||
void ShowObjName(Init &init, int32 ob) {
|
||||
if (bUseWith & UW_ON) {
|
||||
if (bUseWith & UW_USEDI)
|
||||
snprintf(UWStr, 100, "Use %s with ", ObjName[init.InvObj[UseWith[USED]].name]);
|
||||
else
|
||||
snprintf(UWStr, 100, "Use %s with ", ObjName[init.Obj[UseWith[USED]].name]);
|
||||
|
||||
if ((UseWith[USED] != ob) || (bUseWith & UW_USEDI))
|
||||
if (ObjName[init.Obj[ob].name] != nullptr)
|
||||
Common::strlcat(UWStr, ObjName[init.Obj[ob].name], 100);
|
||||
Text(DEFAULT_TEXT_X, DEFAULT_TEXT_Y, DEFAULT_TEXT_DX, UWStr);
|
||||
} else if (!ob || !init.Obj[ob].name)
|
||||
ClearText();
|
||||
else
|
||||
Text(DEFAULT_TEXT_X, DEFAULT_TEXT_Y, DEFAULT_TEXT_DX, ObjName[init.Obj[ob].name]);
|
||||
}
|
||||
|
||||
/* -----------------17/03/98 16.19-------------------
|
||||
* ShowInvObjName
|
||||
* --------------------------------------------------*/
|
||||
void ShowInvObjName(Init &init, int32 obj) {
|
||||
if (bUseWith & UW_ON) {
|
||||
if (bUseWith & UW_USEDI)
|
||||
snprintf(UWStr, 100, "Use %s with ", ObjName[init.InvObj[UseWith[USED]].name]);
|
||||
else
|
||||
snprintf(UWStr, 100, "Use %s with ", ObjName[init.Obj[UseWith[USED]].name]);
|
||||
|
||||
if ((UseWith[USED] != obj) || !(bUseWith & UW_USEDI))
|
||||
if (ObjName[init.InvObj[obj].name] != nullptr)
|
||||
Common::strlcat(UWStr, ObjName[init.InvObj[obj].name], 100);
|
||||
Text(DEFAULT_TEXT_X, DEFAULT_TEXT_Y, DEFAULT_TEXT_DX, UWStr);
|
||||
} else //if ( !obj )
|
||||
ClearText();
|
||||
// else
|
||||
// Text( 100, d3dappi.szClient.cy-30, ObjName[InvObj[obj].name] );
|
||||
}
|
||||
|
||||
} // End of namespace Watchmaker
|
||||
Reference in New Issue
Block a user