mirror of https://github.com/AxioDL/metaforce.git
CMagdolite: Fix lock-on, retreat & loader
This commit is contained in:
parent
b4dad2adf5
commit
449d8409d8
|
@ -76,14 +76,16 @@ void CMagdolite::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CState
|
||||||
case EScriptObjectMessage::Damage:
|
case EScriptObjectMessage::Damage:
|
||||||
case EScriptObjectMessage::InvulnDamage:
|
case EScriptObjectMessage::InvulnDamage:
|
||||||
if (TCastToConstPtr<CGameProjectile> proj = mgr.GetObjectById(uid)) {
|
if (TCastToConstPtr<CGameProjectile> proj = mgr.GetObjectById(uid)) {
|
||||||
if (proj->GetOwnerId() == mgr.GetPlayer().GetUniqueId() &&
|
if (proj->GetOwnerId() == mgr.GetPlayer().GetUniqueId()) {
|
||||||
(GetBodyController()->GetPercentageFrozen() <= 0.f ||
|
if (GetBodyController()->GetPercentageFrozen() <= 0.f ||
|
||||||
x5bc_.GetVulnerability(proj->GetDamageInfo().GetWeaponMode(), false) == EVulnerability::Deflect)) {
|
x5bc_.GetVulnerability(proj->GetDamageInfo().GetWeaponMode(), false) == EVulnerability::Deflect) {
|
||||||
if (x70c_curHealth - HealthInfo(mgr)->GetHP() <= x574_minHp &&
|
float hp = HealthInfo(mgr)->GetHP();
|
||||||
x624_.GetVulnerability(proj->GetDamageInfo().GetWeaponMode(), false) != EVulnerability::Deflect) {
|
if (x70c_curHealth - hp <= x574_minHp) {
|
||||||
|
if (x624_.GetVulnerability(proj->GetDamageInfo().GetWeaponMode(), false) != EVulnerability::Deflect) {
|
||||||
x400_24_hitByPlayerProjectile = true;
|
x400_24_hitByPlayerProjectile = true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
x70c_curHealth = HealthInfo(mgr)->GetHP();
|
x70c_curHealth = hp;
|
||||||
x754_24_retreat = true;
|
x754_24_retreat = true;
|
||||||
}
|
}
|
||||||
} else if (x400_24_hitByPlayerProjectile) {
|
} else if (x400_24_hitByPlayerProjectile) {
|
||||||
|
@ -91,13 +93,13 @@ void CMagdolite::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CState
|
||||||
x401_30_pendingDeath = true;
|
x401_30_pendingDeath = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case EScriptObjectMessage::SuspendedMove: {
|
case EScriptObjectMessage::SuspendedMove:
|
||||||
if (x580_collisionManager) {
|
if (x580_collisionManager) {
|
||||||
x580_collisionManager->SetMovable(mgr, false);
|
x580_collisionManager->SetMovable(mgr, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case EScriptObjectMessage::Registered: {
|
case EScriptObjectMessage::Registered: {
|
||||||
x450_bodyController->Activate(mgr);
|
x450_bodyController->Activate(mgr);
|
||||||
RemoveMaterial(EMaterialTypes::Solid, mgr);
|
RemoveMaterial(EMaterialTypes::Solid, mgr);
|
||||||
|
@ -249,7 +251,7 @@ void CMagdolite::Think(float dt, CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
x580_collisionManager->Update(dt, mgr, CCollisionActorManager::EUpdateOptions::ObjectSpace);
|
x580_collisionManager->Update(dt, mgr, CCollisionActorManager::EUpdateOptions::ObjectSpace);
|
||||||
zeus::CTransform headXf = GetLocatorTransform("head"sv);
|
zeus::CTransform headXf = GetLocatorTransform("head"sv);
|
||||||
MoveCollisionPrimitive(headXf.rotate(GetModelData()->GetScale() * headXf.origin));
|
MoveCollisionPrimitive(GetTransform().rotate(GetModelData()->GetScale() * headXf.origin));
|
||||||
xe4_27_notInSortedLists = true;
|
xe4_27_notInSortedLists = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,6 @@ void CStateMachineState::Update(CStateManager& mgr, CAi& ai, float delta) {
|
||||||
if (x4_state) {
|
if (x4_state) {
|
||||||
x8_time += delta;
|
x8_time += delta;
|
||||||
x4_state->CallFunc(mgr, ai, EStateMsg::Update, delta);
|
x4_state->CallFunc(mgr, ai, EStateMsg::Update, delta);
|
||||||
fmt::print(FMT_STRING("Update: {} {} {} - {} {}\n"), ai.GetUniqueId(), ai.GetEditorId(), ai.GetName(),
|
|
||||||
x4_state->xc_name, int(x4_state - x0_machine->GetStateVector().data()));
|
|
||||||
for (int i = 0; i < x4_state->GetNumTriggers(); ++i) {
|
for (int i = 0; i < x4_state->GetNumTriggers(); ++i) {
|
||||||
CAiTrigger* trig = x4_state->GetTrig(i);
|
CAiTrigger* trig = x4_state->GetTrig(i);
|
||||||
CAiState* state = nullptr;
|
CAiState* state = nullptr;
|
||||||
|
|
|
@ -3032,7 +3032,7 @@ CEntity* ScriptLoader::LoadMagdolite(CStateManager& mgr, CInputStream& in, int p
|
||||||
|
|
||||||
return new MP1::CMagdolite(mgr.AllocateUniqueId(), actorHead.x0_name, info, actorHead.x10_transform,
|
return new MP1::CMagdolite(mgr.AllocateUniqueId(), actorHead.x0_name, info, actorHead.x10_transform,
|
||||||
std::move(modelData), pInfo, actorParameters, f1, f2, damageInfo1, damageInfo2,
|
std::move(modelData), pInfo, actorParameters, f1, f2, damageInfo1, damageInfo2,
|
||||||
damageVulnerability1, damageVulnerability2, modelId, skinId, f3, f4, f5, f6, flameInfo, f7,
|
damageVulnerability1, damageVulnerability2, modelId, skinId, f6, f3, f4, f5, flameInfo, f7,
|
||||||
f8, f9);
|
f8, f9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue