From: Laszlo T. <ave...@us...> - 2004-07-31 09:24:22
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23232 Modified Files: Actor.h ActorBlock.cpp ActorBlock.h Animation.cpp CharAnimations.cpp CharAnimations.h Core.cpp Game.cpp Game.h GameControl.cpp GameControl.h GameScript.cpp Interface.cpp Interface.h Map.cpp Map.h Log Message: Added: several changes on movement between areas, script handling freeing animations in a less complex way Index: Actor.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.h,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** Actor.h 25 Jul 2004 13:39:24 -0000 1.37 --- Actor.h 31 Jul 2004 09:24:10 -0000 1.38 *************** *** 65,69 **** char SmallPortrait[9]; char LargePortrait[9]; ! /** 0: NPC, 1-6 party slot */ unsigned char InParty; char* LongName, * ShortName; --- 65,69 ---- char SmallPortrait[9]; char LargePortrait[9]; ! /** 0: NPC, 1-8 party slot */ unsigned char InParty; char* LongName, * ShortName; *************** *** 72,81 **** ieDword ZombieDisguise; // PST - // for remapping palette - ieByte ColorsCount; - ieWord AppearanceFlags1; ieWord AppearanceFlags2; ieWord Colors[7]; ieByte ColorPlacements[7]; --- 72,80 ---- ieDword ZombieDisguise; // PST ieWord AppearanceFlags1; ieWord AppearanceFlags2; + // for remapping palette + ieByte ColorsCount; ieWord Colors[7]; ieByte ColorPlacements[7]; Index: Map.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.cpp,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** Map.cpp 25 May 2004 16:37:54 -0000 1.98 --- Map.cpp 31 Jul 2004 09:24:10 -0000 1.99 *************** *** 24,27 **** --- 24,29 ---- #include "Interface.h" #include "PathFinder.h" + #include "../../includes/strrefs.h" + //#include <stdlib.h> #ifndef WIN32 *************** *** 87,95 **** InitPathFinder(); } } Map::~Map(void) ! { ! unsigned int i; if (MapSet) { --- 89,98 ---- InitPathFinder(); } + ChangeArea=false; } Map::~Map(void) ! { ! unsigned int i; if (MapSet) { *************** *** 106,109 **** --- 109,115 ---- Actor* a = actors[i]; if (a && !a->InParty && !a->FromGame) { + //don't delete NPC/PC + //deleted PC's should also be saved with the + //area delete ( a ); } *************** *** 171,177 **** } void Map::DrawMap(Region viewport, GameControl* gc) { ! unsigned int i; //Draw the Map if (tm) { --- 177,228 ---- } + void Map::UseExit(Actor *actor, InfoPoint *ip) + { + char Tmp[256]; + + if(!ChangeArea) + return; + int EveryOne = ip->CheckTravel(actor); + printf("Checktravel returned %d\n",EveryOne); + switch(EveryOne) { + case 2: + core->DisplayConstantString(STR_WHOLEPARTY,0xffffff); //white + return; + case 0: + return; + case 1: case 3: + break; + } + + if (ip->Destination[0] != 0) { + CreateMovement(Tmp, ip->Destination, ip->EntranceName); + if(EveryOne&2) { + Game *game=core->GetGame(); + int i=game->GetPartySize(false); + while(i--) { + game->GetPC(i)->ClearPath(); + game->GetPC(i)->ClearActions(); + game->GetPC(i)->AddAction( GameScript::GenerateAction( Tmp ) ); + } + return; + } + actor->ClearPath(); + actor->ClearActions(); + actor->AddAction( GameScript::GenerateAction( Tmp ) ); + } else { + if (ip->Scripts[0]) { + ip->LastTrigger = actor; + ip->ExecuteScript( ip->Scripts[0] ); + ip->ProcessActions(); + //this isn't a continuously running script + //turning oncreation to false on first run + ip->OnCreation = false; + } + } + } + void Map::DrawMap(Region viewport, GameControl* gc) { ! unsigned int i; //Draw the Map if (tm) { *************** *** 206,213 **** if (ip->Type == ST_TRIGGER) { //Check if this InfoPoint was activated ! if (ip->LastTrigger) //Run the InfoPoint script ip->ExecuteScript( ip->Scripts[0] ); ip->OnCreation = false; continue; } --- 257,267 ---- if (ip->Type == ST_TRIGGER) { //Check if this InfoPoint was activated ! if (ip->LastTrigger) { //Run the InfoPoint script ip->ExecuteScript( ip->Scripts[0] ); + //OnCreation won't trigger the INFO point + //If it does, alter the condition above ip->OnCreation = false; + } continue; } *************** *** 225,229 **** BBox.w += 1000; } ! i=0; while (true) { Actor* actor = core->GetGame()->GetPC( i++ ); --- 279,283 ---- BBox.w += 1000; } ! i=0; while (true) { Actor* actor = core->GetGame()->GetPC( i++ ); *************** *** 234,239 **** if (BBox.PointInside( actor->XPos, actor->YPos )) { if (ip->Type == ST_PROXIMITY) { ! if (ip->outline->BBox.PointInside( actor->XPos, ! actor->YPos )) { if (ip->outline->PointIn( actor->XPos, actor->YPos )) { ip->LastEntered = actor; --- 288,292 ---- if (BBox.PointInside( actor->XPos, actor->YPos )) { if (ip->Type == ST_PROXIMITY) { ! if (ip->outline->BBox.PointInside( actor->XPos, actor->YPos )) { if (ip->outline->PointIn( actor->XPos, actor->YPos )) { ip->LastEntered = actor; *************** *** 245,269 **** } else { //ST_TRAVEL if (ip->outline->PointIn( actor->XPos, actor->YPos )) { ! char Tmp[256]; ! sprintf( Tmp, ! "[color=00FF00]%s TravelTrigger Activated: [/color]Should Move to Area %s near %s", ! ip->Name, ip->Destination, ip->EntranceName ); ! gc->DisplayString( Tmp ); ! ! if (ip->Destination[0] != 0) { ! CreateMovement(Tmp, ip->Destination, ip->EntranceName); ! actor->ClearPath(); ! actor->ClearActions(); ! actor->AddAction( GameScript::GenerateAction( Tmp ) ); ! } else { ! if (ip->Scripts[0]) { ! ip->LastTrigger = actor; ! //ip->Scripts[0]->Update(); ! ip->ExecuteScript( ip->Scripts[0] ); ! ip->ProcessActions(); ! ip->OnCreation = false; ! } ! } } } --- 298,306 ---- } else { //ST_TRAVEL + //don't move if doing something else + if(actor->GetNextAction()) + break; if (ip->outline->PointIn( actor->XPos, actor->YPos )) { ! UseExit(actor, ip); } } *************** *** 301,309 **** if (!actor->Active) continue; if (actor->DeleteMe) { DeleteActor( actor ); continue; } ! actor->ProcessActions(); actor->DoStep( LightMap ); CharAnimations* ca = actor->GetAnims(); --- 338,357 ---- if (!actor->Active) continue; + actor->ProcessActions(); + //moved scripts before display + //this should enable scripts for offscreen actors + for (i = 0; i < 8; i++) { + if (actor->Scripts[i]) + actor->ExecuteScript( actor->Scripts[i] ); + } + if (actor->DeleteMe) { DeleteActor( actor ); continue; } ! ! actor->OnCreation = false; ! actor->inventory.CalculateWeight(); ! actor->DoStep( LightMap ); CharAnimations* ca = actor->GetAnims(); *************** *** 363,372 **** } } - for (i = 0; i < 8; i++) { - if (actor->Scripts[i]) - actor->ExecuteScript( actor->Scripts[i] ); - } - actor->OnCreation = false; - actor->inventory.CalculateWeight(); } } --- 411,414 ---- *************** *** 460,469 **** } if (flags&GA_SELECT) { ! if (actor->BaseStats[IE_UNSELECTABLE]) { continue; } } if (flags&GA_NO_DEAD) { ! if (actor->BaseStats[IE_STATE_ID] & STATE_DEAD) { continue; } --- 502,511 ---- } if (flags&GA_SELECT) { ! if (actor->GetStat(IE_UNSELECTABLE) ) { continue; } } if (flags&GA_NO_DEAD) { ! if (actor->GetStat(IE_STATE_ID) & STATE_DEAD) { continue; } *************** *** 499,503 **** } ! int Map::GetActorInRect(Actor**& actorlist, Region& rgn) { actorlist = ( Actor * * ) malloc( actors.size() * sizeof( Actor * ) ); --- 541,545 ---- } ! int Map::GetActorInRect(Actor**& actorlist, Region& rgn, bool onlyparty) { actorlist = ( Actor * * ) malloc( actors.size() * sizeof( Actor * ) ); *************** *** 506,509 **** --- 548,554 ---- while(i--) { Actor* actor = actors[i]; + //use this function only for party? + if(onlyparty && !actor->InParty) + continue; if (actor->BaseStats[IE_UNSELECTABLE] || ( actor->BaseStats[IE_STATE_ID] & STATE_DEAD ) || *************** *** 706,709 **** --- 751,755 ---- } + //returns true if none of the partymembers are on the map bool Map::CanFree() { Index: CharAnimations.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/CharAnimations.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** CharAnimations.h 25 Jul 2004 00:29:25 -0000 1.22 --- CharAnimations.h 31 Jul 2004 09:24:10 -0000 1.23 *************** *** 92,96 **** class GEM_EXPORT CharAnimations { private: ! Animation* Anims[MAX_ANIMS][16]; public: // DEBUG: palette before replacing personalized/random colors --- 92,96 ---- class GEM_EXPORT CharAnimations { private: ! Animation* Anims[MAX_ANIMS][MAX_ORIENT]; public: // DEBUG: palette before replacing personalized/random colors Index: Core.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Core.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Core.cpp 1 Jul 2004 06:34:48 -0000 1.17 --- Core.cpp 31 Jul 2004 09:24:10 -0000 1.18 *************** *** 69,72 **** --- 69,87 ---- //// Globally used functions + + int Distance(int X, int Y, Scriptable *b) + { + long x = ( X - b->XPos ); + long y = ( Y - b->YPos ); + return (int) sqrt( ( double ) ( x* x + y* y ) ); + } + + int Distance(Scriptable *a, Scriptable *b) + { + long x = ( a->XPos - b->XPos ); + long y = ( a->YPos - b->YPos ); + return (int) sqrt( ( double ) ( x* x + y* y ) ); + } + //returns true if path is an existing directory GEM_EXPORT bool dir_exists(const char* path) Index: Game.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Game.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Game.h 11 May 2004 17:09:12 -0000 1.32 --- Game.h 31 Jul 2004 09:24:10 -0000 1.33 *************** *** 192,195 **** --- 192,196 ---- } void ShareXP(int XP); + bool EveryoneNearPoint(const char *area, int x, int y, bool canmove); }; Index: GameControl.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.cpp,v retrieving revision 1.152 retrieving revision 1.153 diff -C2 -d -r1.152 -r1.153 *** GameControl.cpp 27 Jul 2004 21:28:11 -0000 1.152 --- GameControl.cpp 31 Jul 2004 09:24:10 -0000 1.153 *************** *** 27,30 **** --- 27,31 ---- #include "AnimationMgr.h" #include "DialogMgr.h" + #include "../../includes/strrefs.h" #define IE_CHEST_CURSOR 32 *************** *** 64,68 **** #define FORMATIONSIZE 10 [...999 lines suppressed...] Game* game = core->GetGame(); ! if (stricmp( pc->Area, game->CurrentArea) != 0) { ! EndDialog(); ! overInfoPoint = NULL; ! overContainer = NULL; ! overDoor = NULL; ! for (unsigned int i = 0; i < infoTexts.size(); i++) { ! delete( infoTexts[i] ); ! } ! infoTexts.clear(); ! /*this is loadmap, because we need the index, not the pointer*/ ! int mi = core->GetGame()->LoadMap( pc->Area ); ! SetCurrentArea( mi ); } ! //center on first selected actor Region vp = core->GetVideoDriver()->GetViewport(); core->GetVideoDriver()->SetViewport( pc->XPos - ( vp.w / 2 ), pc->YPos - ( vp.h / 2 ) ); } Index: CharAnimations.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/CharAnimations.cpp,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** CharAnimations.cpp 10 Apr 2004 17:46:24 -0000 1.32 --- CharAnimations.cpp 31 Jul 2004 09:24:10 -0000 1.33 *************** *** 61,66 **** --- 61,86 ---- } + //freeing the bitmaps only once, but using an intelligent algorithm CharAnimations::~CharAnimations(void) { + void *tmppoi; + + for (int AnimID = 0; AnimID < MAX_ANIMS; AnimID++) { + for (int i = 0; i < MAX_ORIENT; i++) { + if (Anims[AnimID][i]) { + tmppoi = Anims[AnimID][i]; + delete( Anims[AnimID][i] ); + for(int AnimIDb=AnimID;AnimIDb < MAX_ANIMS; AnimIDb++) { + for(int ib = i; ib<MAX_ORIENT; ib++) { + if(Anims[AnimIDb][ib]==tmppoi) { + Anims[AnimIDb][ib]=NULL; + } + } + } + } + } + } + + /* this stuff is horrible switch (MirrorType) { case IE_ANI_CODE_MIRROR: *************** *** 180,183 **** --- 200,204 ---- break; } + */ } /*This is a simple Idea of how the animation are coded Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.167 retrieving revision 1.168 diff -C2 -d -r1.167 -r1.168 *** GameScript.cpp 21 Jul 2004 22:16:37 -0000 1.167 --- GameScript.cpp 31 Jul 2004 09:24:10 -0000 1.168 *************** *** 23,26 **** --- 23,27 ---- #include "GameScript.h" #include "Interface.h" + #include "../../includes/strrefs.h" extern Interface* core; *************** *** 605,622 **** } - static int Distance(int X, int Y, Scriptable *b) - { - long x = ( X - b->XPos ); - long y = ( Y - b->YPos ); - return (int) sqrt( ( double ) ( x* x + y* y ) ); - } - - static int Distance(Scriptable *a, Scriptable *b) - { - long x = ( a->XPos - b->XPos ); - long y = ( a->YPos - b->YPos ); - return (int) sqrt( ( double ) ( x* x + y* y ) ); - } - static void GoNearAndRetry(Scriptable *Sender, Point *p) { --- 606,609 ---- *************** *** 3746,3750 **** { Door *door =(Door *) tar; ! return (int) (door->Flags&1) == parameters->int0Parameter; } case ST_CONTAINER: --- 3733,3737 ---- { Door *door =(Door *) tar; ! return (int) (door->Flags&DOOR_CLOSED) == parameters->int0Parameter; } case ST_CONTAINER: *************** *** 3770,3774 **** { Door *door =(Door *) tar; ! return !!(door->Flags&2); } case ST_CONTAINER: --- 3757,3761 ---- { Door *door =(Door *) tar; ! return !!(door->Flags&DOOR_LOCKED); } case ST_CONTAINER: *************** *** 5401,5405 **** } else { if (target->GetNextAction()) { ! printf( "[IEScript]: Target appears busy!\n" ); Sender->CurrentAction = NULL; return; --- 5388,5392 ---- } else { if (target->GetNextAction()) { ! core->DisplayConstantString(STR_TARGETBUSY,0xff0000); Sender->CurrentAction = NULL; return; *************** *** 5616,5620 **** } Door* door = ( Door* ) tar; ! if(!(door->Flags&1) ) { //door is already open Sender->CurrentAction = NULL; --- 5603,5607 ---- } Door* door = ( Door* ) tar; ! if(!(door->Flags&DOOR_CLOSED) ) { //door is already open Sender->CurrentAction = NULL; *************** *** 5631,5635 **** distance ); if (distance <= 40) { ! if(door->Flags&2) { //playsound unsuccessful opening of door core->GetSoundMgr()->Play("AMB_D06"); --- 5618,5624 ---- distance ); if (distance <= 40) { ! //actually if we got the key, we could still open it ! //we need a more sophisticated check here ! if(door->Flags&DOOR_LOCKED) { //playsound unsuccessful opening of door core->GetSoundMgr()->Play("AMB_D06"); *************** *** 5656,5661 **** } Door* door = ( Door* ) tar; ! if(door->Flags&1) { ! //door is already open Sender->CurrentAction = NULL; return; --- 5645,5650 ---- } Door* door = ( Door* ) tar; ! if(door->Flags&DOOR_CLOSED ) { ! //door is already closed Sender->CurrentAction = NULL; return; *************** *** 5671,5675 **** distance ); if (distance <= 40) { ! door->SetDoorClosed( true, true ); } else { GoNearAndRetry(Sender, p); --- 5660,5673 ---- distance ); if (distance <= 40) { ! //actually if we got the key, we could still open it ! //we need a more sophisticated check here ! //doors could be locked but open, and unable to close ! if(door->Flags&DOOR_LOCKED) { ! //playsound unsuccessful closing of door ! core->GetSoundMgr()->Play("AMB_D06"); ! } ! else { ! door->SetDoorClosed( true, true ); ! } } else { GoNearAndRetry(Sender, p); Index: Interface.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.h,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** Interface.h 25 Jul 2004 11:38:35 -0000 1.98 --- Interface.h 31 Jul 2004 09:24:10 -0000 1.99 *************** *** 190,198 **** /** Loads a Window in the Window Manager */ int LoadWindow(unsigned short WindowID); ! /** Creates a Window in the Window Manager */ ! #ifdef WIN32 ! #ifdef CreateWindow ! #undef CreateWindow ! #endif #endif int CreateWindow(unsigned short WindowID, int XPos, int YPos, unsigned int Width, unsigned int Height, char* Background); --- 190,198 ---- /** Loads a Window in the Window Manager */ int LoadWindow(unsigned short WindowID); ! /** Creates a Window in the Window Manager */ ! #ifdef WIN32 ! #ifdef CreateWindow ! #undef CreateWindow ! #endif #endif int CreateWindow(unsigned short WindowID, int XPos, int YPos, unsigned int Width, unsigned int Height, char* Background); *************** *** 240,243 **** --- 240,245 ---- /** Actually draws tooltip on the screen. Called from SDLVideoDriver */ void DrawTooltip(); + /** displays a string in the textarea */ + void DisplayConstantString(int stridx, unsigned int color); /** Set a Window Visible Flag */ int SetVisible(unsigned short WindowIndex, int visible); *************** *** 332,335 **** --- 334,339 ---- bool LoadINI(const char * filename); bool InitItemTypes(); + bool ReadStrrefs(); + public: char GameData[9]; Index: Map.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.h,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** Map.h 25 Jul 2004 17:26:38 -0000 1.39 --- Map.h 31 Jul 2004 09:24:10 -0000 1.40 *************** *** 86,94 **** unsigned long AreaFlags; unsigned short AreaType; private: unsigned short* MapSet; std::queue< unsigned int> InternalStack; unsigned int Width, Height; - private: std::vector< Animation*> animations; --- 86,94 ---- unsigned long AreaFlags; unsigned short AreaType; + bool ChangeArea; //set true if movement is allowed between areas private: unsigned short* MapSet; std::queue< unsigned int> InternalStack; unsigned int Width, Height; private: std::vector< Animation*> animations; *************** *** 121,125 **** Actor* GetActorByDialog(const char* resref); void RemoveActor(Actor* actor); ! int GetActorInRect(Actor**& actors, Region& rgn); SongHeaderType SongHeader; void AddVVCCell(ScriptedAnimation* vvc); --- 121,126 ---- Actor* GetActorByDialog(const char* resref); void RemoveActor(Actor* actor); ! //returns actors in rect (onlyparty could be more sophisticated) ! int GetActorInRect(Actor**& actors, Region& rgn, bool onlyparty); SongHeaderType SongHeader; void AddVVCCell(ScriptedAnimation* vvc); *************** *** 146,150 **** //maybe this is unneeded and orientation could be calculated on the fly unsigned char GetOrient(short sX, short sY, short dX, short dY); ! }; --- 147,151 ---- //maybe this is unneeded and orientation could be calculated on the fly unsigned char GetOrient(short sX, short sY, short dX, short dY); ! void UseExit(Actor *pc, InfoPoint *ip); }; Index: Animation.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Animation.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Animation.cpp 25 May 2004 16:16:29 -0000 1.19 --- Animation.cpp 31 Jul 2004 09:24:10 -0000 1.20 *************** *** 60,65 **** Animation::~Animation(void) ! { ! free(indices); if (!autofree) { return; --- 60,65 ---- Animation::~Animation(void) ! { ! free(indices); if (!autofree) { return; Index: Game.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Game.cpp,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** Game.cpp 25 May 2004 16:16:29 -0000 1.47 --- Game.cpp 31 Jul 2004 09:24:10 -0000 1.48 *************** *** 361,365 **** //FIXME: changepf is removed now int Game::LoadMap(const char* ResRef) ! { unsigned int i; int index = FindMap(ResRef); --- 361,365 ---- //FIXME: changepf is removed now int Game::LoadMap(const char* ResRef) ! { unsigned int i; int index = FindMap(ResRef); *************** *** 478,482 **** return; } ! for(int i=0; i<PartySize; i++) { if (PCs[i]->GetStat(IE_STATE_ID)&STATE_DEAD) { continue; --- 478,483 ---- return; } ! ! for(unsigned int i=0; i<PCs.size(); i++) { if (PCs[i]->GetStat(IE_STATE_ID)&STATE_DEAD) { continue; *************** *** 484,487 **** PCs[i]->NewStat(IE_XP,xp,0); } ! //DisplayString(); //you have gained ... xp } --- 485,514 ---- PCs[i]->NewStat(IE_XP,xp,0); } ! //core->DisplayConstantString(); //you have gained ... xp } + + //canmove=true: if some PC can't move (or hostile), then this returns false + bool Game::EveryoneNearPoint(const char *area, int x, int y, bool canmove) + { + for(unsigned int i=0; i<PCs.size(); i++) { + if (PCs[i]->GetStat(IE_STATE_ID)&STATE_DEAD) { + continue; + } + //someone is uncontrollable, can't move + if(PCs[i]->GetStat(IE_EA)>GOODCUTOFF) { + return false; + } + if(PCs[i]->GetStat(IE_STATE_ID)&STATE_CANTMOVE) { + return false; + } + if(stricmp(PCs[i]->Area,area) ) { + return false; + } + printf("Checking distance %d\n",i); + if(Distance(x,y,PCs[i])>25) { + return false; + } + } + return true; + } + Index: Interface.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.cpp,v retrieving revision 1.177 retrieving revision 1.178 diff -C2 -d -r1.177 -r1.178 *** Interface.cpp 25 Jul 2004 11:38:35 -0000 1.177 --- Interface.cpp 31 Jul 2004 09:24:10 -0000 1.178 *************** *** 56,59 **** --- 56,61 ---- //use DialogF.tlk if the protagonist is female, that's why we leave space static char dialogtlk[] = "dialog.tlk\0"; + #define STRREFCOUNT 100 + static int strref_table[STRREFCOUNT]; Interface::Interface(int iargc, char** iargv) *************** *** 240,243 **** --- 242,264 ---- } + bool Interface::ReadStrrefs() + { + TableMgr * tab; + int table=core->LoadTable("strings"); + memset(strref_table,-1,sizeof(strref_table) ); + if(table<0) { + return false; + } + tab = core->GetTable(table); + if(!tab) { + goto end; + } + for(int i=0;i<STRREFCOUNT;i++) { + strref_table[i]=atoi(tab->QueryField(i,0)); + } + end: + core->DelTable(table); + return true; + } int Interface::Init() *************** *** 571,576 **** } printStatus( "OK", LIGHT_GREEN ); - bool ret = InitItemTypes(); printMessage( "Core", "Initializing Inventory Management...", WHITE ); if(ret) { printStatus( "OK", LIGHT_GREEN ); --- 592,605 ---- } printStatus( "OK", LIGHT_GREEN ); printMessage( "Core", "Initializing Inventory Management...", WHITE ); + bool ret = InitItemTypes(); + if(ret) { + printStatus( "OK", LIGHT_GREEN ); + } + else { + printStatus( "ERROR", LIGHT_RED ); + } + printMessage( "Core", "Initializing string constants...", WHITE ); + ret = ReadStrrefs(); if(ret) { printStatus( "OK", LIGHT_GREEN ); *************** *** 2028,2029 **** --- 2057,2081 ---- } + void Interface::DisplayConstantString(int stridx, unsigned int color) + { + unsigned long index; + + if (!core->GetDictionary()->Lookup( "MessageWindow", index )) { + return; + } + Window* win = core->GetWindow( index ); + if (!core->GetDictionary()->Lookup( "MessageTextArea", index )) { + return; + } + TextArea* ta = ( TextArea* ) win->GetControl( index ); + char* text = core->GetString(strref_table[stridx]); + const char* format = "[/color][p][color=%lX]%s[/color][/p]"; + int newlen = (int)(strlen( format ) + strlen( text ) + 10); + char* newstr = ( char* ) malloc( newlen ); + sprintf( newstr, format, color, text ); + free(text); + ta->AppendText( newstr, -1 ); + ta->AppendText( "", -1 ); + free( newstr ); + } + Index: ActorBlock.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.h,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** ActorBlock.h 26 Jul 2004 22:06:08 -0000 1.39 --- ActorBlock.h 31 Jul 2004 09:24:10 -0000 1.40 *************** *** 25,28 **** --- 25,29 ---- class Selectable; class Highlightable; + class Actor; class Moveble; class Door; *************** *** 67,70 **** --- 68,75 ---- #define INFO_DOOR 2048 //info trigger linked to door + //door flags + #define DOOR_CLOSED 1 + #define DOOR_LOCKED 2 + #ifdef WIN32 *************** *** 249,252 **** --- 254,259 ---- //returns true if trap has been triggered, tumble skill??? bool TriggerTrap(int skill); + //checks if the actor may use this travel trigger + int CheckTravel(Actor *actor); void DebugDump(); public: Index: ActorBlock.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.cpp,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** ActorBlock.cpp 26 Jul 2004 22:06:08 -0000 1.51 --- ActorBlock.cpp 31 Jul 2004 09:24:10 -0000 1.52 *************** *** 640,644 **** TrapDetectionDifficulty = 0; TrapRemovalDifficulty = 0; - // Trapped = 0; TrapDetected = 0; TrapLaunchX = 0; --- 640,643 ---- *************** *** 652,655 **** --- 651,670 ---- } + //checks if the actor may use this travel trigger + //bit 1 : can use + //bit 2 : whole team + int InfoPoint::CheckTravel(Actor *actor) + { + if(Flags&TRAP_DEACTIVATED) return 0; + if(!actor->InParty && (Flags&TRAVEL_NONPC) ) return 0; + if(Flags&TRAVEL_PARTY) { + if(!core->GetGame()->EveryoneNearPoint(actor->Area, actor->XPos, actor->YPos, true) ) { + return 2; + } + return 3; + } + return 1; + } + //detect this trap, using a skill, skill could be set to 256 for 'sure' //skill is the all around modified trap detection skill Index: GameControl.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.h,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** GameControl.h 27 Jul 2004 21:28:11 -0000 1.46 --- GameControl.h 31 Jul 2004 09:24:10 -0000 1.47 *************** *** 25,32 **** --- 25,39 ---- #endif + //dialog flags #define DF_IN_DIALOG 1 #define DF_TALKCOUNT 2 #define DF_UNBREAKABLE 4 + //screen flags + #define SF_DISABLEMOUSE 1 + #define SF_CENTERONACTOR 2 + #define SF_ALWAYSCENTER 4 + #define SF_GUIENABLED 8 + class GEM_EXPORT GameControl : public Control { public: *************** *** 67,72 **** PathNode* drawPath; unsigned long AIUpdateCounter; ! bool DisableMouse; ! bool GUIEnabled; public: //Events /** Key Press Event */ --- 74,79 ---- PathNode* drawPath; unsigned long AIUpdateCounter; ! int ScreenFlags; ! // bool GUIEnabled; public: //Events /** Key Press Event */ *************** *** 92,100 **** DialogState* ds; Dialog* dlg; - bool ChangeArea; public: Actor* speaker, * target; int DialogueFlags; public: /* Selects one or all PC */ void SelectActor(int whom); --- 99,107 ---- DialogState* ds; Dialog* dlg; public: Actor* speaker, * target; int DialogueFlags; public: + void DeselectAll(); /* Selects one or all PC */ void SelectActor(int whom); *************** *** 102,107 **** void HideGUI(); void UnhideGUI(); void TryToTalk(Actor *source, Actor *target); ! void MoveToPointFormation(Actor *actor, int pos, int GameX, int GameY); void InitDialog(Actor* speaker, Actor* target, const char* dlgref); void EndDialog(bool try_to_break=false); --- 109,115 ---- void HideGUI(); void UnhideGUI(); + void TryToAttack(Actor *source, Actor *target); void TryToTalk(Actor *source, Actor *target); ! void MoveToPointFormation(Actor *actor, int GameX, int GameY); void InitDialog(Actor* speaker, Actor* target, const char* dlgref); void EndDialog(bool try_to_break=false); |