Logo Search packages:      
Sourcecode: scummvm version File versions


/* ScummVM - Scumm Interpreter
 * Copyright (C) 2003-2004 The ScummVM project
 * 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 2
 * 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
 * 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * $Header: /cvsroot/scummvm/scummvm/queen/talk.h,v 1.34 2004/08/24 16:31:46 cyx Exp $

#ifndef QUEEN_TALK_H
#define QUEEN_TALK_H

#include "common/util.h"
#include "queen/structs.h"

namespace Queen {

class QueenEngine;

class Talk {

      //! Public interface to run a talk from a file
      static void talk(
            const char *filename,
            int personInRoom,
            char *cutawayFilename, 
            QueenEngine *vm);

      //! Public interface to speak a sentence
      static bool speak(
            const char *sentence, 
            Person *person, 
            const char *voiceFilePrefix,
            QueenEngine *vm);

      //! Read a string from ptr and update offset
      static void getString(const byte *ptr, uint16 &offset, char *str, int maxLength, int align = 2);

      //!  Collection of constants used by Talk
      enum {
        LINE_HEIGHT = 10,
        MAX_STRING_LENGTH = 255,
        MAX_TEXT_WIDTH = (320-18),
        PUSHUP = 4,
        ARROW_ZONE_UP   = 5,
        ARROW_ZONE_DOWN = 6,
        DOG_HEADER_SIZE = 20,

      //! Special commands for speech
      enum {
            SPEAK_DEFAULT      =  0,
            SPEAK_FACE_LEFT    = -1,
            SPEAK_FACE_RIGHT   = -2,
            SPEAK_FACE_FRONT   = -3,
            SPEAK_FACE_BACK    = -4,
            SPEAK_ORACLE       = -5,
            SPEAK_UNKNOWN_6    = -6,
            SPEAK_AMAL_ON      = -7,
            SPEAK_PAUSE        = -8,
            SPEAK_NONE         = -9

      struct DialogueNode {
            int16 head;
            int16 dialogueNodeValue1;
            int16 gameStateIndex;
            int16 gameStateValue;

#ifndef __PALM_OS__
      struct SpeechParameters {
            const char *name;
            signed char state,faceDirection;
            signed char body,bf,rf,af;
            const char *animation;
            signed char ff;
      struct SpeechParameters {
            const char name[11];
            signed char state,faceDirection;
            signed char body,bf,rf,af;
            const char animation[80];
            signed char ff;

      QueenEngine *_vm;

      bool _wasFullscren;

      //! Raw .dog file data (without 20 byte header)
      byte *_fileData;

      //! Number of dialogue levels
      int16 _levelMax;

      //! Unique key for this dialogue
      int16 _uniqueKey;

      //! Used to select voice files
      int16 _talkKey;

      int16 _jMax;

      //! Used by findDialogueString
      int16 _pMax;

      // Update game state efter dialogue
      int16 _gameState[2];
      int16 _testValue[2];
      int16 _itemNumber[2];

      //! String data
      uint16 _person1PtrOff;

      //! Cutaway data
      uint16 _cutawayPtrOff;

      //! Data used if we have talked to the person before
      uint16 _person2PtrOff;

      //! Data used if we haven't talked to the person before
      uint16 _joePtrOff;

      //! Is a talking head
      bool _talkHead;

      //! IDs for sentences
      DialogueNode _dialogueTree[18][6];

      //! Greeting from person Joe has talked to before
      char _person2String[MAX_STRING_SIZE];

      int _oldSelectedSentenceIndex;
      int _oldSelectedSentenceValue;

      char _talkString[5][MAX_STRING_SIZE];
      char _joeVoiceFilePrefix[5][MAX_STRING_SIZE];

#ifndef __PALM_OS__
      static const SpeechParameters _speechParameters[];

      Talk(QueenEngine *vm);

      //! Perform talk in file and return a cutaway filename
      void talk(const char *filename, int personInRoom, char *cutawayFilename);

      byte *loadDialogFile(const char *filename);

      //! Load talk data from .dog file 
      void load(const char *filename);

      //! First things spoken
      void initialTalk();

      //! Find a string in the dialogue tree
      void findDialogueString(uint16 offset, int16 id, int16 max, char *str);

      //! Get TalkSelected struct for this talk
      TalkSelected *talkSelected();

      //! Interface to the TalkSelected struct
      bool hasTalkedTo() { return talkSelected()->hasTalkedTo; }

      //! Interface to the TalkSelected struct
      void setHasTalkedTo() { talkSelected()->hasTalkedTo = true; }

      //! Get a selected value
      int16 selectedValue(int index) { 
            return talkSelected()->values[index-1];

      //! Set a selected value
      void selectedValue(int index, int16 value) { 
            talkSelected()->values[index-1] = value;

      //! The sentence will not be displayed again
      void disableSentence(int oldLevel, int selectedSentence);

      //! Select what to say
      int16 selectSentence();

      //! Speak sentence
      bool speak(const char *sentence, Person *person, const char *voiceFilePrefix);

      //! Convert command in sentence to command code
      int getSpeakCommand(const Person *person, const char *sentence, unsigned &index);

      //! Speak a part of a sentence
      void speakSegment(
                  const char *segmentStart, 
                  int length,
                  Person *person, 
                  int command,
                  const char *voiceFilePrefix,
                  int index);

      void headStringAnimation(const SpeechParameters *parameters, int bobNum, int bankNum);

      void stringAnimation(const SpeechParameters *parameters, int startFrame, int bankNum);

      void defaultAnimation(
            const char *segment, 
            bool isJoe,
            const SpeechParameters *parameters, 
            int startFrame, 
            int bankNum);

      int countSpaces(const char *segment);

      //! Get special parameters for speech
      const SpeechParameters *findSpeechParameters(
                  const char *name, 
                  int state, 
                  int faceDirection);

      int splitOption(const char *str, char optionText[5][MAX_STRING_SIZE]);
      int splitOptionHebrew(const char *str, char optionText[5][MAX_STRING_SIZE]);

      int splitOptionDefault(const char *str, char optionText[5][MAX_STRING_SIZE]);


} // End of namespace Queen


Generated by  Doxygen 1.6.0   Back to index