This commit is contained in:
Rachael Alexanderson 2017-01-27 19:17:24 -05:00
commit 00823217c7
4 changed files with 501 additions and 370 deletions

View File

@ -3535,9 +3535,9 @@ bool P_BounceActor(AActor *mo, AActor *BlockingMobj, bool ontop)
if (mo->bouncecount>0 && --mo->bouncecount == 0) if (mo->bouncecount>0 && --mo->bouncecount == 0)
{ {
if (mo->flags & MF_MISSILE) if (mo->flags & MF_MISSILE)
P_ExplodeMissile(mo, nullptr, nullptr); P_ExplodeMissile(mo, nullptr, BlockingMobj);
else else
mo->CallDie(nullptr, nullptr); mo->CallDie(BlockingMobj, nullptr);
return true; return true;
} }

View File

@ -1814,15 +1814,18 @@ void P_ExplodeMissile (AActor *mo, line_t *line, AActor *target)
mo->effects = 0; // [RH] mo->effects = 0; // [RH]
mo->flags &= ~MF_SHOOTABLE; mo->flags &= ~MF_SHOOTABLE;
FState *nextstate=NULL; FState *nextstate = nullptr;
if (target != NULL && ((target->flags & (MF_SHOOTABLE|MF_CORPSE)) || (target->flags6 & MF6_KILLED)) ) if (target != nullptr)
{ {
if (mo->flags7 & MF7_HITTARGET) mo->target = target; if (mo->flags7 & MF7_HITTARGET) mo->target = target;
if (mo->flags7 & MF7_HITMASTER) mo->master = target; if (mo->flags7 & MF7_HITMASTER) mo->master = target;
if (mo->flags7 & MF7_HITTRACER) mo->tracer = target; if (mo->flags7 & MF7_HITTRACER) mo->tracer = target;
if (target->flags & MF_NOBLOOD) nextstate = mo->FindState(NAME_Crash); if ((target->flags & (MF_SHOOTABLE | MF_CORPSE)) || (target->flags6 & MF6_KILLED))
if (nextstate == NULL) nextstate = mo->FindState(NAME_Death, NAME_Extreme); {
if (target->flags & MF_NOBLOOD) nextstate = mo->FindState(NAME_Crash);
if (nextstate == NULL) nextstate = mo->FindState(NAME_Death, NAME_Extreme);
}
} }
if (nextstate == NULL) nextstate = mo->FindState(NAME_Death); if (nextstate == NULL) nextstate = mo->FindState(NAME_Death);

View File

@ -8202,14 +8202,16 @@ FxExpression *FxVMFunctionCall::Resolve(FCompileContext& ctx)
{ {
// only cast implicit-string types for vararg, leave everything else as-is // only cast implicit-string types for vararg, leave everything else as-is
// this was outright copypasted from FxFormat // this was outright copypasted from FxFormat
ArgList[i] = ArgList[i]->Resolve(ctx); x = ArgList[i]->Resolve(ctx);
if (ArgList[i]->ValueType == TypeName || if (x)
ArgList[i]->ValueType == TypeSound)
{ {
x = new FxStringCast(ArgList[i]); if (x->ValueType == TypeName ||
x = x->Resolve(ctx); x->ValueType == TypeSound)
{
x = new FxStringCast(ArgList[i]);
x = x->Resolve(ctx);
}
} }
else x = ArgList[i];
} }
else if (!(flag & (VARF_Ref|VARF_Out))) else if (!(flag & (VARF_Ref|VARF_Out)))
{ {

File diff suppressed because it is too large Load Diff