Update of /cvsroot/openmugen/OpenMugen/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26851 Modified Files: ControllerExecuter.cpp SoundSystem.cpp StateParser.cpp VM.cpp VideoSystem.cpp player.cpp player.h Log Message: HitPause and HitShake now works correct HitDefAttr trigger works NotHitBy and HitBy Controller works Index: ControllerExecuter.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/ControllerExecuter.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- ControllerExecuter.cpp 30 Aug 2005 15:09:07 -0000 1.1.1.1 +++ ControllerExecuter.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -795,6 +795,7 @@ void CControllerExecuter::HitDef() hitvar.fall_yvel = m_pVM->Execute(temp->fall_yvelocity,-4.5); hitvar.groundtype = temp->nGroundType; hitvar.pauseTime = (int)m_pVM->Execute(temp->p1_pausetime); + hitvar.hitshaketime = (int)m_pVM->Execute(temp->p2_shaketime); hitvar.snd_grp = (int)m_pVM->Execute(temp->snd_grp); hitvar.snd_item = (int)m_pVM->Execute(temp->snd_item); hitvar.bPlayerSnd = temp->bPlayerSound; @@ -896,11 +897,8 @@ void CControllerExecuter::VelAdd() if(temp->x_value) m_CurrentPlayer->VelAddX(m_pVM->Execute(temp->x_value)); if(temp->y_value) - { m_CurrentPlayer->VelAddY(m_pVM->Execute(temp->y_value)); - // throw(CError("%f",m_pVM->Execute(temp->y_value))); - - } + } @@ -1237,14 +1235,21 @@ void CControllerExecuter::PlayerPush() void CControllerExecuter::PowerAdd() { POWERADD *temp=(POWERADD*)lpController; - PrintMessage("TODO: implement PowerAdd controller"); + + s16 power = (s16)m_pVM->Execute( temp->value ); + m_CurrentPlayer->AddPower(power); + + PrintMessage("test: implement PowerAdd controller"); } void CControllerExecuter::PowerSet() { POWERADD *temp=(POWERADD*)lpController; - PrintMessage("TODO: implement PowerSet controller"); + s16 power = (s16)m_pVM->Execute( temp->value ); + m_CurrentPlayer->SetPower( power ); + + PrintMessage("test: implement PowerSet controller"); } @@ -1284,26 +1289,114 @@ void CControllerExecuter::ReversalDef() void CControllerExecuter::TargetDrop() { TARGETDROP *temp = (TARGETDROP*)lpController; - PrintMessage("TODO: implement TargetDrop controller"); + + bool bKeepOne = m_pVM->Execute( temp->keepone , 1 ) > 0; + s16 excludeID = m_pVM->Execute( temp->excludeID, -1); + + m_CurrentPlayer->TargetDrop( bKeepOne,excludeID); + + PrintMessage("test: implement TargetDrop controller"); } void CControllerExecuter::TargetPowerAdd() { TARGETPOWERADD *temp = (TARGETPOWERADD*)lpController; - PrintMessage("TODO: implement TargetPowerAdd controller"); + + s16 power = m_pVM->Execute( temp->add_amt ); + s16 nTargetId = m_pVM->Execute(temp->id,-1); + + if( nTargetId == -1 ) + { + int nHowManyTargtes = 0; + CPlayer **list = m_CurrentPlayer->GetAllTargets(nHowManyTargtes); + + for( int i = 0;i < nHowManyTargtes;i++) + { + list[i]->AddPower( power ); + } + + }else + { + CPlayer *target = m_CurrentPlayer->GetTargetById(nTargetId); + + if( target ) + { + target->AddPower( power ); + } + } + PrintMessage("test: implement TargetPowerAdd controller"); } void CControllerExecuter::TargetVelAdd() { TARGETVEL *temp = (TARGETVEL*)lpController; - PrintMessage("TODO: implement TargetVelAdd controller"); + + s16 nTargetId = m_pVM->Execute(temp->id,-1); + + if( nTargetId == -1 ) + { + int nHowManyTargtes = 0; + CPlayer **list = m_CurrentPlayer->GetAllTargets(nHowManyTargtes); + + for( int i = 0;i < nHowManyTargtes;i++) + { + // list[i]->AddPower( power ); + if(temp->x_vel) + list[i]->VelAddX(m_pVM->Execute(temp->x_vel)); + if(temp->y_vel) + list[i]->VelAddY(m_pVM->Execute(temp->y_vel)); + } + + }else + { + CPlayer *target = m_CurrentPlayer->GetTargetById(nTargetId); + + if( target ) + { + if(temp->x_vel) + target->VelAddX(m_pVM->Execute(temp->x_vel)); + if(temp->y_vel) + target->VelAddY(m_pVM->Execute(temp->y_vel)); + } + } + PrintMessage("test: implement TargetVelAdd controller"); } void CControllerExecuter::TargetVelSet() { TARGETVEL *temp = (TARGETVEL*)lpController; - PrintMessage("TODO: implement TargetVelSet controller"); + s16 nTargetId = m_pVM->Execute(temp->id,-1); + + if( nTargetId == -1 ) + { + int nHowManyTargtes = 0; + CPlayer **list = m_CurrentPlayer->GetAllTargets(nHowManyTargtes); + + for( int i = 0;i < nHowManyTargtes;i++) + { + // list[i]->AddPower( power ); + if(temp->x_vel) + list[i]->VelSetX(m_pVM->Execute(temp->x_vel)); + if(temp->y_vel) + list[i]->VelSetY(m_pVM->Execute(temp->y_vel)); + } + + }else + { + CPlayer *target = m_CurrentPlayer->GetTargetById(nTargetId); + + if( target ) + { + if(temp->x_vel) + target->VelSetX(m_pVM->Execute(temp->x_vel)); + if(temp->y_vel) + target->VelSetY(m_pVM->Execute(temp->y_vel)); + } + } + + + PrintMessage("test: implement TargetVelSet controller"); } void CControllerExecuter::Trans() Index: SoundSystem.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/SoundSystem.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- SoundSystem.cpp 30 Aug 2005 15:09:17 -0000 1.1.1.1 +++ SoundSystem.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -55,7 +55,7 @@ bool CSoundSystem::InitSound() PrintMessage("----End of Init SoundSytem----"); - SetSoundVolume(10); + SetSoundVolume(25); return true; } Index: StateParser.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/StateParser.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- StateParser.cpp 30 Aug 2005 15:09:28 -0000 1.1.1.1 +++ StateParser.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -1490,6 +1490,75 @@ void CStateParser::Primary() return; } + //HitDefAttr trigger + if( i == 31 ) + { + if ( !tok.CheckToken("=") ) + Error("expected an = "); + + char strTemp[100]; + strcpy(strTemp,tok.GetToken()); + + int nNumberOfArg1 = strlen( strTemp ); + + for( int i=0;i< nNumberOfArg1; i++) + { + char c = toupper( strTemp[i] ); + + switch( c ) + { + case 'S': + StateManager->AddInstruction(OP_PUSH,stand,"#"); + break; + + case 'C': + StateManager->AddInstruction(OP_PUSH,crouch,"#"); + break; + + case 'A': + StateManager->AddInstruction(OP_PUSH,air,"#"); + break; + + default: + Error("wrong paramerter for value1 in HitDefAttr"); + break; + } + } + + StateManager->AddInstruction(OP_PUSH,nNumberOfArg1,"#"); + + int nNumberOfArg2 = 0; + + while( tok.CheckToken(",") ) + { + if( tok.CheckToken("NA") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::NormalAttack,"#"); + else if( tok.CheckToken("NT") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::NormalThrow,"#"); + else if( tok.CheckToken("NP") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::NormalProjectile,"#"); + else if( tok.CheckToken("SA") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::SpecialAttack,"#"); + else if( tok.CheckToken("ST") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::SpecialThrow,"#"); + else if( tok.CheckToken("SP") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::SpecialProjectile,"#"); + else if( tok.CheckToken("HA") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::HyperAttack,"#"); + else if( tok.CheckToken("HT") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::HyperThrow,"#"); + else if( tok.CheckToken("HP") ) + StateManager->AddInstruction(OP_PUSH,CPlayer::HyperProjectile,"#"); + else + Error("worng attr parameter in HitDefAttr trigger"); + + nNumberOfArg2++; + + } + + StateManager->AddInstruction(OP_PUSH,nNumberOfArg2,"#"); + } + //handle command trigger if( i == 16 ) { Index: VM.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/VM.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- VM.cpp 30 Aug 2005 15:09:33 -0000 1.1.1.1 +++ VM.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -1542,6 +1542,31 @@ void CVirtualMachine::HitCount() void CVirtualMachine::HitDefAttr() { + PopValue(); + int nNumberOfArg2 = m_pop.Value; + u8 Arg2[10]; + + for( int i=0;i< nNumberOfArg2;i++) + { + PopValue(); + Arg2[i] = m_pop.Value; + } + + PopValue(); + int nNumberOfArg1 = m_pop.Value; + u8 Arg1[10]; + + for( int i=0; i< nNumberOfArg1;i++) + { + PopValue(); + Arg1[i] = m_pop.Value; + } + + bool bHitDefAttr = m_CurrentPlayer->HitDefAttr(Arg1,nNumberOfArg1,Arg2,nNumberOfArg2); + m_Stack.Push(bHitDefAttr,"#"); + + + // PrintMessage("%i->%i",nNumberOfArg1,nNumberOfArg2); } void CVirtualMachine::HitFall() { @@ -1566,7 +1591,7 @@ void CVirtualMachine::HitPauseTime() void CVirtualMachine::HitShakeOver() { - m_Stack.Push(1,"#"); + m_Stack.Push(m_CurrentPlayer->HitShakeOver(),"#"); } //HitVel [component] Index: VideoSystem.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/VideoSystem.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- VideoSystem.cpp 30 Aug 2005 15:09:31 -0000 1.1.1.1 +++ VideoSystem.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -102,7 +102,7 @@ void CVideoSystem::LoadFont() throw(CError("arial.ttf not found")); sge_TTF_SetFontStyle(lpTTF, SGE_TTF_NORMAL); - sge_TTF_AAOff(); + // sge_TTF_AAOff(); } //Takes a screen shot and save it to the screen shot folder @@ -244,9 +244,9 @@ void CVideoSystem::DrawText(s16 x,s16 y, va_end(ap); sge_tt_textout(work,lpTTF,string,x,y, - SDL_MapRGB(screen->format,255,255,255),11,255); - - + SDL_MapRGB(screen->format,255,255,255),0,255); + + } //Creates a SDL Surface SDL_Surface * CVideoSystem::CreateSurface(int x,int y) Index: player.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/player.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- player.cpp 30 Aug 2005 15:09:13 -0000 1.1.1.1 +++ player.cpp 1 Sep 2005 20:13:24 -0000 1.2 @@ -56,8 +56,10 @@ CPlayer::CPlayer() nFrontEdgeBodyDist = 0; nFrontEdgeDist = 0; nMoveContact = nMoveHit = nMoveGuarded = 0; -/* nHitPauseTime = 0; - bHitPause = true;*/ + nDelayedStateNumber = -1; + nHitPauseTime = 0; + bHitPause = false; + bShakePause = false; TargetListNum = 0; memset( TargetList,0,sizeof(CPlayer*)); @@ -83,7 +85,8 @@ CPlayer::CPlayer() m_pSndManager = new CSoundManager; //keep a copy of it to restore a player from costum states from the opponent player - m_OrginStateManager = m_pStateManager; + m_OrginStateManager = m_pStateManager; + m_OpponentStateManager = 0; } @@ -223,7 +226,7 @@ Handles the players Physic void CPlayer::HandlePhysic() { - if ( bPosFreez || bPhysicsUpdated) + if ( bPosFreez || bPhysicsUpdated || bHitPause) return; if( GetStateNumber() == 0 && ( GetPosY() > 0 || GetPosY() < 0 ) ) @@ -355,6 +358,9 @@ Checks all the triggers in the current s */ bool CPlayer::CheckState(PLSTATE* tempState) { + if( !tempState->bIgnorPause && bHitPause ) + return false; + bool bTriggerAll=true; bool bTrigger=true; u8 nTriggerType; @@ -524,6 +530,10 @@ We have to check the red clsn1 boxes of */ void CPlayer::HandleHitDef(CPlayer *opponent) { + if( bHitPause ) + return; + + bool bP1Hit=false; bool bP2Hit=false; @@ -670,22 +680,21 @@ void CPlayer::HandleHit(CPlayer *opponen { if (opponent->IsNotHitBy( myGetHitVar.nHitType,myGetHitVar.nHitAttr ) ) return; - - + opponent->SetInHitVar(myGetHitVar); opponent->SetAttacker( this ); if(myGetHitVar.groundtype == 3 ) - opponent->ChangeState(5070); + opponent->ChangeStateNextFrame(5070); else if( opponent->GetStateType() == air ) - opponent->ChangeState(5020); + opponent->ChangeStateNextFrame(5020); else if( opponent->GetStateType() == liedown ) - opponent->ChangeState(5080); + opponent->ChangeStateNextFrame(5080); else - opponent->ChangeState(5000); + opponent->ChangeStateNextFrame(5000); opponent->SetupGetHit(); @@ -695,12 +704,11 @@ void CPlayer::HandleHit(CPlayer *opponen ChangeState( myGetHitVar.p1StateNo ); if( myGetHitVar.p2StateNo != -1 ) - opponent->ChangeState( myGetHitVar.p2StateNo, m_OrginStateManager ); - + opponent->ChangeStateNextFrame( myGetHitVar.p2StateNo, m_OrginStateManager ); + SetHitVel( opponent ); CalcCornerPushVelOff( opponent ); - - + if( opponent->GetBackEdgeBodyDist() <= 0 ) VelSetX( myGetHitVar.cornerpush_veloff ); @@ -714,10 +722,13 @@ void CPlayer::HandleHit(CPlayer *opponen /*Apply hit pause */ - CPause *pause = new CPause(); + /* CPause *pause = new CPause(); pause->SetPauseTime( myGetHitVar.pauseTime ); - mugen->GetEngine()->AddObject( pause ); + mugen->GetEngine()->AddObject( pause );*/ + SetHitPause( myGetHitVar.pauseTime ); + opponent->SetShakePause( myGetHitVar.hitshaketime ); + CSffManager *p = myGetHitVar.bPlayerSpark ? GetSff() : mugen->GetEngine()->GetEngineSff(); CExplod *explod = new CExplod( new CSffManager( p ), @@ -826,7 +837,7 @@ This handles the players behavior when h */ void CPlayer::HandleGetHitState() { - if( GetMoveType() != hit) + if( GetMoveType() != hit || bShakePause) return; //InHitVar.slidetime--; @@ -983,6 +994,7 @@ void CPlayer::CheckGlobalStatus() /*CPlayer *p2=m_pEngine->GetPlayerList();*/ list<CBaseObject*>* ObjList = m_pEngine->GetObjectList(); + bHitTarget = false; UpDateFacing(); @@ -1015,16 +1027,18 @@ void CPlayer::CheckGlobalStatus() } } - - - + + if( nDelayedStateNumber > -1 ) + { + ChangeState( nDelayedStateNumber, m_OpponentStateManager ); + nDelayedStateNumber = -1; + } //we hit a target so disable the hit def ) if( bHitTarget ) bHitDef = false; - - + } /* ================================================================================ @@ -1040,7 +1054,6 @@ void CPlayer::Think() if( !bPause ) { - m_pCmdManager->Update( inputs, bRightFaced ); m_pInputProcessor->Update( inputs, m_pEngine->GetJoyCount(), m_pEngine->GetJoyInfo() ); @@ -1049,11 +1062,12 @@ void CPlayer::Think() m_pSffManager->SetSprPrior(nSprPrio); //only update the state time if we ar not maked a changestate - if(!bChangeState && !bPause) + if(!bChangeState && !bPause && !bHitPause) nStateTime++; ResetFlags(); UpDateFacing(); + UpDateHitPause(); } DrawPlayer(); @@ -1158,6 +1172,8 @@ void CPlayer::ResetFlags() bAutoTurn=true; bPosFreez = false; bPhysicsUpdated = false; + x_offset = 0; + y_offset = 0; } // debug info of the player @@ -1198,6 +1214,8 @@ void CPlayer::Debug() nMoveGuarded); m_pVideoSystem->DrawText(0,120,"HitBy1 = %i | NotHitBy1 = %i",HitBySlot1.nTime,NotHitBySlot1.nTime); m_pVideoSystem->DrawText(0,130,"HitBy2 = %i | NotHitBy2 = %i",HitBySlot2.nTime,NotHitBySlot2.nTime); + m_pVideoSystem->DrawText(0,140,"HitTime %i| HitPause =%i",nHitPauseTime,/*bHitPause*/HitShakeOver()); + } @@ -1267,6 +1285,12 @@ void CPlayer::ResetPlayer() nStateType=0; nPhysic=0; nMoveType=0; + nDelayedStateNumber = -1; + nHitPauseTime = 0; + bHitPause = false; + bShakePause = false; + x_offset = 0; + y_offset = 0; memset(intPresistIndex,0,sizeof(intPresistIndex)); memset(floatPresistIndex,0,sizeof(floatPresistIndex)); @@ -1406,8 +1430,8 @@ void CPlayer::ChangeAnim2(s32 nAnimNumbe //Draw the Player void CPlayer::DrawPlayer() { - m_pSffManager->SetPause(bPause); - m_pSffManager->BlitAnim((s16)x,(s16)y); + m_pSffManager->SetPause(bPause || bHitPause); + m_pSffManager->BlitAnim((s16)x+x_offset,(s16)y+y_offset); //draw debug info if(bDebugInfo) @@ -1465,6 +1489,57 @@ CPlayer **CPlayer::GetAllTargets(int &in return TargetList; } +/* +================================================================================ +TargetDrop + excludeID = id_no (int) + Any targets with target ID number not equal to id_no will be + dropped from the player's target list. Defaults to -1 (drop all + targets). + keepone = value (int) + If value is nonzero, then at most one target is kept on the + player's target list. If there are multiple targets whose target + ID number is the same as id_no, one will be picked at random and + the rest will be dropped. This behavior is useful in throws, to + keep from throwing multiple opponents simultaneously. If value is + 0, then all targets with the appropriate ID number will be kept. + keepone defaults to 1. +================================================================================ +*/ +void CPlayer::TargetDrop(bool bKeepOne,s16 nExcludeId) +{ + if( bKeepOne ) + TargetListNum = 1; + else if ( nExcludeId == -1 ) + { + TargetListNum = 0; + memset( TargetList,0,sizeof(CPlayer*)); + + } + + if( nExcludeId ) + { + CPlayer *temp = 0; + + for ( int i = 0; i < TargetListNum; i++ ) + { + if( TargetList[i]->GetPlayerId() == nExcludeId ) + temp = TargetList[i]; + } + + if( temp ) + { + TargetList[0] = temp; + TargetListNum = 1; + + } + else + TargetListNum = 0; + + + } +} + void CPlayer::SetHitBySlot(u8 *type,u8 *attr,int nTime, int slot) { if( slot == 1) @@ -1557,6 +1632,63 @@ bool CPlayer::IsHitBy(u8 type,u8 attr) /* ================================================================================ +HitDefAttr Trigger +================================================================================ +*/ +bool CPlayer::HitDefAttr(u8 *Arg1,int nNrArg1,u8 *Arg2,int nNrArg2) +{ + if( GetMoveType() != attack ) + return false; + + bool bType = false; + bool bAttr = nNrArg2 > 0 ? true : false; + + for( int i=0;i<nNrArg1;i++) + { + if( myGetHitVar.nHitType == Arg1[i] ) + { + bType = true; + break; + } + } + + for( int i=0;i<nNrArg2;i++ ) + { + if( myGetHitVar.nHitAttr== Arg2[i] ) + { + bAttr = true; + break; + } + } + + + return bAttr && bType; +} + +/* +================================================================================ +Function to geting Player informations +================================================================================ +*/ +void CPlayer::UpDateHitPause() +{ + if( nHitPauseTime == 0) + { + bHitPause = false; + bShakePause = false; + } + + if( bShakePause ) + { + x_offset = GetStateTime() % 2 ? 1:-1; + } + + if(bHitPause || bShakePause) + nHitPauseTime--; + +} +/* +================================================================================ Function to geting Player informations ================================================================================ */ Index: player.h =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/player.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- player.h 30 Aug 2005 15:09:14 -0000 1.1.1.1 +++ player.h 1 Sep 2005 20:13:24 -0000 1.2 @@ -245,11 +245,13 @@ CSffManager *m_pSffManager; CSoundManager *m_pSndManager; CAirManager *m_pAirManager; CStateManager *m_pStateManager; +CStateManager *m_OrginStateManager; +CStateManager *m_OpponentStateManager; CGameTimer *m_pTimer; CVirtualMachine *m_pVMachine; CControllerExecuter *m_pControllerExec; CEngine *m_pEngine; -CStateManager *m_OrginStateManager; + CInputProcessor *m_pInputProcessor; CCmdManager *m_pCmdManager; @@ -257,8 +259,9 @@ CCmdManager *m_pCmdManager; //Variable which holds a hit information HitVar myGetHitVar; HitVar InHitVar; -/*int nHitPauseTime; -bool bHitPause;*/ +int nHitPauseTime; +bool bHitPause; +bool bShakePause; CPlayer* TargetList[MaxTargets]; int TargetListNum; @@ -273,6 +276,8 @@ HitByAttr NotHitBySlot2; //Player information float x,y; +float x_offset; +float y_offset; float xVel,yVel; float nGround; float nBodyDistanceX; //distance between front @@ -290,6 +295,7 @@ int nMoveGuarded; s32 nCurrAnimNumber; s32 nPrevStateNumber; s32 nCurrStateNumber; +s32 nDelayedStateNumber; u32 nStateTime; u8 nStateType; u8 nPhysic; @@ -474,6 +480,8 @@ enum HitPrior //Player Controllers void ChangeState(s32 nSateNumber,CStateManager *pOtherStateDef = 0); + void ChangeStateNextFrame( s32 nSateNumber,CStateManager *pOtherStateDef = 0 ) { nDelayedStateNumber = nSateNumber; m_OpponentStateManager = pOtherStateDef; } //change the state delayed by one frame + void DisableNextFrameState() { nDelayedStateNumber = -1; } void ChangeAnim(s32 nAnimNumber,u16 nCurrElem=1); void ChangeAnim2(s32 nAnimNumber,u16 nCurrElem=1); void SetIntVar(int index,float value); @@ -522,12 +530,16 @@ enum HitPrior bool GetRightFaced(); bool IsNotHitBy(u8 type,u8 attr); bool IsHitBy(u8 type,u8 attr); + bool HitShakeOver() { return bShakePause && nHitPauseTime > 0 ? false : true;} + bool HitDefAttr(u8 *Arg1,int nNrArg1,u8 *Arg2,int nNrArg2); s16 GetLife(); u8 GetMoveType(); u8 GetStateType(); s32 GetStateNumber(); s32 GetPrevStateNumber(); s16 GetPower(); + void SetPower(s16 power) { nPower = power; } + void AddPower(s16 power) { nPower += power; } s16 GetPlayerId() {return nPlayerID;} u32 GetStateTime(); HitVar &GetVarHit(); @@ -536,6 +548,9 @@ enum HitPrior CAirManager *GetAir(){ return m_pAirManager; } CPlayer *GetTargetById(s16 id); CPlayer **GetAllTargets(int &indexSize); + void TargetDrop(bool bKeepOne,s16 nExcludeId); + void SetHitPause( int nPauseTime ) { nHitPauseTime = nPauseTime; bHitPause = true;} + void SetShakePause( int nPauseTime ) {nHitPauseTime = nPauseTime; bShakePause = true;} private: @@ -569,6 +584,7 @@ private: void StandPhysic(); void ResetFlags(); void CalculateValues(CPlayer *opponent); + void UpDateHitPause(); }; |