void CultistAI::AI_STATE_AttackFar() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: MC_BestWeapon(); break; case 3: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.75) || m_nCurMetacmd == MC_FIRE_STAND || fHeight > m_vDims.y) { MC_Fire_Stand(); } else Metacmd++; break; case 4: if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.75)) { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y && m_nCurMetacmd != MC_FIRE_STAND ) { if(m_nInjuredLeg) MC_Walk(); else MC_Fire_Run(); } else { MC_Fire_Stand(); } } else Metacmd++; break; case 5: ComputeState(); break; } return; }
void UndeadGideon::AI_STATE_AttackFar() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL && m_nCurMetacmd != MC_FIRE_STAND && m_nCurMetacmd != MC_JUMP) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.75) || m_nCurMetacmd == MC_FIRE_STAND || (bAbove && fHeight > m_vDims.y)) { MC_Fire_Stand(); } else { if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.20)) ComputeState(); else MC_Walk(); } break; case 2: if((m_fStimuli[SIGHT] < (m_fSeeingDist * 0.20)) && m_nCurMetacmd != MC_JUMP || (bAbove && fHeight > m_vDims.y)) { ComputeState(); } else if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.30) || m_nCurMetacmd == MC_JUMP || IsLedge(m_MoveObj.GetForwardVector())) { MC_Jump(); } else MC_Walk(); break; case 3: ComputeState(); break; } return; }
void Prophet::AI_STATE_Escape_RunAway() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL && m_nCurMetacmd != MC_FIRE_STAND) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } switch(Metacmd) { case 1: MC_FaceTarget(); m_InventoryMgr.ChangeWeapon(WEAP_MELEE); break; case 2: m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); if(m_fStimuli[SIGHT] <= 75.0f) MC_Fire_Stand(); else { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y) { MC_Run(); } else { MC_Idle(); } } break; case 3: ComputeState(); break; } return; }
void BugAI::AI_STATE_Escape_RunAway() { //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { SetNewState(STATE_Idle); return; } switch(Metacmd) { case 1: char szSound[256]; _mbscpy((unsigned char*)szSound, (const unsigned char*)SOUND_FEAR); m_pAnim_Sound->GetSoundPath(szSound,m_pServerDE->IntRandom(1,NUM_BUG_FEAR)); PlayAISound(szSound, 1000.0f); Metacmd++; break; case 2: MC_FaceTarget(); break; case 3: m_fRadsLeft = 3.14f; Metacmd++; break; case 4: MC_Turn(); break; case 5: MC_Run(); break; case 6: ComputeState(); break; } return; }
void CultistAI::AI_STATE_Dodge() { switch(Metacmd) { case 1: m_nDodgeFlags = CalculateDodge(m_vTrackObjPos); Metacmd++; break; case 2: if(m_nDodgeFlags & ROLL) { if(m_nDodgeFlags & RIGHT) MC_Roll_Right(); else if(m_nDodgeFlags & LEFT) MC_Roll_Left(); else Metacmd++; } else { Metacmd++; } break; case 3: ComputeState(); break; } return; }
void BugAI::AI_STATE_Idle() { if(ComputeStimuli()) { ComputeState(); m_pServerDE->SetNextUpdate(m_hObject,0.1f); return; } else m_pServerDE->SetNextUpdate(m_hObject,0.2f); switch(Metacmd) { case 1: char szSound[256]; _mbscpy((unsigned char*)szSound, (const unsigned char*)SOUND_IDLE); m_pAnim_Sound->GetSoundPath(szSound,m_pServerDE->IntRandom(1,NUM_BUG_IDLE)); PlayAISound(szSound, 1000.0f); Metacmd++; break; case 2: MC_Idle(); break; case 3: m_fRadsLeft = m_pServerDE->Random(-1.56f,1.56f); Metacmd++; break; case 4: MC_Turn(); break; case 5: MC_Run(); break; case 6: SetNewState(STATE_Idle); break; } return; }
void OpheliaREV::AI_STATE_Dodge() { switch(Metacmd) { case 1: m_nDodgeFlags = CalculateDodge(m_vTrackObjPos); Metacmd++; break; case 2: if(m_nDodgeFlags & ROLL) { if(m_nDodgeFlags & RIGHT) MC_Roll_Right(); else if(m_nDodgeFlags & LEFT) MC_Roll_Left(); else if(m_nDodgeFlags & FORWARD) MC_Roll_Forward(); else MC_Roll_Backward(); } else { if(m_nDodgeFlags & RIGHT) MC_Dodge_Right(); else if(m_nDodgeFlags & LEFT) MC_Dodge_Left(); else Metacmd++; } break; case 3: ComputeState(); break; } return; }
void GremlinAI::AI_STATE_GuardLocation() { int nStimType = ComputeStimuli(); MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: if(nStimType != STIM_SMELL && nStimType > 0) Metacmd++; break; case 2: MC_Taunt_Bold(); break; case 3: if(m_fStimuli[SIGHT] <= m_fSeeingDist || m_nCurMetacmd == MC_FIRE_STAND) { MC_Fire_Stand(); } else Metacmd++; break; case 4: if(m_fStimuli[HEALTH] <= 0.50f) ComputeState(); else Metacmd = 1; break; } return; }
void DeathShroud::AI_STATE_AttackFar() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL && m_nCurMetacmd != MC_FIRE_STAND) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: MC_Fade(DFALSE); break; case 2: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.66) || m_nCurMetacmd == MC_FIRE_STAND || fHeight > m_vDims.y) { MC_Fire_Stand(); } else { Metacmd++; } break; case 3: MC_Fade(DTRUE); break; case 4: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.33) || fHeight > m_vDims.y) Metacmd++; else MC_Walk(); break; case 5: ComputeState(); break; } return; }
void CivilianAI::AI_STATE_Special8() { switch(Metacmd) { case 1: MC_Special(8); break; case 2: ComputeState(); break; } return; }
void CivilianAI::AI_STATE_Escape_Hide() { if(m_hTarget == DNULL) { ComputeState(); return; } MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: MC_Taunt_Beg(); break; case 2: ComputeState(); break; } return; }
void CivilianAI::AI_STATE_Special6() { switch(Metacmd) { case 1: MC_Special(m_pServerDE->IntRandom(5,6)); break; case 2: ComputeState(); break; } return; }
void GremlinAI::AI_STATE_AttackClose() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); MC_FaceTarget(); Metacmd--; DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: if(m_fStimuli[SIGHT] <= 75.0f || m_nCurMetacmd == MC_FIRE_STAND || (bAbove && fHeight > m_vDims.y)) { MC_Fire_Stand(); } else { if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.33)) ComputeState(); else MC_Run(); } break; case 3: ComputeState(); break; } return; }
void MadScientistAI::AI_STATE_Idle() { int nStimType = ComputeStimuli(); if(nStimType > 0) { m_pServerDE->SetNextUpdate(m_hObject, 0.001f); ComputeState(nStimType); return; } m_pServerDE->SetNextUpdate(m_hObject, 0.1f); switch(Metacmd) { case 1: MC_Idle(); break; case 2: ComputeState(); break; } return; }
void MediaStreamTrack::Init(webrtc::MediaStreamTrackInterface & inner_track, bool remote) { inner_track_ = rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>(&inner_track); change_emitter_ = std::make_shared<decltype(change_emitter_)::element_type>(); inner_observer_ = std::make_shared<ChangeObserver>(*this); inner_track_->RegisterObserver(inner_observer_.get()); id_ = GetRandomString(20); enabled_ = inner_track_->enabled(); remote_ = remote; ready_state_ = ComputeState(inner_track_->state()); }
void CivilianAI::AI_STATE_Special1() { MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: MC_Talk(); break; case 2: ComputeState(); break; } return; }
void GremlinAI::AI_STATE_Special1() { if(m_damage.GetLastDamager()) { ComputeState(); return; } m_pServerDE->SetNextUpdate(m_hObject, 0.1f); switch(Metacmd) { case 1: MC_Special(0); break; case 2: Metacmd = 1; break; } return; }
void Naga::AI_STATE_AttackFar() { //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL && m_nCurMetacmd != MC_FIRE_STAND) { SetNewState(STATE_SearchVisualTarget); return; } switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: MC_Fire_Stand(); break; case 3: ComputeState(); break; } return; }
void CivilianAI::AI_STATE_Escape_RunAway() { DVector vDims; m_pServerDE->GetObjectDims(m_hObject,&vDims); DFLOAT fDim = (DFLOAT)sqrt((vDims.x * vDims.x) + (vDims.z * vDims.z)) + 0.1f; switch(Metacmd) { case 1: { m_hTrackObject = FindObjectInRadius(m_pServerDE->GetClass("ExitHint"), m_fSeeingDist, FIND_VISIBLE); if(m_hTrackObject) { m_pServerDE->GetObjectPos(m_hTrackObject,&m_vTrackObjPos); DFLOAT fDist = VEC_DIST(m_vTrackObjPos, m_MoveObj.GetPos()); if(fDist <= fDim/2) { SetNewState(STATE_Escape_Hide); break; } MC_FacePos(m_vTrackObjPos); DRotation rRot; DVector vU, vR, vF, vMyF; m_pServerDE->GetObjectRotation(m_hTrackObject, &rRot); m_pServerDE->GetRotationVectors(&rRot, &vU, &vR, &vF); VEC_COPY(vMyF, m_MoveObj.GetForwardVector()); DFLOAT fHintDp = (vMyF.x * vF.x) + (vMyF.y * vF.y) + (vMyF.z * vF.z); if(fHintDp > 0) { if(!m_MoveObj.CalculatePath(m_vTrackObjPos)) SetNewState(STATE_Escape_Hide); } else SetNewState(STATE_Escape_Hide); } else SetNewState(STATE_Escape_Hide); break; } case 2: { DVector* pvPos = m_MoveObj.GetNextPathPoint(); if(pvPos) MC_FacePos(*pvPos); else SetNewState(STATE_Escape_RunAway); break; } case 3: { DVector vPoint = *m_MoveObj.GetNextPathPoint(); vPoint.y = m_MoveObj.GetPos().y; if(VEC_DIST(vPoint, m_MoveObj.GetPos()) <= fDim/2) { if(!m_MoveObj.MoveToNextPathPoint()) { MC_FacePos(m_vTargetPos); } else { Metacmd = 2; } } else MC_Run(); break; } case 4: ComputeState(); break; } return; }
void GremlinAI::AI_STATE_AttackFar() { //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { ComputeState(); return; } DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: { if (m_nCurMetacmd != MC_TAUNT_BOLD) { if (IsRandomChance(40)) { MC_Taunt_Bold(); Metacmd--; } else Metacmd++; } else { if(m_pServerDE->GetModelPlaybackState(m_hObject) & MS_PLAYDONE) Metacmd++; } break; } case 2: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.75) || m_nCurMetacmd == MC_FIRE_STAND || (bAbove && fHeight > m_vDims.y)) { MC_Fire_Stand(); } else { if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.33)) ComputeState(); else MC_Walk(); } break; case 3: if((m_fStimuli[SIGHT] < (m_fSeeingDist * 0.33)) && m_nCurMetacmd != MC_JUMP) { ComputeState(); } else if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.4) || m_nCurMetacmd == MC_JUMP || IsLedge(m_MoveObj.GetForwardVector())) { MC_Jump(); } else Metacmd++; break; default: ComputeState(); break; } return; }
void OpheliaREV::AI_STATE_Escape_RunAway() { if(Metacmd > 1) { int nStimType = ComputeStimuli(); if(nStimType > 0) { ComputeState(nStimType); return; } } DFLOAT fDim = (DFLOAT)sqrt((m_vDims.x * m_vDims.x) + (m_vDims.z * m_vDims.z)) + 0.1f; switch(Metacmd) { case 1: m_hTrackObject = FindObjectInRadius(m_pServerDE->GetClass("ExitHint"), m_fSeeingDist, FIND_VISIBLE | FIND_AVOID_TARGET); if(m_hTrackObject) { m_pServerDE->GetObjectPos(m_hTrackObject,&m_vTrackObjPos); MC_FacePos(m_vTrackObjPos); if(!m_MoveObj.CalculatePath(m_vTrackObjPos)) SetNewState(STATE_Idle); } else SetNewState(STATE_AttackFar); break; case 2: { DVector* pvPos = m_MoveObj.GetNextPathPoint(); if(pvPos) MC_FacePos(*pvPos); else SetNewState(STATE_Escape_RunAway); break; } case 3: { DVector vPoint = *m_MoveObj.GetNextPathPoint(); vPoint.y = m_MoveObj.GetPos().y; if(VEC_DIST(vPoint, m_MoveObj.GetPos()) <= fDim/2) { if(!m_MoveObj.MoveToNextPathPoint()) { MC_FacePos(m_vTargetPos); } else { Metacmd = 2; } } else MC_Run(); break; } case 4: ComputeState(); break; } return;}
void OpheliaREV::AI_STATE_AttackFar() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; CWeapon* pW = m_InventoryMgr.GetCurrentWeapon(); if(pW == DNULL) { SetNewState(STATE_Idle); return; } switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: MC_BestWeapon(); break; case 3: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.75) || m_nCurMetacmd == MC_FIRE_STAND || m_nCurMetacmd == MC_FIRE_CROUCH || fHeight > m_vDims.y) { if((fHeight > m_vDims.y && !bAbove) || m_nCurMetacmd == MC_FIRE_CROUCH || m_fStimuli[HEALTH] < 0.5f || pW->GetType() == WEAP_SNIPERRIFLE) { MC_Fire_Crouch(); } else { MC_Fire_Stand(); } } else Metacmd++; break; case 4: if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.75)) { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y && m_nCurMetacmd != MC_FIRE_CROUCH && pW->GetType() != WEAP_SNIPERRIFLE) { if(m_nInjuredLeg) MC_Walk(); else MC_Fire_Run(); } else { MC_Fire_Crouch(); } } else Metacmd++; break; case 5: ComputeState(); break; } return; }
// slightly ugly, but efficient intersection algorithm bool LLRegion::NoIntersection(const LLBBox& box) const { return false; // there are occasional false positives we must fix first #if 0 double minx = box.GetMinLon(), maxx = box.GetMaxLon(), miny = box.GetMinLat(), maxy = box.GetMaxLat(); if(Contains(miny, minx)) return false; // test if any segment crosses the box for(std::list<poly_contour>::const_iterator i = contours.begin(); i != contours.end(); i++) { contour_pt l = *i->rbegin(); int state = ComputeState(box, l), lstate = state; if(state == 4) return false; for(poly_contour::const_iterator j = i->begin(); j != i->end(); j++) { contour_pt p = *j; int quadrant = p.x > l.x ? 1 : 0; if(p.y > l.y) quadrant += 2; switch(state*4 + quadrant) { case 0: goto skip; case 1: if(p.x >= minx) state = p.x > maxx ? 2 : 1; goto skip; case 2: if(p.y >= miny) state = p.y > maxy ? 6 : 3; goto skip; case 4: if(p.x < minx) state = 0; goto skip; case 5: if(p.x > maxx) state = 2; goto skip; case 8: if(p.x <= maxx) state = p.x < minx ? 0 : 1; goto skip; case 9: goto skip; case 11: if(p.y >= miny) state = p.y > maxy ? 8 : 5; goto skip; case 12: if(p.y < miny) state = 0; goto skip; case 14: if(p.y > maxy) state = 6; goto skip; case 21: if(p.y < miny) state = 2; goto skip; case 23: if(p.y > maxy) state = 8; goto skip; case 24: if(p.y <= maxy) state = p.y < miny ? 0 : 3; goto skip; case 26: goto skip; case 27: if(p.x >= minx) state = p.x > maxx ? 8 : 7; goto skip; case 30: if(p.x < minx) state = 6; goto skip; case 31: if(p.x > maxx) state = 8; goto skip; case 33: if(p.y <= maxy) state = p.y < miny ? 2 : 5; goto skip; case 34: if(p.x <= maxx) state = p.x < minx ? 6 : 7; goto skip; case 35: goto skip; } state = ComputeState(box, *j); if(state == 4) return false; switch(lstate) { #define TEST_CASE(NO_INT, CASEA, CASEB, CASEAB, AX, AY, BX, BY) \ switch(state) { NO_INT break; \ CASEAB if(TestPoint(l, p, BX##x, BY##y)) return false; \ CASEA if(TestPoint(p, l, AX##x, AY##y)) return false; break; \ CASEB if(TestPoint(l, p, BX##x, BY##y)) return false; break; \ default: printf("invalid state inner %d %d\n", lstate, state); } break; case 0: TEST_CASE(case 0: case 1: case 2: case 3: case 6:, case 5:, case 7:, case 8:, max, min, min, max) case 1: TEST_CASE(case 0: case 1: case 2:, case 5: case 8:, case 3: case 6:, case 7:, max, min, min, min) case 2: TEST_CASE(case 0: case 1: case 2: case 5: case 8:, case 7:, case 3:, case 6:, max, max, min, min) case 3: TEST_CASE(case 0: case 3: case 6:, case 1: case 2:, case 7: case 8:, case 5:, min, min, min, max) // case 4: return false; // should never hit case 5: TEST_CASE(case 2: case 5: case 8:, case 6: case 7:, case 0: case 1:, case 3:, max, max, max, min) case 6: TEST_CASE(case 0: case 3: case 6: case 7: case 8:, case 1:, case 5:, case 2:, min, min, max, max) case 7: TEST_CASE(case 6: case 7: case 8:, case 0: case 3:, case 2: case 5:, case 1:, min, max, max, max) case 8: TEST_CASE(case 2: case 5: case 6: case 7: case 8:, case 3:, case 1:, case 0:, min, max, max, min) default: printf("invalid state\n"); } skip: lstate = state; l = p; } } return true; #endif }
void Prophet::AI_STATE_AttackClose() { DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { if(fHeight <= m_vDims.y) SetNewState(STATE_SearchVisualTarget); else ComputeState(); return; } m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; switch(Metacmd) { case 1: MC_FaceTarget(); break; case 2: MC_BestWeapon(); break; case 3: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.33) || m_nCurMetacmd == MC_FIRE_STAND || m_nCurMetacmd == MC_FIRE_CROUCH) { if(m_nDodgeFlags & FORWARD || m_nDodgeFlags & BACKWARD || m_fStimuli[HEALTH] < 0.5f || m_nCurMetacmd == MC_FIRE_CROUCH || (fHeight > m_vDims.y && !bAbove)) { MC_Fire_Crouch(); } else { MC_Fire_Stand(); } } else Metacmd++; break; case 4: if(m_fStimuli[SIGHT] > (m_fSeeingDist * 0.33) && m_fStimuli[SIGHT] < (m_fSeeingDist * 0.5)) { MC_FaceTarget(); Metacmd--; if(!IsLedge(m_MoveObj.GetForwardVector()) && fHeight <= m_vDims.y && m_nCurMetacmd != MC_FIRE_CROUCH) { if(m_nInjuredLeg) MC_Walk(); else { if(m_nDodgeFlags & FORWARD || m_nDodgeFlags & BACKWARD || m_fStimuli[HEALTH] < 0.5f) MC_Fire_Crawl(); else MC_Fire_Run(); } } else { MC_Fire_Crouch(); } } else Metacmd++; break; case 5: ComputeState(); break; } return; }