mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 14:18:37 +00:00
114 lines
3.9 KiB
C++
114 lines
3.9 KiB
C++
/* 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/>.
|
|
*
|
|
*/
|
|
|
|
#ifndef DRAGONS_TALK_H
|
|
#define DRAGONS_TALK_H
|
|
|
|
#include "common/str.h"
|
|
#include "dragons/scriptopcodes.h"
|
|
|
|
namespace Dragons {
|
|
|
|
class BigfileArchive;
|
|
class Actor;
|
|
class DragonsEngine;
|
|
|
|
struct TalkDialogEntry {
|
|
char dialogText[600];
|
|
uint32 textIndex;
|
|
uint32 textIndex1;
|
|
byte *scriptCodeStartPtr;
|
|
byte *scriptCodeEndPtr;
|
|
uint16 flags;
|
|
uint8 xPosMaybe;
|
|
uint8 yPosMaybe;
|
|
int16 field_26c;
|
|
uint16 iniId;
|
|
bool hasText;
|
|
};
|
|
|
|
|
|
class Talk {
|
|
public:
|
|
uint32 _dat_8008e7e8_dialogBox_x1;
|
|
uint32 _dat_8008e844_dialogBox_y1;
|
|
uint32 _dat_8008e848_dialogBox_x2;
|
|
uint32 _dat_8008e874_dialogBox_y2;
|
|
private:
|
|
DragonsEngine *_vm;
|
|
BigfileArchive *_bigfileArchive;
|
|
Common::Array<TalkDialogEntry*> _dialogEntries;
|
|
uint32 _defaultResponseTbl[45];
|
|
|
|
uint8 _dat_800726ec_tfont_field0;
|
|
uint8 _dat_800726f0_tfont_field2;
|
|
|
|
uint8 _dat_800633f8_talkDialogFlag;
|
|
|
|
public:
|
|
Talk(DragonsEngine *vm, BigfileArchive *bigfileArchive);
|
|
void init();
|
|
bool loadText(uint32 textIndex, uint16 *textBuffer, uint16 bufferLength);
|
|
void printWideText(byte *text);
|
|
|
|
void talkFromIni(uint32 iniId, uint32 textIndex);
|
|
void flickerRandomDefaultResponse();
|
|
|
|
void loadAndDisplayDialogAroundPoint(uint32 textId, uint16 x, uint16 y, uint16 param_4, int16 param_5);
|
|
uint32 displayDialogAroundINI(uint32 iniId, uint16 *dialogText, uint32 textIndex);
|
|
void displayDialogAroundPoint(uint16 *dialogText, uint16 x, uint16 y, uint16 param_4, int16 param_5, uint32 textId);
|
|
void displayDialogAroundActor(Actor *actor, uint16 param_2, uint16 *dialogText, uint32 textIndex);
|
|
|
|
void FUN_8003239c(uint16 *dialog, int16 x, int16 y, int32 param_4, uint16 param_5, Actor *actor, uint16 startSequenceId, uint16 endSequenceId, uint32 textId);
|
|
|
|
uint8 conversation_related_maybe(uint16 *dialogText, uint16 x, uint16 y, uint16 param_4, int16 param_5, uint32 textId, int16 param_7);
|
|
|
|
void addTalkDialogEntry(TalkDialogEntry *talkDialogEntry);
|
|
void clearDialogEntries();
|
|
|
|
bool talkToActor(ScriptOpCall &scriptOpCall);
|
|
|
|
uint somethingTextAndSpeechAndAnimRelated(Actor *actor, int16 sequenceId1, int16 sequenceId2, uint32 textIndex, uint16 param_5);
|
|
void FUN_8001a7c4_clearDialogBoxMaybe(); //clear box maybe?
|
|
|
|
void playDialogAudioDontWait(uint32 textIndex);
|
|
|
|
private:
|
|
void copyTextToBuffer(uint16 *destBuffer, byte *src, uint32 destBufferLength);
|
|
uint32 wideStrLen(uint16 *text);
|
|
TalkDialogEntry *displayTalkDialogMenu(Common::Array<TalkDialogEntry*> dialogEntries);
|
|
void exitTalkMenu(bool isFlag8Set, bool isFlag100Set, Common::Array<TalkDialogEntry*> dialogEntries);
|
|
uint32 getDefaultResponseTextIndex();
|
|
void initDefaultResponseTable();
|
|
uint32 strlenUTF16(uint16 *text);
|
|
uint16 *findCharInU16Str(uint16 *text, uint16 chr);
|
|
void drawDialogBox(uint32 x1, uint32 y1, uint32 x2, uint32 y2, uint16 unk);
|
|
uint16 *UTF16ToUTF16Z(uint16 *dest, uint16 *src);
|
|
uint16 findLastPositionOf5cChar(uint16 *text);
|
|
uint32 truncateDialogText(uint16 *srcText, uint16 *destText, uint32 srcLength, uint16 destLength);
|
|
|
|
uint32 extractTextIndex(Common::File *fd, uint16 offset);
|
|
};
|
|
|
|
} // End of namespace Dragons
|
|
|
|
#endif //DRAGONS_TALK_H
|