From: <ave...@us...> - 2007-11-14 21:14:06
|
Revision: 4825 http://gemrb.svn.sourceforge.net/gemrb/?rev=4825&view=rev Author: avenger_teambg Date: 2007-11-14 13:14:09 -0800 (Wed, 14 Nov 2007) Log Message: ----------- fixed bug #1777653 Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-11-13 20:57:46 UTC (rev 4824) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-11-14 21:14:09 UTC (rev 4825) @@ -1025,7 +1025,11 @@ } Actor* actor = ( Actor* ) tar; - Point p((short) actor->GetStat(IE_SAVEDXPOS),(short) actor->GetStat(IE_SAVEDYPOS) ); + Point p((short) actor->GetBase(IE_SAVEDXPOS),(short) actor->GetBase(IE_SAVEDYPOS) ); + if (p.isnull()) { + Sender->ReleaseCurrentAction(); + return; + } actor->WalkTo( p, 0, 0 ); } @@ -1042,8 +1046,12 @@ } Actor* actor = ( Actor* ) tar; - Point p((short) actor->GetStat(IE_SAVEDXPOS),(short) actor->GetStat(IE_SAVEDYPOS) ); - actor->WalkTo( parameters->pointParameter, IF_RUNNING, 0 ); + Point p((short) actor->GetBase(IE_SAVEDXPOS),(short) actor->GetBase(IE_SAVEDYPOS) ); + if (p.isnull()) { + Sender->ReleaseCurrentAction(); + return; + } + actor->WalkTo( p, IF_RUNNING, 0 ); } //iwd2 @@ -1059,8 +1067,14 @@ } Actor* actor = ( Actor* ) tar; - Point p((short) actor->GetStat(IE_SAVEDXPOS),(short) actor->GetStat(IE_SAVEDYPOS) ); - actor->WalkTo( parameters->pointParameter, 0, 0 ); + Point p((short) actor->GetBase(IE_SAVEDXPOS),(short) actor->GetBase(IE_SAVEDYPOS) ); + actor->SetBase(IE_SAVEDXPOS,0); + actor->SetBase(IE_SAVEDYPOS,0); + if (p.isnull()) { + Sender->ReleaseCurrentAction(); + return; + } + actor->WalkTo( p, 0, 0 ); //what else? } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-11-18 13:43:52
|
Revision: 4833 http://gemrb.svn.sourceforge.net/gemrb/?rev=4833&view=rev Author: avenger_teambg Date: 2007-11-18 05:43:32 -0800 (Sun, 18 Nov 2007) Log Message: ----------- fixed ForceSpell action, this improves the initial bg2 cutscene Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-11-16 20:23:17 UTC (rev 4832) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-11-18 13:43:32 UTC (rev 4833) @@ -2174,7 +2174,7 @@ } //if target was set, fire spell - if (!Sender->LastTarget) { + if (Sender->LastTarget) { Sender->CastSpellEnd( spellres ); Sender->ReleaseCurrentAction(); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2007-12-30 16:55:04
|
Revision: 4954 http://gemrb.svn.sourceforge.net/gemrb/?rev=4954&view=rev Author: lynxlupodian Date: 2007-12-30 08:54:45 -0800 (Sun, 30 Dec 2007) Log Message: ----------- turn to the target when spellcasting if the spell isn't selftargeted (would reset the orientation to S) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 13:09:44 UTC (rev 4953) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 16:54:45 UTC (rev 4954) @@ -2133,6 +2133,10 @@ } //set target + Actor *actor = (Actor *) Sender; + if (tar != Sender) { + actor->SetOrientation( GetOrient( tar->Pos, actor->Pos ), false ); + } Sender->CastSpell( spellres, tar, true ); //if target was set, feed action back @@ -2160,6 +2164,8 @@ } //set target + Actor *actor = (Actor *) Sender; + actor->SetOrientation( GetOrient( parameters->pointParameter, actor->Pos ), false ); Sender->CastSpellPoint( spellres, parameters->pointParameter, true ); //if target was set, feed action back This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2007-12-30 17:29:41
|
Revision: 4955 http://gemrb.svn.sourceforge.net/gemrb/?rev=4955&view=rev Author: lynxlupodian Date: 2007-12-30 09:29:24 -0800 (Sun, 30 Dec 2007) Log Message: ----------- also set the caster's orientation in Force and ReallyForce spell triggers RFSDead deliberately left out Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 16:54:45 UTC (rev 4954) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 17:29:24 UTC (rev 4955) @@ -2200,6 +2200,10 @@ } //set target + Actor *actor = (Actor *) Sender; + if (tar != Sender) { + actor->SetOrientation( GetOrient( tar->Pos, actor->Pos ), false ); + } Sender->CastSpell (spellres, tar, false); //if target was set, feed action back @@ -2226,6 +2230,8 @@ } //set target + Actor *actor = (Actor *) Sender; + actor->SetOrientation( GetOrient( parameters->pointParameter, actor->Pos ), false ); Sender->CastSpellPoint (spellres, parameters->pointParameter, false); //if target was set, feed action back @@ -2251,6 +2257,9 @@ } if (Sender->Type == ST_ACTOR) { Actor *actor = (Actor *) Sender; + if (tar != Sender) { + actor->SetOrientation( GetOrient( tar->Pos, actor->Pos ), false ); + } actor->SetStance (IE_ANI_CONJURE); } if (tar->Type==ST_ACTOR) { @@ -2281,6 +2290,7 @@ return; } Actor *actor = (Actor *) Sender; + actor->SetOrientation( GetOrient( parameters->pointParameter, actor->Pos ), false ); actor->SetStance (IE_ANI_CONJURE); } Sender->CastSpellPointEnd(spellres); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2007-12-30 21:28:53
|
Revision: 4956 http://gemrb.svn.sourceforge.net/gemrb/?rev=4956&view=rev Author: lynxlupodian Date: 2007-12-30 13:28:57 -0800 (Sun, 30 Dec 2007) Log Message: ----------- added Spell{,Point}NoDec actions and clarified some other comments for easier differentiation. The actions are the same as ForceSpell{,Point}, but should be interruptable. Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 17:29:24 UTC (rev 4955) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2007-12-30 21:28:57 UTC (rev 4956) @@ -2107,7 +2107,8 @@ parameters->pointParameter, parameters->int0Parameter, true); } -//spell is depleted, casting time is calculated +//spell is depleted, casting time is calculated, interruptible +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::Spell(Scriptable* Sender, Action* parameters) { ieResRef spellres; @@ -2145,7 +2146,8 @@ } } -//spell is depleted, casting time is calculated +//spell is depleted, casting time is calculated, interruptible +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::SpellPoint(Scriptable* Sender, Action* parameters) { ieResRef spellres; @@ -2174,7 +2176,80 @@ } } -//spell isn't depleted, but casting time is calculated +//spell is not depleted (doesn't need to be memorised or known) +//casting time is calculated, interruptible +//FIXME The caster must meet the level requirements as set in the spell file +void GameScript::SpellNoDec(Scriptable* Sender, Action* parameters) +{ + ieResRef spellres; + + //resolve spellname + if (!ResolveSpellName( spellres, parameters) ) { + Sender->ReleaseCurrentAction(); + return; + } + + //if target was set, fire spell + if (Sender->LastTarget) { + Sender->CastSpellEnd( spellres ); + Sender->ReleaseCurrentAction(); + return; + } + + //parse target + Scriptable* tar = GetActorFromObject( Sender, parameters->objects[1] ); + if (!tar) { + Sender->ReleaseCurrentAction(); + return; + } + + //set target + Actor *actor = (Actor *) Sender; + if (tar != Sender) { + actor->SetOrientation( GetOrient( tar->Pos, actor->Pos ), false ); + } + Sender->CastSpell( spellres, tar, false ); + + //if target was set, feed action back + if (Sender->LastTarget) { + Sender->AddActionInFront( Sender->CurrentAction ); + } +} + +//spell is not depleted (doesn't need to be memorised or known) +//casting time is calculated, interruptible +//FIXME The caster must meet the level requirements as set in the spell file +void GameScript::SpellPointNoDec(Scriptable* Sender, Action* parameters) +{ + ieResRef spellres; + + //resolve spellname + if (!ResolveSpellName( spellres, parameters) ) { + Sender->ReleaseCurrentAction(); + return; + } + + //if target was set, fire spell + if (!Sender->LastTargetPos.isempty()) { + Sender->CastSpellPointEnd( spellres ); + Sender->ReleaseCurrentAction(); + return; + } + + //set target + Actor *actor = (Actor *) Sender; + actor->SetOrientation( GetOrient( parameters->pointParameter, actor->Pos ), false ); + Sender->CastSpellPoint( spellres, parameters->pointParameter, false ); + + //if target was set, feed action back + if (!Sender->LastTargetPos.isempty()) { + Sender->AddActionInFront( Sender->CurrentAction ); + } +} + +//spell is not depleted (doesn't need to be memorised or known) +//casting time is calculated, not interruptable +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::ForceSpell(Scriptable* Sender, Action* parameters) { ieResRef spellres; @@ -2212,7 +2287,9 @@ } } -//spell isn't depleted, but casting time is calculated +//spell is not depleted (doesn't need to be memorised or known) +//casting time is calculated, not interruptable +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::ForceSpellPoint(Scriptable* Sender, Action* parameters) { ieResRef spellres; @@ -2240,7 +2317,9 @@ } } -//zero casting time, no depletion +//ForceSpell with zero casting time +//zero casting time, no depletion, not interruptable +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::ReallyForceSpell(Scriptable* Sender, Action* parameters) { ieResRef spellres; @@ -2272,8 +2351,10 @@ Sender->ReleaseCurrentAction(); } -//zero casting time, no depletion (finish casting at point) +//ForceSpellPoint with zero casting time +//zero casting time, no depletion (finish casting at point), not interruptable //no CFB +//FIXME The caster must meet the level requirements as set in the spell file void GameScript::ReallyForceSpellPoint(Scriptable* Sender, Action* parameters) { ieResRef spellres; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-02-19 19:22:02
|
Revision: 5062 http://gemrb.svn.sourceforge.net/gemrb/?rev=5062&view=rev Author: avenger_teambg Date: 2008-02-19 11:22:02 -0800 (Tue, 19 Feb 2008) Log Message: ----------- fixed a problem in TimedMoveToPoint, fixes bug #1896314 Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-02-18 22:14:55 UTC (rev 5061) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-02-19 19:22:02 UTC (rev 5062) @@ -555,10 +555,10 @@ Actor *actor = game->GetPC(0, false); ieResRef area; Point p((short) actor->GetStat(IE_SAVEDXPOS), (short) actor->GetStat(IE_SAVEDYPOS) ); - //FIXME: calculate area - //This action is not working now!!! - memcpy(area,actor->GetCurrentArea(),sizeof(ieResRef) ); - //end of hack + //FIXME: calculate area + //This action is not working now!!! + memcpy(area,actor->GetCurrentArea(),sizeof(ieResRef) ); + //end of hack while (i--) { Actor *tar = game->GetPC(i, false); MoveBetweenAreasCore( tar, area, p, -1, true); @@ -977,17 +977,37 @@ Sender->ReleaseCurrentAction(); } -//not sure if this works correctly, but sounds like the way +//movetopoint until timer is down or target reached void GameScript::TimedMoveToPoint(Scriptable* Sender, Action* parameters) { if (Sender->Type != ST_ACTOR) { Sender->ReleaseCurrentAction(); return; } - Actor *actor = ( Actor* ) Sender; - actor->WalkTo( parameters->pointParameter, 0, 0 ); - actor->SetWait(parameters->int0Parameter * AI_UPDATE_TIME); - Sender->ReleaseCurrentAction(); + if (parameters->int0Parameter<=0) { + Sender->ReleaseCurrentAction(); + return; + } + Actor *actor = (Actor *) Sender; + + actor->WalkTo( parameters->pointParameter, parameters->int1Parameter,0 ); + Point dest = actor->Destination; + //hopefully this hack will prevent lockups + if (!actor->InMove()) { + Sender->ReleaseCurrentAction(); + return; + } + + //repeat movement... + Action *newaction = ParamCopyNoOverride(parameters); + if (newaction->int0Parameter!=1) { + if (newaction->int0Parameter) { + newaction->int0Parameter--; + } + actor->AddActionInFront(newaction); + } + + Sender->ReleaseCurrentAction(); } void GameScript::MoveToPoint(Scriptable* Sender, Action* parameters) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-05-12 19:34:42
|
Revision: 5146 http://gemrb.svn.sourceforge.net/gemrb/?rev=5146&view=rev Author: avenger_teambg Date: 2008-05-12 12:34:01 -0700 (Mon, 12 May 2008) Log Message: ----------- display pickpocket verbal constant Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-05-11 18:43:13 UTC (rev 5145) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-05-12 19:34:01 UTC (rev 5146) @@ -990,24 +990,24 @@ } Actor *actor = (Actor *) Sender; - actor->WalkTo( parameters->pointParameter, parameters->int1Parameter,0 ); - Point dest = actor->Destination; - //hopefully this hack will prevent lockups - if (!actor->InMove()) { - Sender->ReleaseCurrentAction(); - return; - } + actor->WalkTo( parameters->pointParameter, parameters->int1Parameter,0 ); + Point dest = actor->Destination; + //hopefully this hack will prevent lockups + if (!actor->InMove()) { + Sender->ReleaseCurrentAction(); + return; + } - //repeat movement... - Action *newaction = ParamCopyNoOverride(parameters); - if (newaction->int0Parameter!=1) { - if (newaction->int0Parameter) { - newaction->int0Parameter--; - } - actor->AddActionInFront(newaction); - } + //repeat movement... + Action *newaction = ParamCopyNoOverride(parameters); + if (newaction->int0Parameter!=1) { + if (newaction->int0Parameter) { + newaction->int0Parameter--; + } + actor->AddActionInFront(newaction); + } - Sender->ReleaseCurrentAction(); + Sender->ReleaseCurrentAction(); } void GameScript::MoveToPoint(Scriptable* Sender, Action* parameters) @@ -3953,6 +3953,7 @@ } core->DisplayConstantString(STR_PICKPOCKET_DONE,0xffffff); + DisplayStringCore(snd, VB_PP_SUCC, DS_CONSOLE|DS_CONST ); Sender->ReleaseCurrentAction(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |