From 9087fd50e22382142a61aa9a9c121c2a736a06c6 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 3 Aug 2001 16:15:46 +0000 Subject: [PATCH] --- data/translations/text.dat | 5 ++ makefile.gaz | 3 +- source/game/bosstext.cpp | 168 +++++++++++++++++++++++++++---------- source/game/bosstext.h | 6 +- source/game/game.cpp | 148 +++++++------------------------- source/game/game.h | 5 +- 6 files changed, 165 insertions(+), 170 deletions(-) diff --git a/data/translations/text.dat b/data/translations/text.dat index b07dc3d71..4bfca20fc 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -613,6 +613,11 @@ eng=Snail Race [STR__BOSS_TEXT_TITLE] eng=Boss Hints From Mermaid Man and Barnacle Boy's Superhero Handbook +[STR__BOSS__CROSS_BUTTON] +eng=Continue +[STR__BOSS__TRIANGLE_BUTTON] +eng=Next page.. + [STR__CHAPTER_1__BOSS_TITLE] eng=Mother Jellyfish... diff --git a/makefile.gaz b/makefile.gaz index 2d3624aa0..a4d595341 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -205,7 +205,8 @@ fma_src := fma fmv_src := fmv -game_src := convo \ +game_src := bosstext \ + convo \ game \ gamebubs \ gameslot \ diff --git a/source/game/bosstext.cpp b/source/game/bosstext.cpp index e68cb3974..f16743198 100644 --- a/source/game/bosstext.cpp +++ b/source/game/bosstext.cpp @@ -38,6 +38,14 @@ #include "level\level.h" #endif +#ifndef __GFX_FADER_H__ +#include "gfx\fader.h" +#endif + +#ifndef __GFX_ACTOR__H__ +#include "gfx/actor.h" +#endif + /* Std Lib ------- */ @@ -80,14 +88,29 @@ const CBossText::BOSS_DATA CBossText::s_bossData[]= }; +// Evil global pointer to the boss character +extern CThing *g_bossThing; + + /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ +int forcelevel=0; void CBossText::init() { +// if(GameScene.GetLevel().getLevelNumer() + m_scalableFontBank=new ("font") ScalableFontBank(); + m_scalableFontBank->initialise(&standardFont); + m_scalableFontBank->setPrintArea(20,0,512-40,256); + m_scalableFontBank->setJustification(FontBank::JUST_CENTRE); + + m_fontBank=new ("CGameScene::Init") FontBank(); + m_fontBank->initialise( &standardFont ); + m_fontBank->setPrintArea(20,0,512-40,256); + m_fontBank->setJustification(FontBank::JUST_CENTRE); } /*---------------------------------------------------------------------- @@ -98,6 +121,8 @@ void CBossText::init() ---------------------------------------------------------------------- */ void CBossText::shutdown() { + m_fontBank->dump(); delete m_fontBank; + m_scalableFontBank->dump(); delete m_scalableFontBank; } /*---------------------------------------------------------------------- @@ -108,8 +133,14 @@ void CBossText::shutdown() ---------------------------------------------------------------------- */ void CBossText::select() { -// CSoundMediator::stopSong(); -// CSoundMediator::setSong(s_bossData[Level.getCurrentChapter()-1].m_songId); +// ASSERT if(GameScene.GetLevel().getLevelNumer() + + m_readyToExit=false; + m_currentPage=0; + + CSoundMediator::stopSong(); + CSoundMediator::setSong(s_bossData[forcelevel/*GameScene.GetLevel().getCurrentChapter()-1*/].m_songId); + CFader::setFadingIn(); } /*---------------------------------------------------------------------- @@ -120,6 +151,21 @@ void CBossText::select() ---------------------------------------------------------------------- */ void CBossText::think(int _frames) { + if(!CFader::isFading()) + { + int pad; + pad=PadGetDown(0); + + if(pad&PAD_TRIANGLE) + { + exit(); + } + + if(pad&PAD_CROSS) + { + m_currentPage^=1; + } + } } /*---------------------------------------------------------------------- @@ -128,13 +174,14 @@ void CBossText::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ +DVECTOR pos={256,170}; void CBossText::render() { SpriteBank *sb; sFrameHdr *fhCorner,*fhSideBorder,*fhTopBorder; int x,y; POLY_F4 *f4; - POLY_G4 *g4; + POLY_FT4 *ft4; const BOSS_DATA *bd; // Scroll effect type thingy stuff @@ -144,66 +191,87 @@ void CBossText::render() fhTopBorder=sb->getFrameHeader(FRM__HELPBOX3); // Corners - sb->printFT4(fhCorner, 0, 0,false,false,4); - sb->printFT4(fhCorner,512, 0,true ,false,4); - sb->printFT4(fhCorner, 0,256,false,true ,4); - sb->printFT4(fhCorner,512,256,true ,true ,4); + sb->printFT4(fhCorner, 0, 0,false,false,MAX_OT-2); + sb->printFT4(fhCorner,512, 0,true ,false,MAX_OT-2); + sb->printFT4(fhCorner, 0,256,false,true ,MAX_OT-2); + sb->printFT4(fhCorner,512,256,true ,true ,MAX_OT-2); // Top/bottom for(x=fhCorner->W;x<512-fhCorner->W;x+=fhTopBorder->W) { - sb->printFT4(fhTopBorder,x, 0,false,false,4); - sb->printFT4(fhTopBorder,x,256,false,true ,4); + sb->printFT4(fhTopBorder,x, 0,false,false,MAX_OT-2); + sb->printFT4(fhTopBorder,x,256,false,true ,MAX_OT-2); } // Left/right for(y=fhCorner->H;y<256-fhCorner->H;y+=fhSideBorder->H) { - sb->printFT4(fhSideBorder, 0,y,false,false,4); - sb->printFT4(fhSideBorder,512,y,true ,false,4); + sb->printFT4(fhSideBorder, 0,y,false,false,MAX_OT-2); + sb->printFT4(fhSideBorder,512,y,true ,false,MAX_OT-2); } // Middle f4=GetPrimF4(); setXYWH(f4,fhCorner->W,fhCorner->H,512-(fhCorner->W*2),256-(fhCorner->H*2)); setRGB0(f4,224,184,107); - AddPrimToList(f4,5); + AddPrimToList(f4,MAX_OT-1); // Background - g4=GetPrimG4(); - setXYWH(g4,0,0,512,256); - setRGB0(g4,70,50,60); - setRGB1(g4,70,50,60); - setRGB2(g4,50,60,70); - setRGB3(g4,50,60,70); - AddPrimToList(g4,5); - - // Instructions.. - bd=&s_bossData[GameScene.GetLevel().getCurrentChapter()-1]; - - m_scalableFontBank->setTrans(0); - m_scalableFontBank->setSMode(0); - m_scalableFontBank->setPrintArea(20,0,512-40,256); - m_scalableFontBank->setJustification(FontBank::JUST_CENTRE); - m_scalableFontBank->setColour(128,128,128); - m_fontBank->setTrans(0); - m_fontBank->setSMode(0); - m_fontBank->setPrintArea(20,0,512-40,256); - m_fontBank->setJustification(FontBank::JUST_CENTRE); - + f4=GetPrimF4(); + setXYWH(f4,0,0,512,256); + setRGB0(f4,0,0,0); + AddPrimToList(f4,MAX_OT-1); + // Text + bd=&s_bossData[forcelevel/*GameScene.GetLevel().getCurrentChapter()-1*/]; m_fontBank->setColour(118,118,118); - m_fontBank->print(256-20,25,STR__BOSS_TEXT_TITLE); - m_scalableFontBank->setScale(300); - m_fontBank->setColour(128,128,128); - m_scalableFontBank->print(256-20,60,bd->m_titleTextId); - m_fontBank->setColour(118,118,118); - m_fontBank->print(256-20,80,bd->m_subTitleTextId); - m_fontBank->setColour(118,118,118); - m_fontBank->print(256-20,105,bd->m_instructionsTextId); + m_fontBank->print(256-20,30,STR__BOSS_TEXT_TITLE); + if(m_currentPage==0) + { + // Intro + m_scalableFontBank->setScale(400); + m_scalableFontBank->setColour(128,128,128); + m_scalableFontBank->print(256-20,80,bd->m_titleTextId); + + m_fontBank->setColour(118,118,118); + m_fontBank->print(256-20,190,bd->m_subTitleTextId); + + // Boss gfx + DVECTOR bossPoss; + bossPoss=pos; +// g_bossThing; + + } + else + { + // Instructions + m_fontBank->setColour(118,118,118); + m_fontBank->print(256-20,80,bd->m_instructionsTextId); + } - m_fontBank->setPrintArea(0,0,256,512); + // Button texts.. + sFrameHdr *fh1,*fh2; + int width; + + y=210; + + y+=13; + fh1=sb->getFrameHeader(FRM__BUTX); + width=fh1->W+10+m_fontBank->getStringWidth(STR__BOSS__CROSS_BUTTON); + x=256-(width/2); + sb->printFT4(fh1,x,y+3,0,0,0); + x+=fh1->W+10; + m_fontBank->print(x,y,STR__BOSS__CROSS_BUTTON); + + y+=13; + fh1=sb->getFrameHeader(FRM__BUTT); + width=fh1->W+10+m_fontBank->getStringWidth(STR__BOSS__TRIANGLE_BUTTON); + x=256-(width/2); + sb->printFT4(fh1,x,y+3,0,0,0); + x+=fh1->W+10; + m_fontBank->print(x,y,STR__BOSS__TRIANGLE_BUTTON); + } /*---------------------------------------------------------------------- @@ -214,13 +282,21 @@ void CBossText::render() ---------------------------------------------------------------------- */ int CBossText::isReadyToExit() { - return false; + return m_readyToExit&&!CFader::isFading(); } - - m_gamestate=GAMESTATE_FADING_OUT_OF_BOSS_INTRO; - CFader::setFadingOut(); +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBossText::exit() +{ + CFader::setFadingOut(); + m_readyToExit=true; +} /*=========================================================================== end */ diff --git a/source/game/bosstext.h b/source/game/bosstext.h index ccc68f1b6..ee2d12bff 100644 --- a/source/game/bosstext.h +++ b/source/game/bosstext.h @@ -47,6 +47,8 @@ public: private: + void exit(); + typedef struct { u16 m_titleTextId; @@ -57,10 +59,12 @@ private: static const BOSS_DATA s_bossData[]; - class FontBank *m_fontBank; class ScalableFontBank *m_scalableFontBank; + int m_readyToExit; + int m_currentPage; + }; diff --git a/source/game/game.cpp b/source/game/game.cpp index ecf8ec5ae..5734afb41 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -107,6 +107,10 @@ #include "save\save.h" #endif +#ifndef __GAME_BOSSTEXT_H__ +#include "game\bosstext.h" +#endif + #include "gfx\actor.h" static const int RenderZ=378;//256; Increased to make depth less, and SB more visible @@ -176,23 +180,9 @@ int CGameScene::s_bossHasBeenKilled; int CGameScene::s_justHitBossArenaTrigger; DVECTOR CGameScene::s_CamShake={0,0}; -/*****************************************************************************/ -typedef struct -{ - u16 m_titleTextId; - u16 m_subTitleTextId; - u16 m_instructionsTextId; - CSoundMediator::SONGID m_songId; -} BOSS_DATA; -static const BOSS_DATA s_bossData[]= -{ - { STR__CHAPTER_1__BOSS_TITLE, STR__CHAPTER_1__BOSS_SUB_TITLE, STR__CHAPTER_1__BOSS_INSTRUCTIONS, CSoundMediator::SONG_CHAPTER1_BOSS }, - { STR__CHAPTER_2__BOSS_TITLE, STR__CHAPTER_2__BOSS_SUB_TITLE, STR__CHAPTER_2__BOSS_INSTRUCTIONS, CSoundMediator::SONG_CHAPTER2_BOSS }, - { STR__CHAPTER_3__BOSS_TITLE, STR__CHAPTER_3__BOSS_SUB_TITLE, STR__CHAPTER_3__BOSS_INSTRUCTIONS, CSoundMediator::SONG_CHAPTER3_BOSS_AWAKE }, - { STR__CHAPTER_4__BOSS_TITLE, STR__CHAPTER_4__BOSS_SUB_TITLE, STR__CHAPTER_4__BOSS_INSTRUCTIONS, CSoundMediator::SONG_CHAPTER4_BOSS }, - { STR__CHAPTER_5__BOSS_TITLE, STR__CHAPTER_5__BOSS_SUB_TITLE, STR__CHAPTER_5__BOSS_INSTRUCTIONS, CSoundMediator::SONG_CHAPTER5_BOSS }, -}; +// Evil global pointer to the boss character +CThing *g_bossThing; /*****************************************************************************/ @@ -222,15 +212,20 @@ void CGameScene::init() m_HealthManager= new ("Health Manager") CHealthManager(); m_HealthManager->init(); + m_bossText->init(); + s_readyToExit=false; s_restartLevel=false; + m_bossText=new ("BossText") CBossText(); + CFader::setFadingIn(); CLevel::setIsBossRespawn(false); initLevel(); m_gamestate=GAMESTATE_SHOWING_LIVES; m_showingLivesTimer=0; + } /*****************************************************************************/ // This is a seperate funtion ( and virtual ) so that we can overload it for @@ -253,6 +248,8 @@ int CGameScene::canPause() void CGameScene::shutdown() { + m_bossText->shutdown(); delete m_bossText; + shutdownLevel(); m_pauseMenu->shutdown(); delete m_pauseMenu; @@ -275,8 +272,7 @@ void CGameScene::render() render_playing(); break; case GAMESTATE_BOSS_INTRO: - case GAMESTATE_FADING_OUT_OF_BOSS_INTRO: - render_boss_intro(); + m_bossText->render(); break; } } @@ -371,85 +367,6 @@ void CGameScene::render_playing() CActorPool::CleanUpCache(); } -/*****************************************************************************/ -void CGameScene::render_boss_intro() -{ - SpriteBank *sb; - sFrameHdr *fhCorner,*fhSideBorder,*fhTopBorder; - int x,y; - POLY_F4 *f4; - POLY_G4 *g4; - const BOSS_DATA *bd; - - // Scroll effect type thingy stuff - sb=getSpriteBank(); - fhCorner=sb->getFrameHeader(FRM__HELPBOX1); - fhSideBorder=sb->getFrameHeader(FRM__HELPBOX2); - fhTopBorder=sb->getFrameHeader(FRM__HELPBOX3); - - // Corners - sb->printFT4(fhCorner, 0, 0,false,false,4); - sb->printFT4(fhCorner,512, 0,true ,false,4); - sb->printFT4(fhCorner, 0,256,false,true ,4); - sb->printFT4(fhCorner,512,256,true ,true ,4); - - // Top/bottom - for(x=fhCorner->W;x<512-fhCorner->W;x+=fhTopBorder->W) - { - sb->printFT4(fhTopBorder,x, 0,false,false,4); - sb->printFT4(fhTopBorder,x,256,false,true ,4); - } - - // Left/right - for(y=fhCorner->H;y<256-fhCorner->H;y+=fhSideBorder->H) - { - sb->printFT4(fhSideBorder, 0,y,false,false,4); - sb->printFT4(fhSideBorder,512,y,true ,false,4); - } - - // Middle - f4=GetPrimF4(); - setXYWH(f4,fhCorner->W,fhCorner->H,512-(fhCorner->W*2),256-(fhCorner->H*2)); - setRGB0(f4,224,184,107); - AddPrimToList(f4,5); - - // Background - g4=GetPrimG4(); - setXYWH(g4,0,0,512,256); - setRGB0(g4,70,50,60); - setRGB1(g4,70,50,60); - setRGB2(g4,50,60,70); - setRGB3(g4,50,60,70); - AddPrimToList(g4,5); - - // Instructions.. - bd=&s_bossData[Level.getCurrentChapter()-1]; - - m_scalableFont->setTrans(0); - m_scalableFont->setSMode(0); - m_scalableFont->setPrintArea(20,0,512-40,256); - m_scalableFont->setJustification(FontBank::JUST_CENTRE); - m_scalableFont->setColour(128,128,128); - s_genericFont->setTrans(0); - s_genericFont->setSMode(0); - s_genericFont->setPrintArea(20,0,512-40,256); - s_genericFont->setJustification(FontBank::JUST_CENTRE); - - - s_genericFont->setColour(118,118,118); - s_genericFont->print(256-20,25,STR__BOSS_TEXT_TITLE); - m_scalableFont->setScale(300); - s_genericFont->setColour(128,128,128); - m_scalableFont->print(256-20,60,bd->m_titleTextId); - s_genericFont->setColour(118,118,118); - s_genericFont->print(256-20,80,bd->m_subTitleTextId); - s_genericFont->setColour(118,118,118); - s_genericFont->print(256-20,105,bd->m_instructionsTextId); - - - s_genericFont->setPrintArea(0,0,256,512); -} - /*****************************************************************************/ void CGameScene::think(int _frames) { @@ -473,26 +390,32 @@ void CGameScene::think(int _frames) case GAMESTATE_FADING_INTO_BOSS_INTRO: if(!CFader::isFading()) { - // Swap to the boss tune whilst it's all quiet! :) - CSoundMediator::stopSong(); - CSoundMediator::setSong(s_bossData[Level.getCurrentChapter()-1].m_songId); + m_bossText->select(); m_gamestate=GAMESTATE_BOSS_INTRO; CFader::setFadingIn(); } break; case GAMESTATE_BOSS_INTRO: - think_boss_intro(_frames); - break; - case GAMESTATE_FADING_OUT_OF_BOSS_INTRO: - if(!CFader::isFading()) + m_bossText->think(_frames); + if(m_bossText->isReadyToExit()) { m_gamestate=GAMESTATE_PLAYING; CSoundMediator::playSong(); + sendEvent( BOSS_FOUND_EVENT, NULL ); CFader::setFadingIn(); } break; } +// +#if defined (__USER_paul__) || defined (__USER_charles__) +if(PadGetDown(0)&PAD_UP) +{ + s_justHitBossArenaTrigger=true; +} +#endif +// + #ifdef __VERSION_DEBUG__ #if defined (__USER_paul__) || defined (__USER_daveo__) || defined (__USER_charles__) @@ -715,21 +638,6 @@ void CGameScene::think_playing(int _frames) } -/*****************************************************************************/ -void CGameScene::think_boss_intro(int _frames) -{ - if(!CFader::isFading()) - { - if(PadGetDown(0)&PAD_CROSS) - { - m_gamestate=GAMESTATE_FADING_OUT_OF_BOSS_INTRO; - CFader::setFadingOut(); - sendEvent( BOSS_FOUND_EVENT, NULL ); - } - } -} - - /*****************************************************************************/ int CGameScene::readyToShutdown() { @@ -794,6 +702,8 @@ void CGameScene::hitBossArenaTrigger() /*****************************************************************************/ void CGameScene::initLevel() { + g_bossThing=NULL; + CSoundMediator::setCanPlaySfx(false); Level.DisplayLoadingScreen(s_globalLevelSelectThing); diff --git a/source/game/game.h b/source/game/game.h index 27353467a..956c27607 100644 --- a/source/game/game.h +++ b/source/game/game.h @@ -77,7 +77,6 @@ private: GAMESTATE_PLAYING, GAMESTATE_FADING_INTO_BOSS_INTRO, GAMESTATE_BOSS_INTRO, - GAMESTATE_FADING_OUT_OF_BOSS_INTRO, }GAMESTATE; enum @@ -92,10 +91,10 @@ private: void think_showing_lives(int _frames); void think_playing(int _frames); - void think_boss_intro(int _frames); void render_showing_lives(); void render_playing(); - void render_boss_intro(); + + class CBossText *m_bossText; protected: