This commit is contained in:
parent
6061ee9bb7
commit
6490c61642
@ -10,7 +10,7 @@
|
|||||||
#define CHAR_MERMAIDMAN 6
|
#define CHAR_MERMAIDMAN 6
|
||||||
#define CHAR_BARNACLEBOY 7
|
#define CHAR_BARNACLEBOY 7
|
||||||
#define CHAR_JACKCUSTARD 8
|
#define CHAR_JACKCUSTARD 8
|
||||||
#define CHAR_GARY 8
|
#define CHAR_GARY 9
|
||||||
|
|
||||||
#define ANIM_QUIET 0
|
#define ANIM_QUIET 0
|
||||||
#define ANIM_TALKING 1
|
#define ANIM_TALKING 1
|
||||||
|
@ -272,6 +272,7 @@ CConversation::CHAR_ICON_FRAMES CConversation::s_characterIconFrames[]=
|
|||||||
{ FRM_MERMAIDMAN }, // CHAR_MERMAIDMAN,
|
{ FRM_MERMAIDMAN }, // CHAR_MERMAIDMAN,
|
||||||
{ FRM_BARNACLEBOY }, // CHAR_BARNACLEBOY,
|
{ FRM_BARNACLEBOY }, // CHAR_BARNACLEBOY,
|
||||||
{ -1 }, // CHAR_JACKCUSTARD
|
{ -1 }, // CHAR_JACKCUSTARD
|
||||||
|
{ FRM_GARY }, // CHAR_GARY
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -285,16 +286,18 @@ int CConversation::s_numRegisteredScripts=0;
|
|||||||
class CScript *CConversation::s_currentScript=NULL;
|
class CScript *CConversation::s_currentScript=NULL;
|
||||||
int CConversation::s_currentState=STATE_INACTIVE;
|
int CConversation::s_currentState=STATE_INACTIVE;
|
||||||
|
|
||||||
int CConversation::s_currentQuestion;
|
int CConversation::s_currentQuestion;
|
||||||
int CConversation::s_currentAnswer;
|
int CConversation::s_currentAnswer;
|
||||||
int CConversation::s_currentSelectedAnswer;
|
int CConversation::s_currentSelectedAnswer;
|
||||||
|
|
||||||
|
int CConversation::s_faceFrame;
|
||||||
|
int CConversation::s_speechId;
|
||||||
|
int CConversation::s_textPageOffset;
|
||||||
|
int CConversation::s_maxTextPageOffset;
|
||||||
|
SpriteBank *CConversation::s_sprites;
|
||||||
|
|
||||||
int CConversation::s_faceFrame;
|
|
||||||
int CConversation::s_speechId;
|
|
||||||
int CConversation::s_textOffset;
|
|
||||||
int CConversation::s_maxTextOffset;
|
|
||||||
|
|
||||||
static xmPlayingId s_playingSfxId;
|
static xmPlayingId s_playingSfxId;
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
@ -310,7 +313,6 @@ void CConversation::init()
|
|||||||
s_textFontBank=new ("Conversation Font") FontBank();
|
s_textFontBank=new ("Conversation Font") FontBank();
|
||||||
s_textFontBank->initialise(&standardFont);
|
s_textFontBank->initialise(&standardFont);
|
||||||
s_textFontBank->setOt(0);
|
s_textFontBank->setOt(0);
|
||||||
s_textFontBank->setPrintArea(TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT);
|
|
||||||
s_textFontBank->setColour(TEXT_R,TEXT_G,TEXT_B);
|
s_textFontBank->setColour(TEXT_R,TEXT_G,TEXT_B);
|
||||||
|
|
||||||
s_questionFontBank=new ("Conversation Font") FontBank();
|
s_questionFontBank=new ("Conversation Font") FontBank();
|
||||||
@ -319,6 +321,9 @@ void CConversation::init()
|
|||||||
|
|
||||||
s_currentState=STATE_INACTIVE;
|
s_currentState=STATE_INACTIVE;
|
||||||
s_currentScript=NULL;
|
s_currentScript=NULL;
|
||||||
|
|
||||||
|
s_sprites=new ("ConvoSprites") SpriteBank();
|
||||||
|
s_sprites->load(SPRITES_SPRITES_SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -330,6 +335,7 @@ void CConversation::init()
|
|||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CConversation::shutdown()
|
void CConversation::shutdown()
|
||||||
{
|
{
|
||||||
|
s_sprites->dump(); delete s_sprites;
|
||||||
s_questionFontBank->dump(); delete s_questionFontBank;
|
s_questionFontBank->dump(); delete s_questionFontBank;
|
||||||
s_textFontBank->dump(); delete s_textFontBank;
|
s_textFontBank->dump(); delete s_textFontBank;
|
||||||
dumpConversationScripts();
|
dumpConversationScripts();
|
||||||
@ -388,7 +394,14 @@ void CConversation::render()
|
|||||||
{
|
{
|
||||||
renderText();
|
renderText();
|
||||||
renderQuestion();
|
renderQuestion();
|
||||||
drawSpeechBubbleBorder(TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT+TEXTBOX_QUESTIONHEIGHT,0,s_faceFrame);
|
if(s_faceFrame!=-1)
|
||||||
|
{
|
||||||
|
drawSpeechBubbleBorder(TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT+TEXTBOX_QUESTIONHEIGHT,0,s_faceFrame);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawSpeechBubbleBorder(TEXTBOX_X_FOR_NARRATOR,TEXTBOX_Y,TEXTBOX_WIDTH_FOR_NARRATOR,TEXTBOX_HEIGHT+TEXTBOX_QUESTIONHEIGHT,0,-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,11 +475,15 @@ int CConversation::isActive()
|
|||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CConversation::setCharacterAndText(int _characterId,int _textId)
|
void CConversation::setCharacterAndText(int _characterId,int _textId)
|
||||||
{
|
{
|
||||||
|
RECT clipTextRegion;
|
||||||
|
|
||||||
s_faceFrame=(s_characterIconFrames[_characterId].m_frame);
|
s_faceFrame=(s_characterIconFrames[_characterId].m_frame);
|
||||||
s_speechId=_textId;
|
s_speechId=_textId;
|
||||||
s_textOffset=0;
|
s_textPageOffset=0;
|
||||||
s_maxTextOffset=s_textFontBank->getStringHeight((char*)TranslationDatabase::getString(s_speechId))-TEXTBOX_HEIGHT;
|
clipTextRegion=getTextRegion();
|
||||||
if(s_maxTextOffset<0)s_maxTextOffset=0;
|
s_textFontBank->setPrintArea(clipTextRegion.x,clipTextRegion.y,clipTextRegion.w,clipTextRegion.h);
|
||||||
|
s_maxTextPageOffset=(s_textFontBank->getStringHeight((char*)TranslationDatabase::getString(s_speechId))-s_textFontBank->getCharHeight())/(s_textFontBank->getCharHeight()*TEXTBOX_FONT_NUM_LINES_IN_BOX);
|
||||||
|
if(s_maxTextPageOffset<0)s_maxTextPageOffset=0;
|
||||||
|
|
||||||
for (int i=0; i<SpeechTableSize; i++)
|
for (int i=0; i<SpeechTableSize; i++)
|
||||||
{
|
{
|
||||||
@ -517,12 +534,12 @@ void CConversation::thinkText()
|
|||||||
|
|
||||||
if(PadGetRepeat(0)&PAD_DOWN)
|
if(PadGetRepeat(0)&PAD_DOWN)
|
||||||
{
|
{
|
||||||
if(s_textOffset<s_maxTextOffset)
|
if(s_textPageOffset<s_maxTextPageOffset)
|
||||||
{
|
{
|
||||||
s_textOffset+=TEXT_STEP_SIZE;
|
s_textPageOffset++;
|
||||||
if(s_textOffset>s_maxTextOffset)
|
if(s_textPageOffset>s_maxTextPageOffset)
|
||||||
{
|
{
|
||||||
s_textOffset=s_maxTextOffset;
|
s_textPageOffset=s_maxTextPageOffset;
|
||||||
}
|
}
|
||||||
sfx=CSoundMediator::SFX_FRONT_END__MOVE_CURSOR;
|
sfx=CSoundMediator::SFX_FRONT_END__MOVE_CURSOR;
|
||||||
}
|
}
|
||||||
@ -533,12 +550,12 @@ void CConversation::thinkText()
|
|||||||
}
|
}
|
||||||
else if(PadGetRepeat(0)&PAD_UP)
|
else if(PadGetRepeat(0)&PAD_UP)
|
||||||
{
|
{
|
||||||
if(s_textOffset>0)
|
if(s_textPageOffset>0)
|
||||||
{
|
{
|
||||||
s_textOffset-=TEXT_STEP_SIZE;
|
s_textPageOffset--;
|
||||||
if(s_textOffset<0)
|
if(s_textPageOffset<0)
|
||||||
{
|
{
|
||||||
s_textOffset=0;
|
s_textPageOffset=0;
|
||||||
}
|
}
|
||||||
sfx=CSoundMediator::SFX_FRONT_END__MOVE_CURSOR;
|
sfx=CSoundMediator::SFX_FRONT_END__MOVE_CURSOR;
|
||||||
}
|
}
|
||||||
@ -603,11 +620,35 @@ void CConversation::thinkQuestion()
|
|||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CConversation::renderText()
|
void CConversation::renderText()
|
||||||
{
|
{
|
||||||
RECT clipTextRegion={TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT};
|
RECT clipTextRegion;
|
||||||
|
char buf[1024],*pBuf;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
clipTextRegion=getTextRegion();
|
||||||
|
|
||||||
PrimFullScreen(0);
|
PrimFullScreen(0);
|
||||||
s_textFontBank->print(0,-s_textOffset,s_speechId);
|
sprintf(buf,TranslationDatabase::getString(s_speechId));
|
||||||
|
pBuf=buf;
|
||||||
|
for(i=0;i<s_textPageOffset*TEXTBOX_FONT_NUM_LINES_IN_BOX;i++)
|
||||||
|
{
|
||||||
|
// yes.. i know it's gay but it works..
|
||||||
|
pBuf+=s_textFontBank->printTillEndOfLine(0,-50,pBuf);
|
||||||
|
}
|
||||||
|
for(i=0;i<TEXTBOX_FONT_NUM_LINES_IN_BOX&&pBuf;i++)
|
||||||
|
{
|
||||||
|
pBuf+=s_textFontBank->printTillEndOfLine(0,i*TEXTBOX_FONT_LINE_SPACING,pBuf);
|
||||||
|
}
|
||||||
PrimClip(&clipTextRegion,0);
|
PrimClip(&clipTextRegion,0);
|
||||||
|
|
||||||
|
// Render up/down button hints
|
||||||
|
if(s_textPageOffset!=0)
|
||||||
|
{
|
||||||
|
s_sprites->printFT4(FRM__BUTU,clipTextRegion.x+TEXTBOX_BUTTONS_XOFF,TEXTBOX_Y+TEXTBOX_BUTTONS_YOFF,0,0,0);
|
||||||
|
}
|
||||||
|
if(s_textPageOffset<s_maxTextPageOffset)
|
||||||
|
{
|
||||||
|
s_sprites->printFT4(FRM__BUTD,clipTextRegion.x+TEXTBOX_BUTTONS_XOFF+TEXTBOX_BUTTONS_GAP,TEXTBOX_Y+TEXTBOX_BUTTONS_YOFF,0,0,0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -617,7 +658,6 @@ void CConversation::renderText()
|
|||||||
Params:
|
Params:
|
||||||
Returns:
|
Returns:
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
//drawSpeechBubbleBorder(TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT+TEXTBOX_QUESTIONHEIGHT,0,s_faceFrame);
|
|
||||||
void CConversation::renderQuestion()
|
void CConversation::renderQuestion()
|
||||||
{
|
{
|
||||||
int y;
|
int y;
|
||||||
@ -807,5 +847,26 @@ void CConversation::registerConversationLevelScripts(int level)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
RECT CConversation::getTextRegion()
|
||||||
|
{
|
||||||
|
RECT clipRegion={TEXTBOX_X,TEXTBOX_Y,TEXTBOX_WIDTH,TEXTBOX_HEIGHT};
|
||||||
|
|
||||||
|
if(s_faceFrame==-1)
|
||||||
|
{
|
||||||
|
// Narrators box..
|
||||||
|
clipRegion.x=TEXTBOX_X_FOR_NARRATOR;
|
||||||
|
clipRegion.w=TEXTBOX_WIDTH_FOR_NARRATOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return clipRegion;
|
||||||
|
}
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
end */
|
end */
|
||||||
|
@ -18,6 +18,10 @@
|
|||||||
Includes
|
Includes
|
||||||
-------- */
|
-------- */
|
||||||
|
|
||||||
|
#ifndef _GLOBAL_HEADER_
|
||||||
|
#include "system\global.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __FILE_EQUATES_H__
|
#ifndef __FILE_EQUATES_H__
|
||||||
#include <biglump.h>
|
#include <biglump.h>
|
||||||
#endif
|
#endif
|
||||||
@ -37,20 +41,21 @@
|
|||||||
class CConversation
|
class CConversation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void init();
|
static void init();
|
||||||
static void shutdown();
|
static void shutdown();
|
||||||
|
|
||||||
static void think(int _frames);
|
static void think(int _frames);
|
||||||
static void render();
|
static void render();
|
||||||
|
|
||||||
static void registerConversationLevelScripts(int level);
|
static void registerConversationLevelScripts(int level);
|
||||||
static void registerConversationScript(FileEquate _feScript);
|
static void registerConversationScript(FileEquate _feScript);
|
||||||
static void trigger(FileEquate _feScript);
|
static void trigger(FileEquate _feScript);
|
||||||
static int isActive();
|
static int isActive();
|
||||||
|
|
||||||
static void setCharacterAndText(int _characterId,int _textId);
|
static void setCharacterAndText(int _characterId,int _textId);
|
||||||
static void setResponseOptions(int _responseOptions);
|
static void setResponseOptions(int _responseOptions);
|
||||||
static int getResponse();
|
static int getResponse();
|
||||||
|
static RECT getTextRegion();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -58,12 +63,18 @@ private:
|
|||||||
{
|
{
|
||||||
|
|
||||||
TEXTBOX_X=125,
|
TEXTBOX_X=125,
|
||||||
TEXTBOX_Y=140,
|
TEXTBOX_Y=35,
|
||||||
TEXTBOX_WIDTH=357,
|
TEXTBOX_WIDTH=357,
|
||||||
TEXTBOX_HEIGHT=50,
|
TEXTBOX_HEIGHT=62,
|
||||||
|
TEXTBOX_X_FOR_NARRATOR=512-TEXTBOX_X-TEXTBOX_WIDTH,
|
||||||
|
TEXTBOX_WIDTH_FOR_NARRATOR=512-(TEXTBOX_X_FOR_NARRATOR*2),
|
||||||
TEXTBOX_QUESTIONHEIGHT=16,
|
TEXTBOX_QUESTIONHEIGHT=16,
|
||||||
TEXT_STEP_SIZE=5,
|
|
||||||
OT_POS=0,
|
OT_POS=0,
|
||||||
|
TEXTBOX_FONT_LINE_SPACING=14,
|
||||||
|
TEXTBOX_FONT_NUM_LINES_IN_BOX=4,
|
||||||
|
TEXTBOX_BUTTONS_XOFF=0,
|
||||||
|
TEXTBOX_BUTTONS_YOFF=68,
|
||||||
|
TEXTBOX_BUTTONS_GAP=20,
|
||||||
// Main text
|
// Main text
|
||||||
TEXT_R=120,
|
TEXT_R=120,
|
||||||
TEXT_G=115,
|
TEXT_G=115,
|
||||||
@ -89,6 +100,7 @@ private:
|
|||||||
CHAR_MERMAIDMAN,
|
CHAR_MERMAIDMAN,
|
||||||
CHAR_BARNACLEBOY,
|
CHAR_BARNACLEBOY,
|
||||||
CHAR_JACKCUSTARD,
|
CHAR_JACKCUSTARD,
|
||||||
|
CHAR_GARY,
|
||||||
MAX_CHARS,
|
MAX_CHARS,
|
||||||
};
|
};
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -153,8 +165,9 @@ private:
|
|||||||
|
|
||||||
static int s_faceFrame;
|
static int s_faceFrame;
|
||||||
static int s_speechId;
|
static int s_speechId;
|
||||||
static int s_textOffset;
|
static int s_textPageOffset;
|
||||||
static int s_maxTextOffset;
|
static int s_maxTextPageOffset;
|
||||||
|
static class SpriteBank *s_sprites;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -186,6 +186,74 @@ void FontBank::print( int _x, int _y, const char *_text )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
int FontBank::printTillEndOfLine( int _x, int _y, const char *_text )
|
||||||
|
{
|
||||||
|
ASSERT( m_initialised );
|
||||||
|
|
||||||
|
int Size;
|
||||||
|
int StartX;
|
||||||
|
int Length=0;
|
||||||
|
int RectWidth;
|
||||||
|
int numCharsPrinted=0;
|
||||||
|
|
||||||
|
switch(m_justification)
|
||||||
|
{
|
||||||
|
case JUST_CENTRE:
|
||||||
|
RectWidth=m_printArea.w;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
RectWidth=m_printArea.w-_x;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_x+=m_printArea.x;
|
||||||
|
_y+=m_printArea.y;
|
||||||
|
_y+=getCharHeight(); // origin at top left please...
|
||||||
|
StartX=_x;
|
||||||
|
|
||||||
|
while (*_text)
|
||||||
|
{
|
||||||
|
Length=getStrWrapLen(_text,RectWidth);
|
||||||
|
switch (m_justification)
|
||||||
|
{
|
||||||
|
case JUST_LEFT:
|
||||||
|
_x=StartX;
|
||||||
|
break;
|
||||||
|
case JUST_RIGHT:
|
||||||
|
_x=StartX/*+RectWidth*/-Length;
|
||||||
|
break;
|
||||||
|
case JUST_CENTRE:
|
||||||
|
_x=StartX-(Length/2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fy=_y;
|
||||||
|
while(*_text && Length>0)
|
||||||
|
{
|
||||||
|
if(m_wobble)
|
||||||
|
{
|
||||||
|
fy=_y+(msin((s_wobbleValue+(_x*wstep))&4095)/wscale);
|
||||||
|
}
|
||||||
|
Size=printChar(*_text++,_x,fy)+getCharGapX();
|
||||||
|
numCharsPrinted++;
|
||||||
|
_x+=Size;
|
||||||
|
Length-=Size;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// _y+=(getCharHeight());
|
||||||
|
// if(*_text=='\n') _text++; // kill newline if there is one ( preserve multiple \n )
|
||||||
|
// while (*_text==' ') _text++; // kill trailing spaces
|
||||||
|
}
|
||||||
|
|
||||||
|
return numCharsPrinted;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
|
@ -51,8 +51,9 @@ public:
|
|||||||
virtual void initialise( FontData *_fontData );
|
virtual void initialise( FontData *_fontData );
|
||||||
void dump();
|
void dump();
|
||||||
int isInitialised() { return m_initialised; }
|
int isInitialised() { return m_initialised; }
|
||||||
virtual void print( int _x, int _y, const char *_text );
|
|
||||||
void print( int _x, int _y, s32 _textId );
|
void print( int _x, int _y, s32 _textId );
|
||||||
|
virtual void print( int _x, int _y, const char *_text );
|
||||||
|
int printTillEndOfLine( int _x, int _y, const char *_text );
|
||||||
void setColour( u8 _r, u8 _g, u8 _b );
|
void setColour( u8 _r, u8 _g, u8 _b );
|
||||||
void setJustification( Justification _justification );
|
void setJustification( Justification _justification );
|
||||||
void setOt( u16 _ot );
|
void setOt( u16 _ot );
|
||||||
|
Loading…
Reference in New Issue
Block a user