From: <fu...@us...> - 2009-01-29 15:01:31
|
Revision: 5565 http://gemrb.svn.sourceforge.net/gemrb/?rev=5565&view=rev Author: fuzzie Date: 2009-01-29 15:01:27 +0000 (Thu, 29 Jan 2009) Log Message: ----------- start container scripts Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-01-29 14:26:28 UTC (rev 5564) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-01-29 15:01:27 UTC (rev 5565) @@ -615,6 +615,19 @@ door->ProcessActions(false); } + //Check if we need to start some container scripts + int containerCount = 0; + while (true) { + Container* container = TMap->GetContainer( containerCount++ ); + if (!container) + break; + if (!container->Scripts[0]) + continue; + container->ExecuteScript( 1 ); + //Execute Pending Actions + container->ProcessActions(false); + } + //Check if we need to start some trap scripts int ipCount = 0; while (true) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-02-06 17:26:00
|
Revision: 5657 http://gemrb.svn.sourceforge.net/gemrb/?rev=5657&view=rev Author: fuzzie Date: 2009-02-06 17:25:57 +0000 (Fri, 06 Feb 2009) Log Message: ----------- fix wrong sign in AdjustPositionY Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-02-06 15:12:07 UTC (rev 5656) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-02-06 17:25:57 UTC (rev 5657) @@ -1797,7 +1797,7 @@ } } if (goal.x + radius < Width) { - if (GetBlocked( goal.x - radius, scany ) & PATH_MAP_PASSABLE) { + if (GetBlocked( goal.x + radius, scany ) & PATH_MAP_PASSABLE) { goal.x = (ieWord) (goal.x + radius); goal.y = (ieWord) scany; return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-03-14 18:34:38
|
Revision: 5794 http://gemrb.svn.sourceforge.net/gemrb/?rev=5794&view=rev Author: zefklop Date: 2009-03-14 18:34:36 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Fix bug 2686345. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-13 20:06:22 UTC (rev 5793) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-14 18:34:36 UTC (rev 5794) @@ -206,10 +206,10 @@ { for (int i=0;i<MaxVisibility;i++) { int x=(destx*i+MaxVisibility/2)/MaxVisibility*16; - int y=(desty*i+MaxVisibility/2)/MaxVisibility*16; + int y=(desty*i+MaxVisibility/2)/MaxVisibility*12; if (LargeFog) { x += 16; - y += 16; + y += 12; } VisibilityMasks[i][slot].x=(short) x; VisibilityMasks[i][slot].y=(short) y; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-03-14 21:17:09
|
Revision: 5799 http://gemrb.svn.sourceforge.net/gemrb/?rev=5799&view=rev Author: zefklop Date: 2009-03-14 21:17:07 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Fix exploring when being too near of a wall Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-14 21:00:26 UTC (rev 5798) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-14 21:17:07 UTC (rev 5799) @@ -2443,12 +2443,15 @@ SetMapVisibility( 0 ); for (unsigned int e = 0; e<actors.size(); e++) { Actor *actor = actors[e]; + Point head; + head.x=actor->Pos.x-100;//So we're above the walls + head.y=actor->Pos.y; if (!actor->Modified[ IE_EXPLORE ] ) continue; int state = actor->Modified[IE_STATE_ID]; if (state & STATE_CANTSEE) continue; int vis2 = actor->Modified[IE_VISUALRANGE]; if ((state&STATE_BLIND) || (vis2<2)) vis2=2; //can see only themselves - ExploreMapChunk (actor->Pos, vis2, 1); + ExploreMapChunk (head, vis2, 1); Spawn *sp = GetSpawnRadius(actor->Pos, SPAWN_RANGE); //30 * 12 if (sp) { TriggerSpawn(sp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-03-14 23:11:19
|
Revision: 5800 http://gemrb.svn.sourceforge.net/gemrb/?rev=5800&view=rev Author: zefklop Date: 2009-03-14 23:11:12 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Finally fix exploring areas. You can now go as near of the walls as you want. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-14 21:17:07 UTC (rev 5799) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-03-14 23:11:12 UTC (rev 5800) @@ -2409,7 +2409,6 @@ while (p--) { int Pass = 2; bool block = false; - bool sidewall = false; for (int i=0;i<range;i++) { Tile.x = Pos.x+VisibilityMasks[i][p].x; Tile.y = Pos.y+VisibilityMasks[i][p].y; @@ -2420,8 +2419,8 @@ if (type & PATH_MAP_NO_SEE) { block=true; } else if (type & PATH_MAP_SIDEWALL) { - sidewall=true; - } else if (sidewall) block=true; + if(Distance(Pos, Tile)>=48) break; + } } if (block) { Pass--; @@ -2443,15 +2442,12 @@ SetMapVisibility( 0 ); for (unsigned int e = 0; e<actors.size(); e++) { Actor *actor = actors[e]; - Point head; - head.x=actor->Pos.x-100;//So we're above the walls - head.y=actor->Pos.y; if (!actor->Modified[ IE_EXPLORE ] ) continue; int state = actor->Modified[IE_STATE_ID]; if (state & STATE_CANTSEE) continue; int vis2 = actor->Modified[IE_VISUALRANGE]; if ((state&STATE_BLIND) || (vis2<2)) vis2=2; //can see only themselves - ExploreMapChunk (head, vis2, 1); + ExploreMapChunk (actor->Pos, vis2, 1); Spawn *sp = GetSpawnRadius(actor->Pos, SPAWN_RANGE); //30 * 12 if (sp) { TriggerSpawn(sp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-05-01 07:51:50
|
Revision: 5904 http://gemrb.svn.sourceforge.net/gemrb/?rev=5904&view=rev Author: zefklop Date: 2009-05-01 07:51:45 +0000 (Fri, 01 May 2009) Log Message: ----------- Check for where the actor really wants to go... This should avoid some pathfinding issues. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-04-30 22:01:07 UTC (rev 5903) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-01 07:51:45 UTC (rev 5904) @@ -580,7 +580,7 @@ PathNode * step = actor->GetNextStep(); if (step && step->Next) { //we should actually wait for a short time and check then - if (GetBlocked(step->Next->x*16,step->Next->y*12,actor->size)) { + if (GetBlocked(step->Next->x*16+8,step->Next->y*12+6,actor->size)) {//someone is in the way... wait for him to go away actor->NewPath(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-05-01 08:21:35
|
Revision: 5905 http://gemrb.svn.sourceforge.net/gemrb/?rev=5905&view=rev Author: zefklop Date: 2009-05-01 08:21:27 +0000 (Fri, 01 May 2009) Log Message: ----------- Yet another position fix... Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-01 07:51:45 UTC (rev 5904) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-01 08:21:27 UTC (rev 5905) @@ -580,7 +580,7 @@ PathNode * step = actor->GetNextStep(); if (step && step->Next) { //we should actually wait for a short time and check then - if (GetBlocked(step->Next->x*16+8,step->Next->y*12+6,actor->size)) {//someone is in the way... wait for him to go away + if (GetBlocked(step->Next->x*16+8,step->Next->y*12+6,actor->size)) { actor->NewPath(); } } @@ -1783,7 +1783,7 @@ if (MapSet[pos]) { return; } - if (GetBlocked(x*16,y*12,size)) { + if (GetBlocked(x*16+8,y*12+6,size)) { MapSet[pos] = 65535; return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-05-16 18:21:18
|
Revision: 5983 http://gemrb.svn.sourceforge.net/gemrb/?rev=5983&view=rev Author: fuzzie Date: 2009-05-16 18:21:09 +0000 (Sat, 16 May 2009) Log Message: ----------- call ProcessActions on deactivated infopoints too Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-16 15:42:17 UTC (rev 5982) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-16 18:21:09 UTC (rev 5983) @@ -633,47 +633,51 @@ if (!ip->Scripts[0] && ( ip->Type != ST_TRAVEL )) { continue; } - //it was turned off - if (ip->Flags&TRAP_DEACTIVATED) { - continue; - } + bool wasActive = !(ip->Flags&TRAP_DEACTIVATED); + //If this InfoPoint is a Switch Trigger if (ip->Type == ST_TRIGGER) { //Check if this InfoPoint was activated if (ip->LastTrigger) { - //Run the InfoPoint script - ip->ExecuteScript( 1 ); + if (wasActive) { + //Run the InfoPoint script + ip->ExecuteScript( 1 ); + } //Execute Pending Actions ip->ProcessActions(false); } continue; } - q=Qcount[PR_SCRIPT]; - while (q--) { - Actor* actor = queue[PR_SCRIPT][q]; - if (ip->Type == ST_PROXIMITY) { - if(ip->Entered(actor)) { - //if trap triggered, then mark actor - actor->SetInTrap(ipCount); + if (wasActive) { + q=Qcount[PR_SCRIPT]; + while (q--) { + Actor* actor = queue[PR_SCRIPT][q]; + if (ip->Type == ST_PROXIMITY) { + if(ip->Entered(actor)) { + //if trap triggered, then mark actor + actor->SetInTrap(ipCount); + } + } else { + //ST_TRAVEL + //don't move if doing something else + if (actor->GetNextAction()) + continue; + //this is needed, otherwise the travel + //trigger would be activated anytime + if (!(ip->Flags&TRAP_RESET)) + continue; + if (ip->Entered(actor)) { + UseExit(actor, ip); + } } - } else { - //ST_TRAVEL - //don't move if doing something else - if (actor->GetNextAction()) - continue; - //this is needed, otherwise the travel - //trigger would be activated anytime - if (!(ip->Flags&TRAP_RESET)) - continue; - if (ip->Entered(actor)) { - UseExit(actor, ip); - } } } if (ip->Type==ST_PROXIMITY) { - ip->ExecuteScript( 1 ); + if (wasActive) { + ip->ExecuteScript( 1 ); + } //Execute Pending Actions ip->ProcessActions(false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-05-26 20:07:56
|
Revision: 6114 http://gemrb.svn.sourceforge.net/gemrb/?rev=6114&view=rev Author: fuzzie Date: 2009-05-26 20:06:54 +0000 (Tue, 26 May 2009) Log Message: ----------- use PS:T's walkscale/runscale Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-26 19:54:28 UTC (rev 6113) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-05-26 20:06:54 UTC (rev 6114) @@ -559,11 +559,28 @@ actor->inventory.CalculateWeight(); actor->SetBase( IE_ENCUMBRANCE, actor->inventory.GetWeight() ); + //TODO:calculate actor speed! int speed = (int) actor->GetStat(IE_MOVEMENTRATE); if (speed) { speed = 1500/speed; } + if (core->GetResDataINI()) { + ieDword animid = actor->BaseStats[IE_ANIMATION_ID]; + if (core->HasFeature(GF_ONE_BYTE_ANIMID)) { + animid = animid & 0xff; + } + if (animid < (ieDword)CharAnimations::GetAvatarsCount()) { + AvatarStruct *avatar = CharAnimations::GetAvatarStruct(animid); + if (avatar->RunScale && (actor->GetInternalFlag() & IF_RUNNING)) { + speed = avatar->RunScale; + } else if (avatar->WalkScale) { + speed = avatar->WalkScale; + } else { + //printf("no walkscale for anim %d!\n", actor->BaseStats[IE_ANIMATION_ID]); + } + } + } if (actor->Modified[IE_DONOTJUMP]<2) { Actor** nearActors = GetAllActorsInRadius(actor->Pos, GA_NO_DEAD, MAX_CIRCLE_SIZE*2*16); @@ -1077,16 +1094,16 @@ void Map::ActorSpottedByPlayer(Actor *actor) { unsigned int animid; - char section[10]; - if(core->HasFeature(GF_HAS_BEASTS_INI)) { + if(core->HasFeature(GF_HAS_BEASTS_INI)) { animid=actor->BaseStats[IE_ANIMATION_ID]; if(core->HasFeature(GF_ONE_BYTE_ANIMID)) { animid&=0xff; } - sprintf(section,"%d",animid); - animid=(unsigned int) core->GetResDataINI()->GetKeyAsInt(section,"bestiary",-1); - core->GetGame()->SetBeastKnown(animid); + if (animid < (ieDword)CharAnimations::GetAvatarsCount()) { + AvatarStruct *avatar = CharAnimations::GetAvatarStruct(animid); + core->GetGame()->SetBeastKnown(avatar->Bestiary); + } } if (!(actor->GetInternalFlag()&IF_STOPATTACK)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-06-17 11:41:10
|
Revision: 6496 http://gemrb.svn.sourceforge.net/gemrb/?rev=6496&view=rev Author: fuzzie Date: 2009-06-17 11:41:09 +0000 (Wed, 17 Jun 2009) Log Message: ----------- all scripted infopoints should always execute pending actions, whether active or not Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-17 11:08:20 UTC (rev 6495) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-17 11:41:09 UTC (rev 6496) @@ -682,9 +682,9 @@ //Run the InfoPoint script ip->ExecuteScript( 1 ); } - //Execute Pending Actions - ip->ProcessActions(false); } + //Execute Pending Actions + ip->ProcessActions(false); continue; } @@ -717,13 +717,11 @@ } } - if (ip->Type==ST_PROXIMITY) { - if (wasActive) { - ip->ExecuteScript( 1 ); - } - //Execute Pending Actions - ip->ProcessActions(false); + if (wasActive) { + ip->ExecuteScript( 1 ); } + //Execute Pending Actions + ip->ProcessActions(false); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-06-30 15:36:05
|
Revision: 6661 http://gemrb.svn.sourceforge.net/gemrb/?rev=6661&view=rev Author: fuzzie Date: 2009-06-30 15:36:03 +0000 (Tue, 30 Jun 2009) Log Message: ----------- don't try doing movement for dead actors Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-30 15:35:18 UTC (rev 6660) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-30 15:36:03 UTC (rev 6661) @@ -629,6 +629,12 @@ Actor* actor = queue[PR_SCRIPT][q]; + // try to exclude actors which only just died + // (shouldn't we not be stepping actors which don't have a path anyway?) + // following fails on Immobile creatures, don't think it's a problem, but replace with next line if it is + if (!actor->ValidTarget(GA_NO_DEAD)) continue; + //if (actor->GetStat(IE_STATE_ID)&STATE_DEAD || actor->GetInternalFlag() & IF_JUSTDIED) continue; + no_more_steps_for_actor[q] = DoStepForActor(actor, actor_speeds[q], time); if (!no_more_steps_for_actor[q]) more_steps = true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-07-01 14:46:18
|
Revision: 6669 http://gemrb.svn.sourceforge.net/gemrb/?rev=6669&view=rev Author: fuzzie Date: 2009-07-01 14:46:16 +0000 (Wed, 01 Jul 2009) Log Message: ----------- don't drop intermediate nodes in Map::RunAway Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-07-01 14:31:54 UTC (rev 6668) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-07-01 14:46:16 UTC (rev 6669) @@ -2064,6 +2064,7 @@ Return = new PathNode; StartNode->Parent = Return; Return->Next = StartNode; + StartNode = Return; unsigned int level = MapSet[pos]; unsigned int diff = 0; Point n; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-07-20 20:14:27
|
Revision: 6759 http://gemrb.svn.sourceforge.net/gemrb/?rev=6759&view=rev Author: avenger_teambg Date: 2009-07-20 20:14:21 +0000 (Mon, 20 Jul 2009) Log Message: ----------- quick hack to fix a crasher in projectiles going offscreen Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-07-20 19:42:45 UTC (rev 6758) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-07-20 20:14:21 UTC (rev 6759) @@ -2213,6 +2213,17 @@ Point p; p.x = (ieWord) start.x + ((dest.x - start.x) * Steps / Max); p.y = (ieWord) start.y + ((dest.y - start.y) * Steps / Max); + + //the path ends here as it would go off the screen, causing problems + //maybe there is a better way, but i needed a quick hack to fix + //the crash in projectiles + if ((signed) p.x<0 || (signed) p.y<0) { + return Return; + } + if ((ieWord) p.x>Width*16 || (ieWord) p.y>Height*12) { + return Return; + } + StartNode->x = p.x; StartNode->y = p.y; StartNode->orient = Orientation; @@ -2221,7 +2232,6 @@ case GL_REBOUND: Orientation = (Orientation + 8) &15; //recalculate dest (mirror it) - // break; case GL_PASS: break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-08-02 17:00:42
|
Revision: 6792 http://gemrb.svn.sourceforge.net/gemrb/?rev=6792&view=rev Author: zefklop Date: 2009-08-02 17:00:21 +0000 (Sun, 02 Aug 2009) Log Message: ----------- Revert part of r5800. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-02 10:07:31 UTC (rev 6791) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-02 17:00:21 UTC (rev 6792) @@ -1533,7 +1533,7 @@ ret&=~PATH_MAP_PASSABLE; } if (ret&PATH_MAP_DOOR_OPAQUE) { - ret=PATH_MAP_NO_SEE; + ret=PATH_MAP_SIDEWALL; } return ret; } @@ -2758,9 +2758,8 @@ block=true; } else if (type & PATH_MAP_SIDEWALL) { sidewall = true; - } else if (sidewall && Distance(Pos,Tile)>=48) - { /*48 is an experimental value and is made to avoid blocking - *sight when being hidden by the wall. This might be game specific*/ + } else if (sidewall) + { block=true ; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-08-10 20:33:16
|
Revision: 6834 http://gemrb.svn.sourceforge.net/gemrb/?rev=6834&view=rev Author: fuzzie Date: 2009-08-10 20:33:08 +0000 (Mon, 10 Aug 2009) Log Message: ----------- avoid a race condition in script execution Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-10 20:27:25 UTC (rev 6833) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-10 20:33:08 UTC (rev 6834) @@ -607,7 +607,26 @@ no_more_steps_for_actor[q] = true; continue; } + + /* + * we run scripts all at once because one of the actions in ProcessActions + * might remove us from a cutscene and then bad things can happen when + * scripts are queued unexpectedly (such as an ogre in a cutscene -> dialog + * -> cutscene transition in the first bg1 cutscene exploiting the race + * condition to murder player1) - it is entirely possible that we should be + * doing this differently (for example by storing the cutscene state at the + * start of this function, or by changing the cutscene state at a later + * point, etc), but i did it this way for now because it seems least painful + * and we should probably be staggering the script executions anyway + */ actor->ExecuteScript( MAX_SCRIPTS ); + } + + q=Qcount[PR_SCRIPT]; + while (q--) { + if (no_more_steps_for_actor[q]) continue; + Actor* actor = queue[PR_SCRIPT][q]; + actor->ProcessActions(false); actor->UpdateActorState(core->GetGame()->GameTime); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-08-18 10:35:44
|
Revision: 6921 http://gemrb.svn.sourceforge.net/gemrb/?rev=6921&view=rev Author: avenger_teambg Date: 2009-08-18 10:35:35 +0000 (Tue, 18 Aug 2009) Log Message: ----------- fixed kurtulmak's shard Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-18 10:25:46 UTC (rev 6920) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-18 10:35:35 UTC (rev 6921) @@ -1694,7 +1694,8 @@ //just became visible if (IsVisible(actor->Pos, false) && actor->Schedule(gametime) ) { priority = PR_SCRIPT; //run scripts and display, activated now - actor->Unhide(); + //more like activate! + actor->Activate(); ActorSpottedByPlayer(actor); } else { priority = PR_IGNORE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-08-20 22:22:44
|
Revision: 6987 http://gemrb.svn.sourceforge.net/gemrb/?rev=6987&view=rev Author: fuzzie Date: 2009-08-20 22:22:35 +0000 (Thu, 20 Aug 2009) Log Message: ----------- be sure to always process actions, whether a script is present or not Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-20 21:55:24 UTC (rev 6986) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-20 22:22:35 UTC (rev 6987) @@ -692,9 +692,8 @@ Door* door = TMap->GetDoor( doorCount++ ); if (!door) break; - if (!door->Scripts[0]) - continue; - door->ExecuteScript( 1 ); + if (door->Scripts[0]) + door->ExecuteScript( 1 ); //Execute Pending Actions door->ProcessActions(false); } @@ -705,9 +704,8 @@ Container* container = TMap->GetContainer( containerCount++ ); if (!container) break; - if (!container->Scripts[0]) - continue; - container->ExecuteScript( 1 ); + if (container->Scripts[0]) + container->ExecuteScript( 1 ); //Execute Pending Actions container->ProcessActions(false); } @@ -720,10 +718,8 @@ if (!ip) break; //If this InfoPoint has no script and it is not a Travel Trigger, skip it - if (!ip->Scripts[0] && ( ip->Type != ST_TRAVEL )) { - continue; - } - bool wasActive = !(ip->Flags&TRAP_DEACTIVATED); + bool wasActive = (ip->Scripts[0] || ( ip->Type == ST_TRAVEL )); + // bool wasActive = !(ip->Flags&TRAP_DEACTIVATED); //If this InfoPoint is a Switch Trigger if (ip->Type == ST_TRIGGER) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-08-22 15:16:32
|
Revision: 7011 http://gemrb.svn.sourceforge.net/gemrb/?rev=7011&view=rev Author: fuzzie Date: 2009-08-22 15:16:26 +0000 (Sat, 22 Aug 2009) Log Message: ----------- change the logic for running areas and area scripts Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-22 14:44:50 UTC (rev 7010) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-22 15:16:26 UTC (rev 7011) @@ -565,15 +565,40 @@ void Map::UpdateScripts() { + bool has_pcs = false; + size_t i=actors.size(); + while (i--) { + if (actors[i]->InParty) { + has_pcs = true; + break; + } + } + // if masterarea, then we allow 'any' actors // if not masterarea, we allow only players - if (!GetActorCount(MasterArea) ) { + // if (!GetActorCount(MasterArea) ) { + // fuzzie changed this because the previous code was wrong + // (GetActorCount(false) returns only non-PCs) - it is not + // well-tested so feel free to change if there are problems + // (for example, the CanFree seems like it would be needed to + // check for any running scripts, such as following, but it seems + // to work ok anyway in my testing - if you change it you probably + // also want to change the actor updating code below so it doesn't + // add new actions while we are trying to get rid of the area!) + if (!has_pcs && !(MasterArea && actors.size()) /*&& !CanFree()*/) { return; } - //Run the Map Script - ExecuteScript( 1 ); - + // fuzzie added this check because some area scripts (eg, AR1600 when + // escaping Brynnlaw) were executing after they were meant to be done, + // and this seems the nicest way of handling that for now - it's quite + // possibly wrong (so if you have problems, revert this and find + // another way) + if (has_pcs) { + //Run the Map Script + ExecuteScript( 1 ); + } + //Execute Pending Actions //if it is only here, then the drawing will fail ProcessActions(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-08-28 21:45:44
|
Revision: 7072 http://gemrb.svn.sourceforge.net/gemrb/?rev=7072&view=rev Author: fuzzie Date: 2009-08-28 21:45:34 +0000 (Fri, 28 Aug 2009) Log Message: ----------- InfoPoints of all types don't run scripts if TRAP_DEACTIVATED is set Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 21:26:28 UTC (rev 7071) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 21:45:34 UTC (rev 7072) @@ -744,7 +744,8 @@ break; //If this InfoPoint has no script and it is not a Travel Trigger, skip it bool wasActive = (ip->Scripts[0] || ( ip->Type == ST_TRAVEL )); - // bool wasActive = !(ip->Flags&TRAP_DEACTIVATED); + if (wasActive) + wasActive = !(ip->Flags&TRAP_DEACTIVATED); //If this InfoPoint is a Switch Trigger if (ip->Type == ST_TRIGGER) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-08-28 21:48:26
|
Revision: 7073 http://gemrb.svn.sourceforge.net/gemrb/?rev=7073&view=rev Author: fuzzie Date: 2009-08-28 21:48:19 +0000 (Fri, 28 Aug 2009) Log Message: ----------- add comment to that last commit Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 21:45:34 UTC (rev 7072) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 21:48:19 UTC (rev 7073) @@ -744,6 +744,8 @@ break; //If this InfoPoint has no script and it is not a Travel Trigger, skip it bool wasActive = (ip->Scripts[0] || ( ip->Type == ST_TRAVEL )); + // InfoPoints of all types don't run scripts if TRAP_DEACTIVATED is set + // (eg, TriggerActivation changes this, see lightning room from SoA) if (wasActive) wasActive = !(ip->Flags&TRAP_DEACTIVATED); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2009-08-28 23:24:55
|
Revision: 7075 http://gemrb.svn.sourceforge.net/gemrb/?rev=7075&view=rev Author: avenger_teambg Date: 2009-08-28 23:24:48 +0000 (Fri, 28 Aug 2009) Log Message: ----------- fixed a crasher in GetLine (used by wing buffet), this is by no means a final solution Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 23:23:55 UTC (rev 7074) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-08-28 23:24:48 UTC (rev 7075) @@ -2233,15 +2233,11 @@ PathNode* Map::GetLine(Point &start, int Steps, int Orientation, int flags) { Point dest=start; - int count = Steps; - while(count) { - unsigned int st = Steps>MaxVisibility?MaxVisibility:Steps; - int p = VisibilityPerimeter*Orientation/MAX_ORIENT; - dest.x += VisibilityMasks[Steps][p].x; - dest.y += VisibilityMasks[Steps][p].y; - count-=st; - } + unsigned int st = Steps>=MaxVisibility?MaxVisibility-1:Steps; + int p = VisibilityPerimeter*Orientation/MAX_ORIENT; + dest.x += VisibilityMasks[st][p].x; + dest.y += VisibilityMasks[st][p].y; //FIXME: calculate dest based on distance and orientation return GetLine(start, dest, Steps, Orientation, flags); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-09-23 19:19:42
|
Revision: 7250 http://gemrb.svn.sourceforge.net/gemrb/?rev=7250&view=rev Author: lynxlupodian Date: 2009-09-23 19:19:33 +0000 (Wed, 23 Sep 2009) Log Message: ----------- set an <area>_visited var on entry to the area <area> Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-23 17:08:42 UTC (rev 7249) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-23 19:19:33 UTC (rev 7250) @@ -485,6 +485,11 @@ pc->ProcessActions(true); } } + if (core->HasFeature(GF_AREA_VISITED_VAR)) { + char key[32]; + snprintf(key, sizeof(key),"%s_visited", area); + game->locals->SetAt(key, 1); + } return; } if (EveryOne&CT_SELECTED) { @@ -502,6 +507,11 @@ pc->ProcessActions(true); } } + if (core->HasFeature(GF_AREA_VISITED_VAR)) { + char key[32]; + snprintf(key, sizeof(key),"%s_visited", area); + game->locals->SetAt(key, 1); + } return; } @@ -509,6 +519,11 @@ actor->ClearActions(); actor->AddAction( GenerateAction( command ) ); actor->ProcessActions(true); + if (actor->InParty && core->HasFeature(GF_AREA_VISITED_VAR)) { + char key[32]; + snprintf(key, sizeof(key),"%s_visited", area); + game->locals->SetAt(key, 1); + } } void Map::UseExit(Actor *actor, InfoPoint *ip) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-09-23 20:16:35
|
Revision: 7251 http://gemrb.svn.sourceforge.net/gemrb/?rev=7251&view=rev Author: lynxlupodian Date: 2009-09-23 20:16:22 +0000 (Wed, 23 Sep 2009) Log Message: ----------- moved the visited var setting to Map::AddActor Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-23 19:19:33 UTC (rev 7250) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-23 20:16:22 UTC (rev 7251) @@ -485,11 +485,6 @@ pc->ProcessActions(true); } } - if (core->HasFeature(GF_AREA_VISITED_VAR)) { - char key[32]; - snprintf(key, sizeof(key),"%s_visited", area); - game->locals->SetAt(key, 1); - } return; } if (EveryOne&CT_SELECTED) { @@ -507,11 +502,6 @@ pc->ProcessActions(true); } } - if (core->HasFeature(GF_AREA_VISITED_VAR)) { - char key[32]; - snprintf(key, sizeof(key),"%s_visited", area); - game->locals->SetAt(key, 1); - } return; } @@ -519,11 +509,6 @@ actor->ClearActions(); actor->AddAction( GenerateAction( command ) ); actor->ProcessActions(true); - if (actor->InParty && core->HasFeature(GF_AREA_VISITED_VAR)) { - char key[32]; - snprintf(key, sizeof(key),"%s_visited", area); - game->locals->SetAt(key, 1); - } } void Map::UseExit(Actor *actor, InfoPoint *ip) @@ -1291,6 +1276,12 @@ if (IsVisible(actor->Pos, false) && actor->Schedule(gametime, true) ) { ActorSpottedByPlayer(actor); } + if (actor->InParty && core->HasFeature(GF_AREA_VISITED_VAR)) { + char key[32]; + snprintf(key, sizeof(key),"%s_visited", area); + game->locals->SetAt(key, 1); + } + } bool Map::AnyPCSeesEnemy() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2009-09-30 18:50:00
|
Revision: 7300 http://gemrb.svn.sourceforge.net/gemrb/?rev=7300&view=rev Author: lynxlupodian Date: 2009-09-30 18:49:52 +0000 (Wed, 30 Sep 2009) Log Message: ----------- print the actor's long name in the enhanced area debug dump Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-30 14:18:08 UTC (rev 7299) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-09-30 18:49:52 UTC (rev 7300) @@ -1953,7 +1953,7 @@ size_t i = actors.size(); while (i--) { if (!(actors[i]->GetInternalFlag()&(IF_JUSTDIED|IF_REALLYDIED))) { - printf("Actor: %s at %d.%d\n", actors[i]->GetName(0), actors[i]->Pos.x, actors[i]->Pos.y); + printf("Actor: %s at %d.%d\n", actors[i]->GetName(1), actors[i]->Pos.x, actors[i]->Pos.y); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2009-10-02 09:29:30
|
Revision: 7319 http://gemrb.svn.sourceforge.net/gemrb/?rev=7319&view=rev Author: fuzzie Date: 2009-10-02 09:29:24 +0000 (Fri, 02 Oct 2009) Log Message: ----------- AreaAnimation: be sure to clear PaletteRef when making a new palette Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-10-02 09:12:34 UTC (rev 7318) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-10-02 09:29:24 UTC (rev 7319) @@ -3281,6 +3281,7 @@ Sprite2D* spr = animation[0]->GetFrame(0); if (!spr) return; palette = core->GetVideoDriver()->GetPalette(spr)->Copy(); + PaletteRef[0] = 0; } palette->CreateShadedAlphaChannel(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |