aboutsummaryrefslogtreecommitdiff
path: root/sword2
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-11-04 17:26:59 +0000
committerTorbjörn Andersson2003-11-04 17:26:59 +0000
commit64ec1907c2d99e7ecc46e0a5d5605e474c548248 (patch)
treed59830a5f8abfddbdf3501bc183cd4ca683b30a2 /sword2
parentf71d4e4df89c34193d3ecc7dd689c2f61d34bd80 (diff)
downloadscummvm-rg350-64ec1907c2d99e7ecc46e0a5d5605e474c548248.tar.gz
scummvm-rg350-64ec1907c2d99e7ecc46e0a5d5605e474c548248.tar.bz2
scummvm-rg350-64ec1907c2d99e7ecc46e0a5d5605e474c548248.zip
More moving of stuff into classes.
svn-id: r11128
Diffstat (limited to 'sword2')
-rw-r--r--sword2/debug.cpp12
-rw-r--r--sword2/logic.h71
-rw-r--r--sword2/speech.cpp274
-rw-r--r--sword2/speech.h23
-rw-r--r--sword2/startup.cpp8
-rw-r--r--sword2/sword2.cpp4
6 files changed, 199 insertions, 193 deletions
diff --git a/sword2/debug.cpp b/sword2/debug.cpp
index e60e6ef797..453321c7e0 100644
--- a/sword2/debug.cpp
+++ b/sword2/debug.cpp
@@ -31,8 +31,8 @@
#include "sword2/protocol.h"
#include "sword2/resman.h"
#include "sword2/router.h" // for plotWalkGrid()
-#include "sword2/speech.h" // for 'officialTextNumber' and
- // 'speechScriptWaiting'
+#include "sword2/speech.h" // for '_officialTextNumber'
+ // and '_speechScriptWaiting'
namespace Sword2 {
@@ -152,7 +152,7 @@ void Debugger::buildDebugText(void) {
sprintf(buf, "pos: %d", _textNumber & 0xffff);
makeDebugTextBlock(buf, 0, 370);
- sprintf(buf, "TEXT: %d", officialTextNumber);
+ sprintf(buf, "TEXT: %d", g_logic._officialTextNumber);
makeDebugTextBlock(buf, 0, 385);
}
}
@@ -269,10 +269,10 @@ void Debugger::buildDebugText(void) {
// "waiting for person" indicator - set form fnTheyDo and
// fnTheyDoWeWait
- if (speechScriptWaiting) {
+ if (g_logic._speechScriptWaiting) {
sprintf(buf, "script waiting for %s (%d)",
- g_sword2->fetchObjectName(speechScriptWaiting),
- speechScriptWaiting);
+ g_sword2->fetchObjectName(g_logic._speechScriptWaiting),
+ g_logic._speechScriptWaiting);
makeDebugTextBlock(buf, 0, 90);
}
diff --git a/sword2/logic.h b/sword2/logic.h
index fa7ea5b224..d276c3b1a8 100644
--- a/sword2/logic.h
+++ b/sword2/logic.h
@@ -24,6 +24,7 @@
#include "sword2/header.h"
#include "sword2/memory.h"
+#include "sword2/speech.h"
#include "sword2/driver/driver96.h"
namespace Sword2 {
@@ -97,12 +98,79 @@ private:
void createSequenceSpeech(_movieTextObject *sequenceText[]);
void clearSequenceSpeech(_movieTextObject *sequenceText[]);
+ // array of these for subject menu build up
+
+ struct _subject_unit {
+ uint32 res;
+ uint32 ref;
+ };
+
+ _subject_unit _subjectList[MAX_SUBJECT_LIST];
+
+ // when not playing a wav we calculate the speech time based upon
+ // length of ascii
+
+ uint32 _speechTime;
+
+ uint32 _animId;
+
+ // 0 lip synced and repeating - 1 normal once through
+ uint32 _speechAnimType;
+
+ uint32 _leftClickDelay; // click-delay for LEFT mouse button
+ uint32 _rightClickDelay; // click-delay for RIGHT mouse button
+
+ // ref number for default response when luggage icon is used on a
+ // person & it doesn't match any of the icons which would have been in
+ // the chooser
+
+ uint32 _defaultResponseId;
+
+ // calculated by locateTalker() for use in speech-panning & text-sprite
+ // positioning
+
+ int16 _textX, _textY;
+
+ void locateTalker(int32 *params);
+ void formText(int32 *params);
+ bool wantSpeechForLine(uint32 wavId);
+
+#ifdef _SWORD2_DEBUG
+ // for testing speech & text
+ void getCorrectCdForSpeech(int32 wavId);
+#endif
+
public:
Logic() : _globals(NULL), _kills(0), _debugFlag(false),
- _smackerLeadOut(0), _sequenceTextLines(0) {
+ _smackerLeadOut(0), _sequenceTextLines(0), _speechTime(0),
+ _animId(0), _leftClickDelay(0), _rightClickDelay(0),
+ _defaultResponseId(0), _officialTextNumber(0),
+ _speechScriptWaiting(0), _speechTextBlocNo(0),
+ _choosing(false), _unpauseZone(0) {
+ memset(_subjectList, 0, sizeof(_subjectList));
setupOpcodes();
}
+ // "TEXT" - current official text line number - will match the wav
+ // filenames
+
+ int16 _officialTextNumber;
+
+ // usually 0; if non-zero then it's the id of whoever we're waiting for
+ // in a speech script see fnTheyDo, fnTheyDoWeWait and fnWeWait
+
+ int32 _speechScriptWaiting;
+
+ // so speech text cleared when running a new start-script
+
+ uint32 _speechTextBlocNo;
+
+ // could alternately use logic->looping of course
+
+ bool _choosing;
+
+ uint32 _unpauseZone;
+
void setGlobalInterpreterVariables(int32 *vars);
int runScript(char *scriptData, char *objectData, uint32 *offset);
@@ -245,6 +313,7 @@ public:
void totalRestart(void);
void examineRunList(void);
void resetKillList(void);
+
};
extern Logic g_logic;
diff --git a/sword2/speech.cpp b/sword2/speech.cpp
index 36334a2955..130dc67462 100644
--- a/sword2/speech.cpp
+++ b/sword2/speech.cpp
@@ -61,45 +61,6 @@ enum {
INS_quit = 42
};
-// when not playing a wav we calculate the speech time based upon length of
-// ascii
-
-uint32 speech_time = 0;
-
-uint32 speech_text_bloc_no = 0;
-uint32 anim_id = 0;
-
-// 0 lip synced and repeating - 1 normal once through
-uint32 speech_anim_type;
-
-uint32 left_click_delay = 0; // click-delay for LEFT mouse button
-uint32 right_click_delay = 0; // click-delay for RIGHT mouse button
-
-// ref number for default response when luggage icon is used on a person
-// & it doesn't match any of the icons which would have been in the chooser
-uint32 default_response_id = 0;
-
-// "TEXT" - current official text line number - will match the wav filenames
-int16 officialTextNumber = 0;
-
-// usually 0; if non-zero then it's the id of whoever we're waiting for in a
-// speech script see fnTheyDo, fnTheyDoWeWait and fnWeWait
-int32 speechScriptWaiting = 0;
-
-// calculated by LocateTalker() for use in speech-panning & text-sprite
-// positioning
-int16 text_x, text_y;
-
-_subject_unit subject_list[MAX_SUBJECT_LIST];
-
-void LocateTalker(int32 *params);
-void Form_text(int32 *params);
-uint8 WantSpeechForLine(uint32 wavId);
-
-#ifdef _SWORD2_DEBUG
-void GetCorrectCdForSpeech(int32 wavId); // for testing speech & text
-#endif
-
int32 Logic::fnAddSubject(int32 *params) {
// params: 0 id
// 1 daves reference number
@@ -108,7 +69,7 @@ int32 Logic::fnAddSubject(int32 *params) {
// This is the start of the new subject list
// Set the default repsonse id to zero in case we're never
// passed one
- default_response_id = 0;
+ _defaultResponseId = 0;
}
// - this just means we'd get the response for the 1st icon in the
@@ -120,13 +81,13 @@ int32 Logic::fnAddSubject(int32 *params) {
// default response
// and here it is - this is the ref number we will return if
- default_response_id = params[1];
+ _defaultResponseId = params[1];
// a luggage icon is clicked on someone when it wouldn't have
// been in the chooser list (see fnChoose below)
} else {
- subject_list[IN_SUBJECT].res = params[0];
- subject_list[IN_SUBJECT].ref = params[1];
+ _subjectList[IN_SUBJECT].res = params[0];
+ _subjectList[IN_SUBJECT].ref = params[1];
debug(5, "fnAddSubject res %d, uid %d", params[0], params[1]);
@@ -136,9 +97,6 @@ int32 Logic::fnAddSubject(int32 *params) {
return IR_CONT;
}
-// could alternately use logic->looping of course
-int choosing = 0;
-
int32 Logic::fnChoose(int32 *params) {
// params: none
@@ -167,7 +125,7 @@ int32 Logic::fnChoose(int32 *params) {
// scan the subject list for a match with our 'object_held'
while (pos < IN_SUBJECT) {
- if (subject_list[pos].res == OBJECT_HELD) {
+ if (_subjectList[pos].res == OBJECT_HELD) {
// if we've found a match, clear it so it
// doesn't keep happening!
OBJECT_HELD = 0;
@@ -177,7 +135,7 @@ int32 Logic::fnChoose(int32 *params) {
// return special subject chosen code (same
// as in normal chooser routine below)
- return IR_CONT + (subject_list[pos].ref << 3);
+ return IR_CONT + (_subjectList[pos].ref << 3);
}
pos++;
}
@@ -187,7 +145,7 @@ int32 Logic::fnChoose(int32 *params) {
// so that the speech script uses the default text for
// objects that are not accounted for
- return IR_CONT + (default_response_id << 3);
+ return IR_CONT + (_defaultResponseId << 3);
}
// new thing for skipping chooser with "nothing else to say" text
@@ -195,16 +153,16 @@ int32 Logic::fnChoose(int32 *params) {
// If this is the 1st time the chooser is coming up in this
// conversation, AND there's only 1 subject, AND it's the EXIT icon
- if (CHOOSER_COUNT_FLAG == 0 && IN_SUBJECT == 1 && subject_list[0].res == EXIT_ICON) {
+ if (CHOOSER_COUNT_FLAG == 0 && IN_SUBJECT == 1 && _subjectList[0].res == EXIT_ICON) {
AUTO_SELECTED = 1; // for speech script
IN_SUBJECT = 0; // clear the subject list
// return special subject chosen code (same as in normal
// chooser routine below)
- return IR_CONT + (subject_list[0].ref << 3);
+ return IR_CONT + (_subjectList[0].ref << 3);
}
- if (!choosing) {
+ if (!_choosing) {
// new choose session
// build menus from subject_list
@@ -216,10 +174,10 @@ int32 Logic::fnChoose(int32 *params) {
for (j = 0; j < 15; j++) {
if (j < IN_SUBJECT) {
- debug(5, " ICON res %d for %d", subject_list[j].res, j);
- icon = res_man->openResource(subject_list[j].res) + sizeof(_standardHeader) + RDMENU_ICONWIDE * RDMENU_ICONDEEP;
+ debug(5, " ICON res %d for %d", _subjectList[j].res, j);
+ icon = res_man->openResource(_subjectList[j].res) + sizeof(_standardHeader) + RDMENU_ICONWIDE * RDMENU_ICONDEEP;
g_display->setMenuIcon(RDMENU_BOTTOM, (uint8) j, icon);
- res_man->closeResource(subject_list[j].res);
+ res_man->closeResource(_subjectList[j].res);
} else {
//no icon here
debug(5, " NULL for %d", j);
@@ -233,7 +191,7 @@ int32 Logic::fnChoose(int32 *params) {
// lets have the mouse pointer back
g_sword2->setMouse(NORMAL_MOUSE_ID);
- choosing = 1;
+ _choosing = true;
// again next cycle
return IR_REPEAT;
@@ -261,35 +219,35 @@ int32 Logic::fnChoose(int32 *params) {
// change icons
for (j = 0; j < IN_SUBJECT; j++) {
- debug(5, "%s", g_sword2->fetchObjectName(subject_list[j].res));
+ debug(5, "%s", g_sword2->fetchObjectName(_subjectList[j].res));
// change all others to grey
if (j != hit) {
- icon = res_man->openResource( subject_list[j].res ) + sizeof(_standardHeader);
+ icon = res_man->openResource( _subjectList[j].res ) + sizeof(_standardHeader);
g_display->setMenuIcon(RDMENU_BOTTOM, (uint8) j, icon);
- res_man->closeResource(subject_list[j].res);
+ res_man->closeResource(_subjectList[j].res);
}
}
- debug(5, "Selected: %s", g_sword2->fetchObjectName(subject_list[hit].res));
+ debug(5, "Selected: %s", g_sword2->fetchObjectName(_subjectList[hit].res));
// this is our looping flag
- choosing = 0;
+ _choosing = false;
IN_SUBJECT = 0;
// blank mouse again
g_sword2->setMouse(0);
- debug(5, "hit %d - ref %d ref*8 %d", hit, subject_list[hit].ref, subject_list[hit].ref * 8);
+ debug(5, "hit %d - ref %d ref*8 %d", hit, _subjectList[hit].ref, _subjectList[hit].ref * 8);
// for non-speech scripts that manually
// call the chooser
- RESULT = subject_list[hit].res;
+ RESULT = _subjectList[hit].res;
// return special subject chosen code
- return IR_CONT + (subject_list[hit].ref << 3);
+ return IR_CONT + (_subjectList[hit].ref << 3);
}
}
}
@@ -378,7 +336,7 @@ int32 Logic::fnTheyDo(int32 *params) {
// reset debug flag now that we're no longer waiting - see
// debug.cpp
- speechScriptWaiting = 0;
+ _speechScriptWaiting = 0;
SPEECH_ID = params[0];
INS_COMMAND = params[1];
@@ -392,7 +350,7 @@ int32 Logic::fnTheyDo(int32 *params) {
}
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// target is busy so come back again next cycle
return IR_REPEAT;
@@ -451,7 +409,7 @@ int32 Logic::fnTheyDoWeWait(int32 *params) {
ob_logic->looping = 1;
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// finish this cycle - but come back again to check for it
// being finished
@@ -459,7 +417,7 @@ int32 Logic::fnTheyDoWeWait(int32 *params) {
} else if (ob_logic->looping == 0) {
// did not send the command
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// come back next go and try again to send the instruction
return IR_REPEAT;
@@ -478,14 +436,14 @@ int32 Logic::fnTheyDoWeWait(int32 *params) {
// reset debug flag now that we're no longer waiting - see
// debug.cpp
- speechScriptWaiting = 0;
+ _speechScriptWaiting = 0;
return IR_CONT;
}
debug(5, "FNtdww just waiting");
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// see ya next cycle
return IR_REPEAT;
@@ -518,12 +476,12 @@ int32 Logic::fnWeWait(int32 *params) {
if (RESULT == 1) {
// reset debug flag now that we're no longer waiting - see
// debug.cpp
- speechScriptWaiting = 0;
+ _speechScriptWaiting = 0;
return IR_CONT;
}
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// target is busy so come back again next cycle
return IR_REPEAT;
@@ -572,7 +530,7 @@ int32 Logic::fnTimedWait(int32 *params) {
// reset debug flag now that we're no longer waiting - see
// debug.cpp
- speechScriptWaiting = 0;
+ _speechScriptWaiting = 0;
return IR_CONT;
}
@@ -591,13 +549,13 @@ int32 Logic::fnTimedWait(int32 *params) {
// reset debug flag now that we're no longer waiting - see
// debug.cpp
- speechScriptWaiting = 0;
+ _speechScriptWaiting = 0;
return IR_CONT;
}
// debug flag to indicate who we're waiting for - see debug.cpp
- speechScriptWaiting = target;
+ _speechScriptWaiting = target;
// target is busy so come back again next cycle
return IR_REPEAT;
@@ -888,18 +846,18 @@ int32 Logic::fnSpeechProcess(int32 *params) {
}
}
-#define S_OB_GRAPHIC 0
-#define S_OB_SPEECH 1
-#define S_OB_LOGIC 2
-#define S_OB_MEGA 3
-
-#define S_TEXT 4
-#define S_WAV 5
-#define S_ANIM 6
-#define S_DIR_TABLE 7
-#define S_ANIM_MODE 8
-
-uint32 unpause_zone = 0;
+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
+};
int32 Logic::fnISpeak(int32 *params) {
// its the super versatile fnSpeak
@@ -960,7 +918,7 @@ int32 Logic::fnISpeak(int32 *params) {
// for this line either, then just quit back to script right
// now!
- if (gui->_subtitles == 0 && WantSpeechForLine(params[S_WAV]) == 0)
+ if (gui->_subtitles == 0 && wantSpeechForLine(params[S_WAV]) == 0)
return IR_CONT;
if (cycle_skip == 0) {
@@ -1031,7 +989,7 @@ int32 Logic::fnISpeak(int32 *params) {
// open text file & get the line
text = g_sword2->fetchTextLine(res_man->openResource(text_res), local_text);
- officialTextNumber = READ_LE_UINT16(text);
+ _officialTextNumber = READ_LE_UINT16(text);
// now ok to close the text file
res_man->closeResource(text_res);
@@ -1042,7 +1000,7 @@ int32 Logic::fnISpeak(int32 *params) {
if (SYSTEM_TESTING_TEXT) { // if testing text & speech
// if actor number is 0 and text line is just a 'dash'
// character
- if (officialTextNumber == 0 && text[2] == '-' && text[3] == 0) {
+ if (_officialTextNumber == 0 && text[2] == '-' && text[3] == 0) {
// dud line - return & continue script
RESULT = 3;
return IR_CONT;
@@ -1054,30 +1012,30 @@ int32 Logic::fnISpeak(int32 *params) {
ob_logic->looping = 1;
// can't left-click past the text for the first half second
- left_click_delay = 6;
+ _leftClickDelay = 6;
// can't right-click past the text for the first quarter second
- right_click_delay = 3;
+ _rightClickDelay = 3;
// Write to walkthrough file (zebug0.txt)
// if (player_id != george), then player is controlling Nico
if (PLAYER_ID != CUR_PLAYER_ID)
- debug(5, "(%d) Nico: %s", officialTextNumber, text + 2);
+ debug(5, "(%d) Nico: %s", _officialTextNumber, text + 2);
else
- debug(5, "(%d) %s: %s", officialTextNumber, g_sword2->fetchObjectName(ID), text + 2);
+ debug(5, "(%d) %s: %s", _officialTextNumber, g_sword2->fetchObjectName(ID), text + 2);
// Set up the speech animation
if (params[S_ANIM]) {
// just a straight anim
- anim_id = params[S_ANIM];
+ _animId = params[S_ANIM];
// anim type
- speech_anim_type = SPEECHANIMFLAG;
+ _speechAnimType = SPEECHANIMFLAG;
// set the talker's graphic to this speech anim now
- ob_graphic->anim_resource = anim_id;
+ ob_graphic->anim_resource = _animId;
// set to first frame
ob_graphic->anim_pc = 0;
@@ -1091,28 +1049,28 @@ int32 Logic::fnISpeak(int32 *params) {
anim_table = (int32 *) params[S_DIR_TABLE];
// appropriate anim resource is in 'table[direction]'
- anim_id = anim_table[ob_mega->current_dir];
+ _animId = anim_table[ob_mega->current_dir];
// anim type
- speech_anim_type = SPEECHANIMFLAG;
+ _speechAnimType = SPEECHANIMFLAG;
// set the talker's graphic to this speech anim now
- ob_graphic->anim_resource = anim_id;
+ ob_graphic->anim_resource = _animId;
// set to first frame
ob_graphic->anim_pc = 0;
} else {
// no animation choosen
- anim_id = 0;
+ _animId = 0;
}
// Default back to looped lip synced anims.
SPEECHANIMFLAG = 0;
- // set up 'text_x' & 'text_y' for speech-pan and/or
+ // set up '_textX' & '_textY' for speech-pan and/or
// text-sprite position
- LocateTalker(params);
+ locateTalker(params);
// is it to be speech or subtitles or both?
@@ -1123,20 +1081,20 @@ int32 Logic::fnISpeak(int32 *params) {
// if speech is selected, and this line is allowed speech
// (not if it's an fx subtitle!)
- if (!g_sound->isSpeechMute() && WantSpeechForLine(officialTextNumber)) {
+ if (!g_sound->isSpeechMute() && wantSpeechForLine(_officialTextNumber)) {
// if the wavId paramter is zero because not yet
// compiled into speech command, we can still get it
// from the 1st 2 chars of the text line
if (!params[S_WAV])
- params[S_WAV] = (int32) officialTextNumber;
+ params[S_WAV] = (int32) _officialTextNumber;
#define SPEECH_VOLUME 16 // 0..16
#define SPEECH_PAN 0 // -16..16
- speech_pan = ((text_x - 320) * 16) / 320;
+ speech_pan = ((_textX - 320) * 16) / 320;
- // 'text_x' 'speech_pan'
+ // '_textX' 'speech_pan'
// 0 -16
// 320 0
// 640 16
@@ -1197,7 +1155,7 @@ int32 Logic::fnISpeak(int32 *params) {
textRunning = 1;
// so create the text sprite
- Form_text(params);
+ formText(params);
} else {
// otherwise don't want text
textRunning = 0;
@@ -1206,7 +1164,7 @@ int32 Logic::fnISpeak(int32 *params) {
// EVERY TIME: run a cycle of animation, if there is one
- if (anim_id) {
+ if (_animId) {
// there is an animation
// increment the anim frame number
ob_graphic->anim_pc++;
@@ -1215,7 +1173,7 @@ int32 Logic::fnISpeak(int32 *params) {
anim_file = res_man->openResource(ob_graphic->anim_resource);
anim_head = g_sword2->fetchAnimHeader(anim_file);
- if (!speech_anim_type) {
+ if (!_speechAnimType) {
// ANIM IS TO BE LIP-SYNC'ED & REPEATING
// if finished the anim
if (ob_graphic->anim_pc == (int32) (anim_head->noAnimFrames)) {
@@ -1223,7 +1181,7 @@ int32 Logic::fnISpeak(int32 *params) {
ob_graphic->anim_pc = 0;
} else if (speechRunning) {
// if playing a sample
- if (!unpause_zone) {
+ if (!_unpauseZone) {
// if we're at a quiet bit
if (g_sound->amISpeaking() == RDSE_QUIET) {
// restart from frame 0
@@ -1237,16 +1195,16 @@ int32 Logic::fnISpeak(int32 *params) {
if (ob_graphic->anim_pc == (int32) (anim_head->noAnimFrames) - 1) {
// reached the last frame of the anim
// hold anim on this last frame
- anim_id = 0;
+ _animId = 0;
}
}
// close the anim file
res_man->closeResource(ob_graphic->anim_resource);
- } else if (speech_anim_type) {
+ } else if (_speechAnimType) {
// Placed here so we actually display the last frame of the
// anim.
- speech_anim_type = 0;
+ _speechAnimType = 0;
}
// EVERY TIME: FIND OUT IF WE NEED TO STOP THE SPEECH NOW...
@@ -1256,21 +1214,21 @@ int32 Logic::fnISpeak(int32 *params) {
// if playing a sample (note that value of '2' means about to play!)
if (speechRunning == 1) {
- if (!unpause_zone) {
+ if (!_unpauseZone) {
// has it finished?
if (g_sound->getSpeechStatus() == RDSE_SAMPLEFINISHED)
speechFinished = 1;
} else
- unpause_zone--;
- } else if (speechRunning == 0 && speech_time) {
+ _unpauseZone--;
+ } else if (speechRunning == 0 && _speechTime) {
// counting down text time because there is no sample - this
// ends the speech
- // if no sample then we're using speech_time to end speech
+ // if no sample then we're using _speechTime to end speech
// naturally
- speech_time--;
- if (!speech_time)
+ _speechTime--;
+ if (!_speechTime)
speechFinished = 1;
}
@@ -1285,8 +1243,8 @@ int32 Logic::fnISpeak(int32 *params) {
// Note that we now have TWO click-delays - one for LEFT
// button, one for RIGHT BUTTON
- if ((!left_click_delay && me && (me->buttons & RD_LEFTBUTTONDOWN)) ||
- (!right_click_delay && me && (me->buttons&RD_RIGHTBUTTONDOWN))) {
+ if ((!_leftClickDelay && me && (me->buttons & RD_LEFTBUTTONDOWN)) ||
+ (!_rightClickDelay && me && (me->buttons & RD_RIGHTBUTTONDOWN))) {
// mouse click, after click_delay has expired -> end
// the speech we ignore mouse releases
@@ -1319,21 +1277,21 @@ int32 Logic::fnISpeak(int32 *params) {
// if we are finishing the speech this cycle, do the business
- // !speech_anim_type, as we want an anim which is playing once to
- // have finished.
+ // !speechAnimType, as we want an anim which is playing once to have
+ // finished.
- if (speechFinished && !speech_anim_type) {
+ if (speechFinished && !_speechAnimType) {
// if there is text
- if (speech_text_bloc_no) {
+ if (_speechTextBlocNo) {
// kill the text block
- fontRenderer.killTextBloc(speech_text_bloc_no);
- speech_text_bloc_no = 0;
+ fontRenderer.killTextBloc(_speechTextBlocNo);
+ _speechTextBlocNo = 0;
}
// if there is a speech anim
- if (anim_id) {
+ if (_animId) {
// end it on 1st frame (closed mouth)
- anim_id = 0;
+ _animId = 0;
ob_graphic->anim_pc = 0;
}
@@ -1348,7 +1306,7 @@ int32 Logic::fnISpeak(int32 *params) {
// reset to zero, in case text line not even extracted (since
// this number comes from the text line)
- officialTextNumber = 0;
+ _officialTextNumber = 0;
RESULT = 0; // ok
return IR_CONT;
@@ -1359,11 +1317,11 @@ int32 Logic::fnISpeak(int32 *params) {
// count down to clickability
- if (left_click_delay)
- left_click_delay--;
+ if (_leftClickDelay)
+ _leftClickDelay--;
- if (right_click_delay)
- right_click_delay--;
+ if (_rightClickDelay)
+ _rightClickDelay--;
// back again next cycle
return IR_REPEAT;
@@ -1371,9 +1329,9 @@ int32 Logic::fnISpeak(int32 *params) {
#define GAP_ABOVE_HEAD 20 // distance kept above talking sprite
-void LocateTalker(int32 *params) {
- // sets 'text_x' & 'text_y' for position of text sprite
- // but 'text_x' also used to calculate speech-pan
+void Logic::locateTalker(int32 *params) {
+ // sets '_textX' & '_textY' for position of text sprite
+ // but '_textX' also used to calculate speech-pan
// params: 0 pointer to ob_graphic
// 1 pointer to ob_speech
@@ -1395,16 +1353,16 @@ void LocateTalker(int32 *params) {
uint16 scale;
// if there's no anim
- if (anim_id == 0) {
+ if (_animId == 0) {
// assume it's Voice-Over text, so it goes at bottom of screen
- text_x = 320;
- text_y = 400;
+ _textX = 320;
+ _textY = 400;
} else {
// Note: this code has been adapted from Register_frame() in
// build_display.cpp
// open animation file & set up the necessary pointers
- file = res_man->openResource(anim_id);
+ file = res_man->openResource(_animId);
anim_head = g_sword2->fetchAnimHeader(file);
@@ -1433,34 +1391,34 @@ void LocateTalker(int32 *params) {
// scaled height
// just use 'feet_x' as centre
- text_x = (int16) (ob_mega->feet_x);
+ _textX = (int16) (ob_mega->feet_x);
// add scaled y-offset to feet_y coord to get top of
// sprite
- text_y = (int16) (ob_mega->feet_y + (cdt_entry->y * scale) / 256);
+ _textY = (int16) (ob_mega->feet_y + (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
- text_x = cdt_entry->x + (frame_head->width) / 2;
- text_y = cdt_entry->y;
+ _textX = cdt_entry->x + (frame_head->width) / 2;
+ _textY = cdt_entry->y;
}
// leave space above their head
- text_y -= GAP_ABOVE_HEAD;
+ _textY -= GAP_ABOVE_HEAD;
// adjust the text coords for RDSPR_DISPLAYALIGN
- text_x -= g_sword2->_thisScreen.scroll_offset_x;
- text_y -= g_sword2->_thisScreen.scroll_offset_y;
+ _textX -= g_sword2->_thisScreen.scroll_offset_x;
+ _textY -= g_sword2->_thisScreen.scroll_offset_y;
// release the anim resource
- res_man->closeResource(anim_id);
+ res_man->closeResource(_animId);
}
}
-void Form_text(int32 *params) {
+void Logic::formText(int32 *params) {
// its the first time in so we build the text block if we need one
// we also bring in the wav if there is one
// also setup the animation if there is one
@@ -1515,8 +1473,8 @@ void Form_text(int32 *params) {
// 'text + 2' to skip the first 2 bytes which form the line
// reference number
- speech_text_bloc_no = fontRenderer.buildNewBloc(
- text + 2, text_x, text_y,
+ _speechTextBlocNo = fontRenderer.buildNewBloc(
+ text + 2, _textX, _textY,
textWidth, ob_speech->pen,
RDSPR_TRANS | RDSPR_DISPLAYALIGN,
g_sword2->_speechFontId, POSITION_AT_CENTRE_OF_BASE);
@@ -1527,7 +1485,7 @@ void Form_text(int32 *params) {
// set speech duration, in case not using wav
// no. of cycles = (no. of chars) + 30
- speech_time = strlen((char *) text) + 30;
+ _speechTime = strlen((char *) text) + 30;
} else {
// no text line passed? - this is bad
debug(5, "no text line for speech wav %d", params[S_WAV]);
@@ -1535,7 +1493,7 @@ void Form_text(int32 *params) {
}
#ifdef _SWORD2_DEBUG
-void GetCorrectCdForSpeech(int32 wavId) {
+void Logic::getCorrectCdForSpeech(int32 wavId) {
File fp;
// 1, 2 or 0 (if speech on both cd's, ie. no need to change)
@@ -1561,7 +1519,7 @@ void GetCorrectCdForSpeech(int32 wavId) {
// speech samples too
// - and we only want the subtitles if selected, not if samples can't be found!
-uint8 WantSpeechForLine(uint32 wavId) {
+bool Logic::wantSpeechForLine(uint32 wavId) {
switch (wavId) {
case 1328: // AttendantSpeech
// SFX(Phone71);
@@ -1591,10 +1549,10 @@ uint8 WantSpeechForLine(uint32 wavId) {
case 923: // location 62
case 926: // location 62
// don't want speech for these lines!
- return 0;
+ return false;
default:
// ok for all other lines
- return 1;
+ return true;
}
}
diff --git a/sword2/speech.h b/sword2/speech.h
index aa0c117c7f..9000b5b7f7 100644
--- a/sword2/speech.h
+++ b/sword2/speech.h
@@ -20,30 +20,9 @@
#ifndef _SPEECH
#define _SPEECH
-#include "sword2/header.h"
-
-namespace Sword2 {
-
#define MAX_SUBJECT_LIST 30 // is that enough?
-// array of these for subject menu build up
-typedef struct {
- uint32 res;
- uint32 ref;
-} _subject_unit;
-
-// so speech text cleared when running a new start-script
-extern uint32 speech_text_bloc_no;
-
-extern int16 officialTextNumber;
-
-extern int32 speechScriptWaiting;
-
-//could alternately use logic->looping of course
-extern int choosing;
-
-extern uint32 unpause_zone;
-
+namespace Sword2 {
} // End of namespace Sword2
#endif
diff --git a/sword2/startup.cpp b/sword2/startup.cpp
index 3bca897a1c..cdc8699f61 100644
--- a/sword2/startup.cpp
+++ b/sword2/startup.cpp
@@ -33,7 +33,7 @@
#include "sword2/resman.h"
#include "sword2/router.h"
#include "sword2/sound.h"
-#include "sword2/speech.h" // for 'speech_text_bloc_no' - so that speech text can be cleared when running a new start-script
+#include "sword2/speech.h" // for '_speechTextBlocNo' - so that speech text can be cleared when running a new start-script
#include "sword2/startup.h"
#include "sword2/sync.h"
#include "sword2/tony_gsdk.h"
@@ -223,9 +223,9 @@ void Con_start(int start) {
router.freeAllRouteMem();
// if there was speech text, kill the text block
- if (speech_text_bloc_no) {
- fontRenderer.killTextBloc(speech_text_bloc_no);
- speech_text_bloc_no = 0;
+ if (g_logic._speechTextBlocNo) {
+ fontRenderer.killTextBloc(g_logic._speechTextBlocNo);
+ g_logic._speechTextBlocNo = 0;
}
// set the key
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index a75b6c4e23..07705a49c0 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -580,10 +580,10 @@ void UnpauseGame(void) {
}
gamePaused = 0;
- unpause_zone = 2;
+ g_logic._unpauseZone = 2;
// if mouse is about or we're in a chooser menu
- if (!g_sword2->_mouseStatus || choosing)
+ if (!g_sword2->_mouseStatus || g_logic._choosing)
g_sword2->setMouse(NORMAL_MOUSE_ID);
}