diff options
Diffstat (limited to 'sword2/speech.cpp')
| -rw-r--r-- | sword2/speech.cpp | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/sword2/speech.cpp b/sword2/speech.cpp deleted file mode 100644 index da6bd258ea..0000000000 --- a/sword2/speech.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright (C) 1994-1998 Revolution Software Ltd. - * Copyright (C) 2003-2006 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 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "common/stdafx.h" -#include "common/file.h" - -#include "sword2/sword2.h" -#include "sword2/console.h" -#include "sword2/defs.h" -#include "sword2/logic.h" -#include "sword2/maketext.h" -#include "sword2/resman.h" - -namespace Sword2 { - -// To request the status of a target, we run its 4th script, get-speech-state. -// This will cause RESULT to be set to either 1 (target is waiting) or 0 -// (target is busy). - -// Distance kept above talking sprite -#define GAP_ABOVE_HEAD 20 - -enum { - S_OB_GRAPHIC = 0, - S_OB_SPEECH = 1, - S_OB_LOGIC = 2, - S_OB_MEGA = 3, - - S_TEXT = 4, - S_WAV = 5, - S_ANIM = 6, - S_DIR_TABLE = 7, - S_ANIM_MODE = 8 -}; - -/** - * Sets _textX and _textY for position of text sprite. Note that _textX is - * also used to calculate speech pan. - */ - -void Logic::locateTalker(int32 *params) { - // params: 0 pointer to ob_graphic - // 1 pointer to ob_speech - // 2 pointer to ob_logic - // 3 pointer to ob_mega - // 4 encoded text number - // 5 wav res id - // 6 anim res id - // 7 pointer to anim table - // 8 animation mode 0 lip synced, - // 1 just straight animation - - if (!_animId) { - // There is no animation. Assume it's voice-over text, and put - // it at the bottom of the screen. - - _textX = 320; - _textY = 400; - return; - } - - byte *file = _vm->_resman->openResource(_animId); - - // '0' means 1st frame - - CdtEntry cdt_entry; - FrameHeader frame_head; - - cdt_entry.read(_vm->fetchCdtEntry(file, 0)); - frame_head.read(_vm->fetchFrameHeader(file, 0)); - - // Note: This part of the code is quite similar to registerFrame(). - - if (cdt_entry.frameType & FRAME_OFFSET) { - // The frame has offsets, i.e. it's a scalable mega frame - ObjectMega obMega(decodePtr(params[S_OB_MEGA])); - - uint16 scale = obMega.calcScale(); - - // Calc suitable centre point above the head, based on scaled - // height - - // just use 'feet_x' as centre - _textX = obMega.getFeetX(); - - // Add scaled y-offset to feet_y coord to get top of sprite - _textY = obMega.getFeetY() + (cdt_entry.y * scale) / 256; - } else { - // It's a non-scaling anim - calc suitable centre point above - // the head, based on scaled width - - // x-coord + half of width - _textX = cdt_entry.x + frame_head.width / 2; - _textY = cdt_entry.y; - } - - _vm->_resman->closeResource(_animId); - - // Leave space above their head - _textY -= GAP_ABOVE_HEAD; - - // Adjust the text coords for RDSPR_DISPLAYALIGN - - ScreenInfo *screenInfo = _vm->_screen->getScreenInfo(); - - _textX -= screenInfo->scroll_offset_x; - _textY -= screenInfo->scroll_offset_y; -} - -/** - * This function is called the first time to build the text, if we need one. If - * If necessary it also brings in the wav and sets up the animation. - * - * If there is an animation it can be repeating lip-sync or run-once. - * - * If there is no wav, then the text comes up instead. There can be any - * combination of text/wav playing. - */ - -void Logic::formText(int32 *params) { - // params 0 pointer to ob_graphic - // 1 pointer to ob_speech - // 2 pointer to ob_logic - // 3 pointer to ob_mega - // 4 encoded text number - // 5 wav res id - // 6 anim res id - // 7 pointer to anim table - // 8 animation mode 0 lip synced, - // 1 just straight animation - - // There should always be a text line, as all text is derived from it. - // If there is none, that's bad... - - if (!params[S_TEXT]) { - warning("No text line for speech wav %d", params[S_WAV]); - return; - } - - ObjectSpeech obSpeech(decodePtr(params[S_OB_SPEECH])); - - // Establish the max width allowed for this text sprite. - uint32 textWidth = obSpeech.getWidth(); - - if (!textWidth) - textWidth = 400; - - // Pull out the text line, and make the sprite and text block - - uint32 text_res = params[S_TEXT] / SIZE; - uint32 local_text = params[S_TEXT] & 0xffff; - byte *text = _vm->fetchTextLine(_vm->_resman->openResource(text_res), local_text); - - // 'text + 2' to skip the first 2 bytes which form the line reference - // number - - _speechTextBlocNo = _vm->_fontRenderer->buildNewBloc( - text + 2, _textX, _textY, - textWidth, obSpeech.getPen(), - RDSPR_TRANS | RDSPR_DISPLAYALIGN, - _vm->_speechFontId, POSITION_AT_CENTRE_OF_BASE); - - _vm->_resman->closeResource(text_res); - - // Set speech duration, in case not using a wav. - _speechTime = strlen((char *)text) + 30; -} - -/** - * There are some hard-coded cases where speech is used to illustrate a sound - * effect. In this case there is no sound associated with the speech itself. - */ - -bool Logic::wantSpeechForLine(uint32 wavId) { - switch (wavId) { - case 1328: // AttendantSpeech - // SFX(Phone71); - // FX <Telephone rings> - case 2059: // PabloSpeech - // SFX (2059); - // FX <Sound of sporadic gunfire from below> - case 4082: // DuaneSpeech - // SFX (4082); - // FX <Pffffffffffft! Frp. (Unimpressive, flatulent noise.)> - case 4214: // cat_52 - // SFX (4214); - // 4214FXMeow! - case 4568: // trapdoor_13 - // SFX (4568); - // 4568fx<door slamming> - case 4913: // LobineauSpeech - // SFX (tone2); - // FX <Lobineau hangs up> - case 5120: // bush_66 - // SFX (5120); - // 5120FX<loud buzzing> - case 528: // PresidentaSpeech - // SFX (528); - // FX <Nearby Crash of Collapsing Masonry> - case 920: // Zombie Island forest maze (bird) - case 923: // Zombie Island forest maze (monkey) - case 926: // Zombie Island forest maze (zombie) - // Don't want speech for these lines! - return false; - default: - // Ok for all other lines - return true; - } -} - -} // End of namespace Sword2 |
