mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-25 13:31:37 +00:00
Fix for Morph virtual
Allows class<MorphedMonster> to be used as an argument type in place of class<Actor> within the third argument for backwards compatibility.
This commit is contained in:
parent
5ed4f477ed
commit
06eee55671
3 changed files with 17 additions and 1 deletions
|
@ -667,6 +667,8 @@ PClass *PClass::FindClassTentative(FName name)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
|
bool ShouldAllowGameSpecificVirtual(FName name, unsigned index, PType* arg, PType* varg);
|
||||||
|
|
||||||
int PClass::FindVirtualIndex(FName name, PFunction::Variant *variant, PFunction *parentfunc, bool exactReturnType, bool ignorePointerReadOnly)
|
int PClass::FindVirtualIndex(FName name, PFunction::Variant *variant, PFunction *parentfunc, bool exactReturnType, bool ignorePointerReadOnly)
|
||||||
{
|
{
|
||||||
auto proto = variant->Proto;
|
auto proto = variant->Proto;
|
||||||
|
@ -698,7 +700,7 @@ int PClass::FindVirtualIndex(FName name, PFunction::Variant *variant, PFunction
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(!ShouldAllowGameSpecificVirtual(name, a, proto->ArgumentTypes[a], vproto->ArgumentTypes[a]))
|
||||||
{
|
{
|
||||||
fail = true;
|
fail = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -462,6 +462,7 @@ xx(WBobSpeed)
|
||||||
xx(WBobFire)
|
xx(WBobFire)
|
||||||
xx(PlayerClass)
|
xx(PlayerClass)
|
||||||
xx(MonsterClass)
|
xx(MonsterClass)
|
||||||
|
xx(Morph)
|
||||||
xx(MorphedMonster)
|
xx(MorphedMonster)
|
||||||
xx(Wi_NoAutostartMap)
|
xx(Wi_NoAutostartMap)
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,19 @@ PFunction* FindBuiltinFunction(FName funcname);
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
|
bool ShouldAllowGameSpecificVirtual(FName name, unsigned index, PType* arg, PType* varg)
|
||||||
|
{
|
||||||
|
return (name == NAME_Morph && index == 3u && arg->isClassPointer() && varg->isClassPointer()
|
||||||
|
&& PType::toClassPointer(varg)->ClassRestriction->TypeName == NAME_Actor
|
||||||
|
&& PType::toClassPointer(arg)->ClassRestriction->TypeName == NAME_MorphedMonster);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
bool isActor(PContainerType *type)
|
bool isActor(PContainerType *type)
|
||||||
{
|
{
|
||||||
auto cls = PType::toClass(type);
|
auto cls = PType::toClass(type);
|
||||||
|
|
Loading…
Reference in a new issue