From: Laszlo T. <ave...@us...> - 2005-07-23 19:49:34
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2331/plugins/Core Modified Files: Actions.cpp Actor.cpp Actor.h ActorBlock.cpp ActorBlock.h GSUtils.cpp GameScript.cpp GameScript.h GlobalTimer.cpp GlobalTimer.h Interface.cpp Triggers.cpp Log Message: cleaned up some code regarding cutscenes and scripting 1. cutscenes in IE are more primitive than we first assumed (no conditions, only first response ever executed) 2. removed unused cutscene code from GlobalTimer 3. added STATE_DEACTIVATED flag (which apparently holds the place of STATE_DISEASED) 4. enabled a few already implemented triggers/actions Index: Actor.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.h,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -d -r1.81 -r1.82 *** Actor.h 22 Jul 2005 15:43:07 -0000 1.81 --- Actor.h 23 Jul 2005 19:49:24 -0000 1.82 *************** *** 77,80 **** --- 77,81 ---- #define IF_NOINT 32 //cannot interrupt the actions of this actor (save is not possible!) #define IF_CLEANUP 64 //actor died chunky death, or other total destruction + #define IF_BECAMEVISIBLE 128//actor just became visible /** flags for GetActor */ Index: GlobalTimer.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GlobalTimer.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** GlobalTimer.h 27 Mar 2005 13:27:00 -0000 1.8 --- GlobalTimer.h 23 Jul 2005 19:49:25 -0000 1.9 *************** *** 32,36 **** unsigned long interval; ! GameScript* CutScene; unsigned long fadeToCounter, fadeToMax; --- 32,36 ---- unsigned long interval; ! //GameScript* CutScene; unsigned long fadeToCounter, fadeToMax; *************** *** 51,55 **** void SetFadeFromColor(unsigned long Count); void SetWait(unsigned long Count); ! void SetCutScene(GameScript* script); void SetScreenShake(unsigned long shakeX, unsigned long shakeY, unsigned long Count); --- 51,55 ---- void SetFadeFromColor(unsigned long Count); void SetWait(unsigned long Count); ! //void SetCutScene(GameScript* script); void SetScreenShake(unsigned long shakeX, unsigned long shakeY, unsigned long Count); *************** *** 59,63 **** void UpdateAnimations(); public: ! bool CutSceneMode; Region shakeStartVP; }; --- 59,63 ---- void UpdateAnimations(); public: ! //bool CutSceneMode; Region shakeStartVP; }; Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.318 retrieving revision 1.319 diff -C2 -d -r1.318 -r1.319 *** GameScript.cpp 23 Jul 2005 17:26:15 -0000 1.318 --- GameScript.cpp 23 Jul 2005 19:49:25 -0000 1.319 *************** *** 75,80 **** --- 75,82 ---- {"damagetakenlt", GameScript::DamageTakenLT, 0}, {"dead", GameScript::Dead, 0}, + {"delay", GameScript::Delay, 0}, {"detect", GameScript::See, 0}, //so far i see no difference {"die", GameScript::Die, 0}, + {"died", GameScript::Died, 0}, {"difficulty", GameScript::Difficulty, 0}, {"difficultygt", GameScript::DifficultyGT, 0}, *************** *** 676,679 **** --- 678,682 ---- {"tomsstringdisplayer", GameScript::DisplayMessage, 0}, {"triggeractivation", GameScript::TriggerActivation, 0}, + {"triggerwalkto", GameScript::MoveToObject,AF_BLOCKING}, //something like this {"turn", GameScript::Turn, 0}, {"turnamt", GameScript::TurnAMT, AF_BLOCKING}, //relative Face() *************** *** 1326,1336 **** return; } for (unsigned int a = 0; a < script->responseBlocksCount; a++) { ResponseBlock* rB = script->responseBlocks[a]; ! if (EvaluateCondition( this->MySelf, rB->condition )) { ! ExecuteResponseSet( this->MySelf, rB->responseSet ); endReached = false; } } } --- 1329,1354 ---- return; } + //according to research, cutscenes don't evaluate conditions, and always + //runs the first response, this is a serious cutback on possible + //functionality, so i kept the gemrb specific code too. + #ifdef GEMRB_CUTSCENES + //this is the logical way of executing a cutscene for (unsigned int a = 0; a < script->responseBlocksCount; a++) { ResponseBlock* rB = script->responseBlocks[a]; ! if (EvaluateCondition( MySelf, rB->condition )) { ! ExecuteResponseSet( MySelf, rB->responseSet ); endReached = false; } } + #else + //this is the apparent IE behaviour + for (unsigned int a = 0; a < script->responseBlocksCount; a++) { + ResponseBlock* rB = script->responseBlocks[a]; + ResponseSet * rS = rB->responseSet; + if (rS->responsesCount) { + ExecuteResponse( MySelf, rS->responses[0] ); + } + } + #endif } *************** *** 2615,2618 **** --- 2633,2638 ---- //ogres in dltc need this Sender->AddAction( aC ); + //this was a mistake, nothing + //requires it, so use the code above //AddAction( Sender, aC ); } Index: GSUtils.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GSUtils.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** GSUtils.cpp 22 Jul 2005 17:17:27 -0000 1.16 --- GSUtils.cpp 23 Jul 2005 19:49:25 -0000 1.17 *************** *** 477,480 **** --- 477,481 ---- radius=0; switch (flags & CC_MASK) { + //creates creature just off the screen case CC_OFFSCREEN: { *************** *** 827,831 **** return 0; } ! Targets* tgts = EvaluateObject(Sender, oC); int count = tgts->Count(); delete tgts; --- 828,835 ---- return 0; } ! // EvaluateObject will return [PC] ! // GetAllObjects will also return Myself (evaluates object filters) ! // i believe we need the latter here ! Targets* tgts = GetAllObjects(Sender, oC); int count = tgts->Count(); delete tgts; Index: GlobalTimer.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GlobalTimer.cpp,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** GlobalTimer.cpp 17 Jul 2005 18:58:25 -0000 1.22 --- GlobalTimer.cpp 23 Jul 2005 19:49:25 -0000 1.23 *************** *** 7,11 **** { interval = ( 1000 / AI_UPDATE_TIME ); ! CutSceneMode = false; Init(); } --- 7,11 ---- { interval = ( 1000 / AI_UPDATE_TIME ); ! //CutSceneMode = false; Init(); } *************** *** 17,21 **** void GlobalTimer::Init() { ! CutScene = NULL; fadeToCounter = 0; fadeFromCounter = 1; --- 17,21 ---- void GlobalTimer::Init() { ! //CutScene = NULL; fadeToCounter = 0; fadeFromCounter = 1; *************** *** 86,89 **** --- 86,90 ---- game->RealTime++; + /* if (CutScene) { if (CutScene->endReached) { *************** *** 94,97 **** --- 95,99 ---- return; } + */ } } *************** *** 119,123 **** waitCounter = Count; } ! void GlobalTimer::SetCutScene(GameScript* script) { --- 121,125 ---- waitCounter = Count; } ! /* void GlobalTimer::SetCutScene(GameScript* script) { *************** *** 130,134 **** CutSceneMode = false; } ! void GlobalTimer::AddAnimation(ControlAnimation* ctlanim, unsigned long time) { --- 132,136 ---- CutSceneMode = false; } ! */ void GlobalTimer::AddAnimation(ControlAnimation* ctlanim, unsigned long time) { Index: GameScript.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.h,v retrieving revision 1.214 retrieving revision 1.215 diff -C2 -d -r1.214 -r1.215 *** GameScript.h 23 Jul 2005 17:26:15 -0000 1.214 --- GameScript.h 23 Jul 2005 19:49:25 -0000 1.215 *************** *** 703,706 **** --- 703,707 ---- static int AtLocation(Scriptable* Sender, Trigger* parameter); static int AttackedBy(Scriptable* Sender, Trigger* parameters); + static int BecameVisible(Scriptable* Sender, Trigger* parameters); static int BitCheck(Scriptable* Sender, Trigger* parameters); static int BitCheckExact(Scriptable* Sender, Trigger* parameters); *************** *** 732,735 **** --- 733,737 ---- static int Delay(Scriptable* Sender, Trigger* parameters); static int Die(Scriptable* Sender, Trigger* parameters); + static int Died(Scriptable* Sender, Trigger* parameters); static int Difficulty(Scriptable* Sender, Trigger* parameters); static int DifficultyGT(Scriptable* Sender, Trigger* parameters); Index: Triggers.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Triggers.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** Triggers.cpp 20 Jul 2005 21:46:30 -0000 1.18 --- Triggers.cpp 23 Jul 2005 19:49:25 -0000 1.19 *************** *** 588,592 **** int GameScript::OnCreation(Scriptable* Sender, Trigger* /*parameters*/) { ! if (Sender->OnCreation) { Sender->SetBitTrigger(BT_ONCREATION); return 1; --- 588,592 ---- int GameScript::OnCreation(Scriptable* Sender, Trigger* /*parameters*/) { ! if (Sender->Active&SCR_ONCREATION) { Sender->SetBitTrigger(BT_ONCREATION); return 1; *************** *** 1200,1206 **** } int GameScript::Die(Scriptable* Sender, Trigger* /*parameters*/) { ! if (!Sender || Sender->Type!=ST_ACTOR) { return 0; } --- 1200,1220 ---- } + int GameScript::BecameVisible(Scriptable* Sender, Trigger* /*parameters*/) + { + if (Sender->Type!=ST_ACTOR) { + return 0; + } + Actor *act=(Actor *) Sender; + if (act->InternalFlags&IF_BECAMEVISIBLE) { + //set trigger to erase + act->SetBitTrigger(BT_BECAMEVISIBLE); + return 1; + } + return 0; + } + int GameScript::Die(Scriptable* Sender, Trigger* /*parameters*/) { ! if (Sender->Type!=ST_ACTOR) { return 0; } *************** *** 1214,1217 **** --- 1228,1246 ---- } + int GameScript::Died(Scriptable* Sender, Trigger* parameters) + { + Scriptable* tar = GetActorFromObject( Sender, parameters->objectParameter ); + if (!tar || tar->Type!=ST_ACTOR) { + return 0; + } + Actor *act=(Actor *) tar; + if (act->InternalFlags&IF_JUSTDIED) { + //set trigger to erase + act->SetBitTrigger(BT_DIE); + return 1; + } + return 0; + } + int GameScript::PartyMemberDied(Scriptable* /*Sender*/, Trigger* /*parameters*/) { Index: Actor.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.cpp,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -d -r1.119 -r1.120 *** Actor.cpp 20 Jul 2005 21:46:28 -0000 1.119 --- Actor.cpp 23 Jul 2005 19:49:24 -0000 1.120 *************** *** 624,629 **** void Actor::Resurrect() { ! InternalFlags=0; ! SetStat(IE_STATE_ID,0); SetStat(IE_HITPOINTS, 255); ClearActions(); --- 624,629 ---- void Actor::Resurrect() { ! InternalFlags = 0; ! SetStat(IE_STATE_ID, 0); SetStat(IE_HITPOINTS, 255); ClearActions(); Index: Interface.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.cpp,v retrieving revision 1.334 retrieving revision 1.335 diff -C2 -d -r1.334 -r1.335 *** Interface.cpp 17 Jul 2005 18:58:25 -0000 1.334 --- Interface.cpp 23 Jul 2005 19:49:25 -0000 1.335 *************** *** 2486,2492 **** --- 2486,2494 ---- void Interface::SetCutSceneMode(bool active) { + /* if (!active) { timer->SetCutScene( NULL ); } + */ GameControl *gc = GetGameControl(); if (gc) { *************** *** 2507,2511 **** bool Interface::InCutSceneMode() { ! return timer->CutSceneMode; } --- 2509,2513 ---- bool Interface::InCutSceneMode() { ! return (GetGameControl()->GetScreenFlags()&SF_DISABLEMOUSE)!=0; } Index: ActorBlock.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.h,v retrieving revision 1.85 retrieving revision 1.86 diff -C2 -d -r1.85 -r1.86 *** ActorBlock.h 22 Jul 2005 15:43:18 -0000 1.85 --- ActorBlock.h 23 Jul 2005 19:49:25 -0000 1.86 *************** *** 88,95 **** #define CONT_DISABLED 32 ! //scriptable (actor) flags ! #define SCR_ACTIVE 1 ! #define SCR_CUTSCENEID 2 #define SCR_VISIBLE 4 //CheckTravel return value --- 88,96 ---- #define CONT_DISABLED 32 ! //scriptable flags ! #define SCR_ACTIVE 1 ! #define SCR_CUTSCENEID 2 #define SCR_VISIBLE 4 + #define SCR_ONCREATION 8 //CheckTravel return value *************** *** 103,107 **** //bits for binary trigger bitfield #define BT_DIE 1 ! #define BT_ONCREATION 2 #ifdef WIN32 --- 104,109 ---- //bits for binary trigger bitfield #define BT_DIE 1 ! #define BT_ONCREATION 2 ! #define BT_BECAMEVISIBLE 4 #ifdef WIN32 *************** *** 148,155 **** unsigned char textDisplaying; unsigned long timeStartDisplaying; - //actor visibility flags - //1 = active - //8 = scripting name overwritten with area actor entry label - //other flags are in CREAREAFL in iwd2 ieDword Active; ieDword LastTrigger; --- 150,153 ---- *************** *** 158,162 **** Action* CurrentAction; bool resetAction; - bool OnCreation; unsigned long playDeadCounter; public: --- 156,159 ---- *************** *** 182,186 **** void ClearTriggers(); void SetBitTrigger(ieDword bittrigger); ! void AddTrigger(ieDword *actorref); }; --- 179,183 ---- void ClearTriggers(); void SetBitTrigger(ieDword bittrigger); ! void AddTrigger(ieDword *actorref); }; *************** *** 340,343 **** --- 337,341 ---- ieStrRef NameStrRef; ieResRef Dialog; + ieDword InternalFlags; //for triggers private: void ToggleTiles(int State, bool playsound = false); Index: ActorBlock.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.cpp,v retrieving revision 1.104 retrieving revision 1.105 diff -C2 -d -r1.104 -r1.105 *** ActorBlock.cpp 22 Jul 2005 15:43:17 -0000 1.104 --- ActorBlock.cpp 23 Jul 2005 19:49:24 -0000 1.105 *************** *** 42,46 **** LastTrigger = 0; LastEntered = 0; - Active = SCR_ACTIVE; CurrentAction = NULL; startTime = 0; --- 42,45 ---- *************** *** 50,54 **** resetAction = false; neverExecuted = true; ! OnCreation = true; area = 0; Pos.x = 0; --- 49,53 ---- resetAction = false; neverExecuted = true; ! Active = SCR_ACTIVE | SCR_ONCREATION; area = 0; Pos.x = 0; *************** *** 268,272 **** } if (bittriggers & BT_ONCREATION) { ! OnCreation = false; } } --- 267,271 ---- } if (bittriggers & BT_ONCREATION) { ! Active &= ~SCR_ONCREATION; } } *************** *** 624,629 **** UnLockSound[0] = 0; overlay = Overlay; ! LinkedInfo[0]=0; ! OpenStrRef=(ieDword) -1; } --- 623,629 ---- UnLockSound[0] = 0; overlay = Overlay; ! LinkedInfo[0] = 0; ! OpenStrRef = (ieDword) -1; ! InternalFlags = 0; } Index: Actions.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actions.cpp,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** Actions.cpp 23 Jul 2005 17:26:15 -0000 1.26 --- Actions.cpp 23 Jul 2005 19:49:24 -0000 1.27 *************** *** 432,435 **** --- 432,436 ---- } + //moves pcs and npcs from an area to another area void GameScript::MoveGlobalsTo(Scriptable* /*Sender*/, Action* parameters) { *************** *** 521,525 **** void GameScript::CreateCreatureOffScreen(Scriptable* Sender, Action* parameters) { ! CreateCreatureCore( Sender, parameters, CC_OFFSCREEN | CC_CHECK_OVERLAP ); //don't check impassable? } --- 522,526 ---- void GameScript::CreateCreatureOffScreen(Scriptable* Sender, Action* parameters) { ! CreateCreatureCore( Sender, parameters, CC_OFFSCREEN | CC_CHECK_IMPASSABLE | CC_CHECK_OVERLAP ); } *************** *** 533,537 **** void GameScript::CreateCreatureObjectOffScreen(Scriptable* Sender, Action* parameters) { ! CreateCreatureCore( Sender, parameters, CC_OFFSCREEN | CC_OBJECT | CC_CHECK_IMPASSABLE | CC_CHECK_OVERLAP); } --- 534,538 ---- void GameScript::CreateCreatureObjectOffScreen(Scriptable* Sender, Action* parameters) { ! CreateCreatureCore( Sender, parameters, CC_OFFSCREEN | CC_OBJECT | CC_CHECK_IMPASSABLE | CC_CHECK_OVERLAP ); } *************** *** 3973,3977 **** } ! /* so far it is the same, probably more stuff to copy*/ void GameScript::PolymorphCopyBase(Scriptable* Sender, Action* parameters) { --- 3974,3978 ---- } ! /* according to IESDP this only copies the animation ID */ void GameScript::PolymorphCopyBase(Scriptable* Sender, Action* parameters) { *************** *** 3983,3987 **** return; } ! PolymorphCopyCore((Actor *) Sender, (Actor *) tar, true); } --- 3984,3990 ---- return; } ! Actor *act = (Actor *) Sender; ! Actor *actor = (Actor *) tar; ! act->SetStat(IE_ANIMATION_ID, actor->GetStat(IE_ANIMATION_ID) ); } *************** *** 4245,4246 **** --- 4248,4250 ---- SetVariable( Sender, parameters->string0Parameter, value ); } + |