From: SakirSoft <sak...@us...> - 2005-09-12 20:04:31
|
Update of /cvsroot/openmugen/OpenMugen/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30337 Modified Files: CmdManager.cpp ControllerExecuter.cpp GameObjects.cpp SoundSystem.cpp StateParser.cpp StateParser.h VideoSystem.cpp player.cpp player.h Log Message: Completed some HitDef related stuff like Kill flag and HitFallVel controller Index: CmdManager.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/CmdManager.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- CmdManager.cpp 30 Aug 2005 15:09:05 -0000 1.1.1.1 +++ CmdManager.cpp 12 Sep 2005 20:04:17 -0000 1.2 @@ -508,7 +508,7 @@ bool CCmdManager::CommandInBuffer(char * if( strcmp(strCommand,strCommandBuffer[i]) == 0 ) { - //PrintMessage("%s == %s",strCommandBuffer[i],strCommand); + // PrintMessage("%s == %s",strCommandBuffer[i],strCommand); return true; } } Index: ControllerExecuter.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/ControllerExecuter.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- ControllerExecuter.cpp 6 Sep 2005 20:46:04 -0000 1.3 +++ ControllerExecuter.cpp 12 Sep 2005 20:04:17 -0000 1.4 @@ -204,12 +204,21 @@ void CControllerExecuter::AssertSpecial( { ASSERTSPECIAL *temp = (ASSERTSPECIAL*)lpController; - PrintMessage("TODO:Implement assert special"); + // PrintMessage("TODO:Implement assert special"); - if(temp->nFlag1 == 1) + for(int i=0; i<3 ;i++ ) { - mugen->GetEngine()->AssertIntro(); - } + + if(temp->nFlag[i] == 1) + { + mugen->GetEngine()->AssertIntro(); + } + + if(temp->nFlag[i] == 10) + m_CurrentPlayer->DisableTurn(); + + + } } @@ -439,8 +448,7 @@ void CControllerExecuter::NotHitBy() int nTime = m_pVM->Execute(temp->time,1); m_CurrentPlayer->SetNotHitBySlot(temp->attackType,temp->attackAttr,nTime,temp->slot); - - + // PrintMessage("Test: implement NotHitBy controller"); } @@ -450,8 +458,7 @@ void CControllerExecuter::HitBy() int nTime = m_pVM->Execute(temp->time,1); m_CurrentPlayer->SetHitBySlot(temp->attackType,temp->attackAttr,nTime,temp->slot); - - PrintMessage("TODO: implement HitBy controller"); + } void CControllerExecuter::AllPalFX() @@ -717,6 +724,9 @@ void CControllerExecuter::SuperPause() s32 nAnim = (s32)m_pVM->Execute(temp->nAnimNo,-1); s32 snd_grp = (s32)m_pVM->Execute(temp->snd_grp,-1); s32 snd_item = (s32)m_pVM->Execute(temp->snd_item,-1); + s16 n_Power = (s16)m_pVM->Execute(temp->poweradd,0); + + m_CurrentPlayer->AddPower(n_Power); //play sound if( snd_grp != -1) @@ -799,7 +809,6 @@ void CControllerExecuter::HitDef() hitvar.yaccel = m_pVM->Execute(temp->yaccel,m_CurrentPlayer->ConstData.Movement.yaccl); hitvar.fall_recovertime = m_pVM->Execute(temp->fall_recovertime,4); hitvar.recovertime = m_CurrentPlayer->ConstData.Data.nLieDownTime; - 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); @@ -810,6 +819,8 @@ void CControllerExecuter::HitDef() hitvar.spark_x = m_pVM->Execute(temp->spark_x); hitvar.spark_y = m_pVM->Execute(temp->spark_y); hitvar.fall = m_pVM->Execute(temp->fall); + hitvar.fall_xvel = m_pVM->Execute(temp->fall_xvelocity,-333); + hitvar.fall_yvel = m_pVM->Execute(temp->fall_yvelocity,-4.5); hitvar.guard_spark_no= m_pVM->Execute(temp->guardsparkno,m_CurrentPlayer->ConstData.Data.nGuardSparkNr); hitvar.bPlayerSpark = temp->bPlayerSpark; hitvar.guardPauseTime = m_pVM->Execute( temp->p1_Gpausetime,hitvar.pauseTime ); @@ -827,6 +838,16 @@ void CControllerExecuter::HitDef() hitvar.air_corerpush_velloff = m_pVM->Execute( temp->airguard_cornerpush_veloff , hitvar.cornerpush_veloff ); hitvar.down_cornerpush_veloff = m_pVM->Execute( temp->down_cornerpush_veloff , hitvar.cornerpush_veloff ); + hitvar.hit_prior = temp->nHitPrior > 0 ? temp->nHitClass : 4; + hitvar.hit_type = temp->nHitClass; + + hitvar.p1SprPrio = m_pVM->Execute(temp->p1sprpriority,1); + hitvar.p2SprPrio = m_pVM->Execute(temp->p2sprpriority,0); + + hitvar.bHitOnce = m_pVM->Execute(temp->hitonce,1) > 0; + hitvar.bKill = m_pVM->Execute(temp->kill_flag,1) > 0; + + //Set guard dist m_CurrentPlayer->SetAttackDist( m_pVM->Execute(temp->guard_dist,m_CurrentPlayer->ConstData.Size.nAttackDist) ); @@ -1149,8 +1170,14 @@ void CControllerExecuter::HitAdd() void CControllerExecuter::HitFallVel() { HitVar &hitvar=m_CurrentPlayer->GetVarHit(); - float yVel= hitvar.fall_yvel; - m_CurrentPlayer->VelSetY(yVel); + hitvar.fall_yvel; + hitvar.fall_xvel; + + if( hitvar.fall_yvel != -333 ) + m_CurrentPlayer->VelSetY(hitvar.fall_yvel); + + if( hitvar.fall_xvel != -333 ) + m_CurrentPlayer->VelSetX(hitvar.fall_xvel); // PrintMessage("HitFallVel %f",yVel); } @@ -1183,7 +1210,7 @@ void CControllerExecuter::LifeAdd() m_CurrentPlayer->LifeSet(nLife); - PrintMessage("Test: implement LifeAdd controller"); +// PrintMessage("Test: implement LifeAdd controller"); } void CControllerExecuter::LifeSet() Index: GameObjects.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/GameObjects.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -p -r1.1.1.1 -r1.2 --- GameObjects.cpp 30 Aug 2005 15:09:08 -0000 1.1.1.1 +++ GameObjects.cpp 12 Sep 2005 20:04:17 -0000 1.2 @@ -429,7 +429,7 @@ void CSuperPause::UpDateState() //darken the screen if( bDarken ) - mugen->GetVideo()->AddRect(0,0,319,239,0,0,0,128,5,CVideoSystem::RECT_FILLED); + mugen->GetVideo()->AddRect(0,0,640,480,0,0,0,128,5,CVideoSystem::RECT_FILLED); if( bPause ) Index: SoundSystem.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/SoundSystem.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -p -r1.2 -r1.3 --- SoundSystem.cpp 1 Sep 2005 20:13:24 -0000 1.2 +++ SoundSystem.cpp 12 Sep 2005 20:04:17 -0000 1.3 @@ -46,12 +46,15 @@ bool CSoundSystem::InitSound() linked->minor, linked->patch); - if( Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) == -1) + if( Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 1024) == -1) throw(CError("Unable to init SDL_mixer")); // Mix_SetPostMix(noEffect,0); Mix_AllocateChannels(MIXER_NUMBER_CHANNELS); + + /* LoadMusic("music/test.mp3"); + PlayMusic(); */ PrintMessage("----End of Init SoundSytem----"); Index: StateParser.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/StateParser.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- StateParser.cpp 6 Sep 2005 20:46:04 -0000 1.3 +++ StateParser.cpp 12 Sep 2005 20:04:17 -0000 1.4 @@ -2200,19 +2200,19 @@ void CStateParser::ParseAssertSpecial() if( !tok.CheckToken("=") ) Error("expected ="); - temp->nFlag1 = GetAssertSpecialParam(tok.GetToken() ); + temp->nFlag[0] = GetAssertSpecialParam(tok.GetToken() ); }else if( tok.CheckToken("flag2") ) { if( !tok.CheckToken("=") ) Error("expected ="); - temp->nFlag2 = GetAssertSpecialParam(tok.GetToken() ); + temp->nFlag[1] = GetAssertSpecialParam(tok.GetToken() ); }else if( tok.CheckToken("flag3") ) { if( !tok.CheckToken("=") ) Error("expected ="); - temp->nFlag3 = GetAssertSpecialParam(tok.GetToken() ); + temp->nFlag[2] = GetAssertSpecialParam(tok.GetToken() ); }else Error("wrong AssertSpecial Param"); @@ -3425,7 +3425,7 @@ void CStateParser::ParseNotHitBy() else if( tok.CheckToken("HP") ) temp->attackAttr[i]=CPlayer::HyperProjectile; else - Error("worng attr parameter in NotHitBy controller"); + Error("worng attr parameter in NotHit0By controller"); i++; Index: StateParser.h =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/StateParser.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -p -r1.2 -r1.3 --- StateParser.h 6 Sep 2005 20:46:04 -0000 1.2 +++ StateParser.h 12 Sep 2005 20:04:17 -0000 1.3 @@ -251,10 +251,8 @@ struct PLSTATEDEF struct ASSERTSPECIAL { - u8 nFlag1; - u8 nFlag2; - u8 nFlag3; - + u8 nFlag[3]; + }; struct MAKEDUST Index: VideoSystem.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/VideoSystem.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- VideoSystem.cpp 6 Sep 2005 20:46:04 -0000 1.3 +++ VideoSystem.cpp 12 Sep 2005 20:04:17 -0000 1.4 @@ -69,7 +69,7 @@ bool CVideoSystem::InitSystem() //Set Video mode and get main Surface - screen=SDL_SetVideoMode(640,480,nColorDepth,SDL_SWSURFACE/*|SDL_FULLSCREEN*/|SDL_DOUBLEBUF); + screen=SDL_SetVideoMode(640,480,nColorDepth,SDL_HWSURFACE/*|SDL_FULLSCREEN/*|SDL_DOUBLEBUF*/); //Check the surface for validate if(screen==NULL) { @@ -152,7 +152,7 @@ void CVideoSystem::Draw() SDL_BlitSurface(work,NULL,screen,NULL); //scale2x(work,screen); - // FilterImage(); + // FilterImage(); //SDL_SoftStretch(work,0,screen,0); //SDL_UpdateRect(screen,0,0,640,480); @@ -349,8 +349,8 @@ void CVideoSystem::NormalBlt(SFFSPRITE * SDL_Surface *lpTemp =ApplyPalEffect( lpSprite->sprite,pUsedPal); SDL_Surface *lpSurface =sge_transform_surface(lpTemp,nColorKey, 0,xScale,yScale,0); - - + + x-=(s16)lpSprite->x*xScale; y-=(s16)lpSprite->y*yScale; @@ -375,6 +375,8 @@ void CVideoSystem::NormalFlipH(SFFSPRITE SDL_Surface *lpTemp =ApplyPalEffect( lpSprite->sprite,pUsedPal); SDL_Surface *lpSurface =sge_transform_surface(lpTemp,nColorKey, 0,-xScale,yScale,0); + + x-=(lpSprite->PcxHeader.widht- lpSprite->x)*xScale; y-=lpSprite->y*yScale; @@ -408,7 +410,6 @@ SDL_Surface *CVideoSystem::CreateSurface { SDL_RWops *rwop = SDL_RWFromMem(lpSprite->rawData, lpSprite->nLenghtInByte ); SDL_Surface *temp = IMG_LoadTyped_RW(rwop,1,"PCX"); - return temp; Index: player.cpp =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/player.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- player.cpp 6 Sep 2005 20:46:04 -0000 1.3 +++ player.cpp 12 Sep 2005 20:04:17 -0000 1.4 @@ -194,7 +194,7 @@ bool CPlayer::LoadPlayer(PlayerDef playe m_pSffManager->LoadSffFile(playerdef.files.strSprite); - m_pSffManager->LoadActToSff(/*playerdef.files.strPal[0]*/"chars/kfm/kfm4.act"); + m_pSffManager->LoadActToSff(playerdef.files.strPal[0]); //Make always masked blit m_pSffManager->SetBltFlags(CVideoSystem::BLT_NORMAL | CVideoSystem::BLT_MASKED); m_pSffManager->PrepareAnim(0); @@ -553,6 +553,31 @@ void CPlayer::HandleHitDef(CPlayer *oppo bGuard = true; } + if( IsHitDef() && opponent->IsHitDef() && bP1Hit ) + { + if( GetHitPriority() < opponent->GetHitPriority() ) + ResetHitDef(); + + //tiebreaking behavior + /* + Hit vs. Hit: both P1 and P2 are hit + Hit vs. Miss: Hit hits, Miss misses + Hit vs. Dodge: No hits + Dodge vs. Dodge: No hits + Dodge vs. Miss: No hits + Miss vs. Miss: No hits + */ + if( GetHitPriority() == opponent->GetHitPriority() ) + { + if( ( GetHitClass() == Hit ) && ( opponent->GetHitClass() == Miss) ) + opponent->ResetHitDef(); + else + bP1Hit = false; + + + + } + } if( bP1Hit && IsHitDef() && !bGuard ) HandleHit( opponent ); @@ -685,10 +710,33 @@ Adds damage to the opponent void CPlayer::AddDamage(s16 nDamageAmount,CPlayer *opponent) { nDamageAmount = ( nDamageAmount * fAttackPower ) / opponent->GetDefenceValue(); + s16 nLifeOfOpponent = opponent->GetLife() - nDamageAmount ; + + //When kill flag is disable it is not possible to KO the opponent + if( nLifeOfOpponent <= 0 && !myGetHitVar.bKill ) + { + opponent->LifeSet( 1 ); + return; + } opponent->LifeAdd( -nDamageAmount ); } +void CPlayer::HitFallDamage() +{ + s16 nDamageAmount = (s16)(InHitVar.fall_damage / fDefence); + s16 nLifeOfOpponent = GetLife() - nDamageAmount ; + + if( nLifeOfOpponent <= 0 && !InHitVar.fall_kill) + { + LifeSet( 1 ); + return; + } + + LifeAdd( -nDamageAmount ); + +} + /* ================================================================================ Handles a hit @@ -704,6 +752,10 @@ void CPlayer::HandleHit(CPlayer *opponen opponent->SetAttacker( this ); + SetSprPrio( myGetHitVar.p1SprPrio + 5 ); + opponent->SetSprPrio( myGetHitVar.p2SprPrio + 5 ); + + if(myGetHitVar.groundtype == 3 ) opponent->ChangeStateNextFrame(5070); @@ -763,9 +815,13 @@ void CPlayer::HandleHit(CPlayer *opponen mugen->GetEngine()->AddObject( explod ); + //add target to list AddTargetToList( opponent ); + if( myGetHitVar.bHitOnce ) + ResetHitDef(); + /*bHitDef=false; */ bHitTarget = true; @@ -936,7 +992,7 @@ void CPlayer::HandlePushBehavior(CPlayer or we high enough to jump over the player TODO:Handle air push */ - if(nBodyDistanceX <= 0 && ( opponent->GetPosY() == GetPosY()) && nBodyDistanceX > -20 && + if(nBodyDistanceX <= 0 && ( opponent->GetPosY() == GetPosY()) && nBodyDistanceX > -30 && ( GetRightFaced() != opponent->GetRightFaced() ) && bPlayerPush ) { opponent->PushPlayer(nBodyDistanceX); @@ -953,7 +1009,7 @@ In teammode this should only check for n */ void CPlayer::HandleTurn(CPlayer *opponent) { - if( GetMoveType() != idle ) + if( GetMoveType() != idle || !bAutoTurn) return; //This is for turning if( (nDistanceX < 0) && GetPosY() == 0 /* && (nCurrStateNumber == 0)*/ && @@ -1213,6 +1269,7 @@ void CPlayer::ResetFlags() y_offset = 0; x_scale = ConstData.Size.xScale; y_scale = ConstData.Size.yScale; + nPower = 3000; } // debug info of the player @@ -1316,7 +1373,7 @@ void CPlayer::ResetPlayer() //he is alive again bAlive=true; bCtrl=true; - nLife=ConstData.Data.nLife; + nLife=1;//ConstData.Data.nLife; nFront=ConstData.Size.nGroundFront; nBack=ConstData.Size.nGroundBack; bChangeState=false; @@ -1352,7 +1409,7 @@ void CPlayer::ResetPlayer() - ChangeState(0); + ChangeState(191); } Index: player.h =================================================================== RCS file: /cvsroot/openmugen/OpenMugen/src/player.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- player.h 6 Sep 2005 20:46:04 -0000 1.3 +++ player.h 12 Sep 2005 20:04:17 -0000 1.4 @@ -219,6 +219,12 @@ struct HitVar float cornerpush_veloff; float down_cornerpush_veloff; float air_corerpush_velloff; + int hit_prior; + int hit_type; + int p1SprPrio; + int p2SprPrio; + bool bHitOnce; + bool bKill; }; @@ -466,6 +472,9 @@ enum HitPrior void FaceRight(); void SetCtrl(bool ctrl); void SetHitDef(); + void ResetHitDef() {bHitDef = false;} + int GetHitPriority() { return myGetHitVar.hit_prior;} + int GetHitClass() { return myGetHitVar.hit_type ;} bool IsHitDef(); void SetHitVar(HitVar hitvar); void SetInHitVar(HitVar hitvar); @@ -477,6 +486,7 @@ enum HitPrior void SetGroundValue(float yLimit); float GetGroundValue(); void PushPlayer(float nPushValue); + void DisableTurn() {bAutoTurn =false;} void SetHitBySlot(u8 *type,u8 *attr,int nTime, int slot); void SetNotHitBySlot(u8 *type,u8 *attr,int nTime, int slot); @@ -487,6 +497,7 @@ enum HitPrior u32 GetCurrentAnimTime(); u32 GetDuringTime(); // void EnterHitPause( int nPauseTime ) { nHitPauseTime = nPauseTime; bHitPause = true; m_pSffManager->SetPause( true ); } + void SetSprPrio(u8 nPrio) { nSprPrio = nPrio; } //Player Controllers void ChangeState(s32 nSateNumber,CStateManager *pOtherStateDef = 0); @@ -568,7 +579,7 @@ enum HitPrior void SetDefenceValue( float value ) { fDefence = value;} void SetAttackValue( float value ) {fAttackPower = value;} void MoveHitReset() {nMoveContact = nMoveHit = nMoveGuarded = 0; } - void HitFallDamage() { LifeAdd( -(s16)(InHitVar.fall_damage / fDefence) );} + void HitFallDamage(); void fVarRangeSet( float value , int start, int end ); void iVarRangeSet( float value, int start, int end ); void SetAngle( float angle ) { fAngle = angle;} |