From: Laszlo T. <ave...@us...> - 2007-02-08 20:13:57
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv31423/plugins/Core Modified Files: Actions.cpp AnimationFactory.cpp AnimationFactory.h GameScript.cpp Log Message: implemented endgame/quitgame actions (pst/iwd2) implemented a few iwd2 opcodes Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.388 retrieving revision 1.389 diff -C2 -d -r1.388 -r1.389 *** GameScript.cpp 6 Feb 2007 22:20:38 -0000 1.388 --- GameScript.cpp 8 Feb 2007 20:12:12 -0000 1.389 *************** *** 471,474 **** --- 471,475 ---- {"endcredits", GameScript::EndCredits, 0},//movie {"endcutscenemode", GameScript::EndCutSceneMode, 0}, + {"endgame", GameScript::QuitGame, 0}, //ending in iwd2 {"enemy", GameScript::Enemy, 0}, {"equipitem", GameScript::EquipItem, AF_BLOCKING}, //why blocking??? *************** *** 535,539 **** {"globalxor", GameScript::GlobalXor,AF_MERGESTRINGS}, {"globalxorglobal", GameScript::GlobalXorGlobal,AF_MERGESTRINGS}, ! {"gotostartscreen", GameScript::QuitGame, 0}, {"help", GameScript::Help, 0}, {"hide", GameScript::Hide, 0}, --- 536,540 ---- {"globalxor", GameScript::GlobalXor,AF_MERGESTRINGS}, {"globalxorglobal", GameScript::GlobalXorGlobal,AF_MERGESTRINGS}, ! {"gotostartscreen", GameScript::QuitGame, 0},//ending {"help", GameScript::Help, 0}, {"hide", GameScript::Hide, 0}, Index: AnimationFactory.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/AnimationFactory.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** AnimationFactory.h 4 Feb 2007 15:50:00 -0000 1.7 --- AnimationFactory.h 8 Feb 2007 20:12:12 -0000 1.8 *************** *** 44,48 **** std::vector< CycleEntry> cycles; unsigned short* FLTable; // Frame Lookup Table ! const unsigned char* FrameData; public: AnimationFactory(const char* ResRef); --- 44,48 ---- std::vector< CycleEntry> cycles; unsigned short* FLTable; // Frame Lookup Table ! unsigned char* FrameData; public: AnimationFactory(const char* ResRef); *************** *** 51,55 **** void AddCycle(CycleEntry cycle); void LoadFLT(unsigned short* buffer, int count); ! void SetFrameData(const unsigned char* FrameData); Animation* GetCycle(unsigned char cycle); /** No descriptions */ --- 51,55 ---- void AddCycle(CycleEntry cycle); void LoadFLT(unsigned short* buffer, int count); ! void SetFrameData(unsigned char* FrameData); Animation* GetCycle(unsigned char cycle); /** No descriptions */ *************** *** 60,64 **** int GetCycleSize(int idx) { return cycles[idx].FramesCount; } Sprite2D* GetPaperdollImage(ieDword *Colors, Sprite2D *&Picture2, ! unsigned int type); }; --- 60,64 ---- int GetCycleSize(int idx) { return cycles[idx].FramesCount; } Sprite2D* GetPaperdollImage(ieDword *Colors, Sprite2D *&Picture2, ! unsigned int type); }; Index: AnimationFactory.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/AnimationFactory.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** AnimationFactory.cpp 4 Feb 2007 15:50:00 -0000 1.13 --- AnimationFactory.cpp 8 Feb 2007 20:12:12 -0000 1.14 *************** *** 39,45 **** core->GetVideoDriver()->FreeSprite( frames[i] ); } ! delete[] FLTable; // TODO: add assert here on refcount (which needs to be added...) ! delete[] FrameData; } --- 39,47 ---- core->GetVideoDriver()->FreeSprite( frames[i] ); } ! if (FLTable) ! free( FLTable); // TODO: add assert here on refcount (which needs to be added...) ! if (FrameData) ! free( FrameData); } *************** *** 59,67 **** free( FLTable ); } ! FLTable = new unsigned short[count]; memcpy( FLTable, buffer, count * sizeof( unsigned short ) ); } ! void AnimationFactory::SetFrameData(const unsigned char* FrameData) { this->FrameData = FrameData; --- 61,70 ---- free( FLTable ); } ! //FLTable = new unsigned short[count]; ! FLTable = (unsigned short *) malloc(count * sizeof( unsigned short ) ); memcpy( FLTable, buffer, count * sizeof( unsigned short ) ); } ! void AnimationFactory::SetFrameData(unsigned char* FrameData) { this->FrameData = FrameData; *************** *** 109,114 **** Sprite2D* AnimationFactory::GetPaperdollImage(ieDword *Colors, ! Sprite2D *&Picture2, ! unsigned int type) { if (frames.size()<2) { --- 112,116 ---- Sprite2D* AnimationFactory::GetPaperdollImage(ieDword *Colors, ! Sprite2D *&Picture2, unsigned int type) { if (frames.size()<2) { Index: Actions.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actions.cpp,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -d -r1.102 -r1.103 *** Actions.cpp 4 Feb 2007 14:22:05 -0000 1.102 --- Actions.cpp 8 Feb 2007 20:12:12 -0000 1.103 *************** *** 3497,3500 **** --- 3497,3501 ---- } + //easily hardcoded end sequence void GameScript::EndCredits(Scriptable* /*Sender*/, Action* /*parameters*/) { *************** *** 3502,3505 **** --- 3503,3507 ---- } + //easily hardcoded end sequence void GameScript::ExpansionEndCredits(Scriptable* /*Sender*/, Action* /*parameters*/) { *************** *** 3507,3515 **** } void GameScript::QuitGame(Scriptable* Sender, Action* parameters) { ClearAllActions(Sender, parameters); ! //back to start script ! core->QuitFlag = QF_EXITGAME; } --- 3509,3523 ---- } + //always quits game, but based on game it can play end animation, or display + //death text, etc + //this covers: + //QuitGame (play one of 3 movies in PST) + //EndGame (display death screen with strref) void GameScript::QuitGame(Scriptable* Sender, Action* parameters) { ClearAllActions(Sender, parameters); ! core->GetDictionary()->SetAt("QuitGame", (ieDword) parameters->int0Parameter); ! strncpy( core->NextScript, "QuitGame", sizeof(core->NextScript) ); ! core->QuitFlag |= QF_CHANGESCRIPT; } |