mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-25 18:21:47 +00:00
- added the action, move and ai properties.
This commit is contained in:
parent
947d427a9d
commit
c418356420
2 changed files with 112 additions and 19 deletions
|
@ -45,9 +45,6 @@
|
|||
#include "texturemanager.h"
|
||||
#include "coreactor.h"
|
||||
#include "thingdef.h"
|
||||
#include "games/duke/src/duke3d.h"
|
||||
|
||||
using Duke3d::DDukeActor;
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
@ -379,19 +376,3 @@ DEFINE_PROPERTY(spritesetindex, I, CoreActor)
|
|||
PROP_INT_PARM(i, 0);
|
||||
defaults->spritesetindex = i;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Sets up the flag defaults which differ between RR and Duke.
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(lookallarounddefault,0, DukeActor)
|
||||
{
|
||||
if (!isRR()) defaults->flags1 |= SFLAG_LOOKALLAROUND; // feature comes from RR, but we want the option in Duke as well, so this fake property sets the default
|
||||
else
|
||||
{
|
||||
defaults->flags1 |= SFLAG_MOVEFTA_WAKEUPCHECK; // Animals were not supposed to have this, but due to a coding bug the logic was unconditional for everything in the game.
|
||||
defaults->flags2 |= SFLAG2_NODAMAGEPUSH; // RR does not have this feature, so set the flag for everything, this allows disabling it if wanted later.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -646,6 +646,117 @@ PClassActor* CallGetRadiusDamageType(DDukeActor* actor, int targhealth)
|
|||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Sets up the flag defaults which differ between RR and Duke.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
DEFINE_PROPERTY(lookallarounddefault, 0, DukeActor)
|
||||
{
|
||||
if (!isRR()) defaults->flags1 |= SFLAG_LOOKALLAROUND; // feature comes from RR, but we want the option in Duke as well, so this fake property sets the default
|
||||
else
|
||||
{
|
||||
defaults->flags1 |= SFLAG_MOVEFTA_WAKEUPCHECK; // Animals were not supposed to have this, but due to a coding bug the logic was unconditional for everything in the game.
|
||||
defaults->flags2 |= SFLAG2_NODAMAGEPUSH; // RR does not have this feature, so set the flag for everything, this allows disabling it if wanted later.
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// The 3 major CPN related properties - moves, actions, ais.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
DEFINE_PROPERTY(move, Sii, DukeActor)
|
||||
{
|
||||
auto move = &moves[moves.Reserve(1)];
|
||||
move->movex = move->movez = 0;
|
||||
PROP_STRING_PARM(n, 0);
|
||||
move->name = n;
|
||||
move->qualifiedName = FStringf("%s.%s", info->TypeName.GetChars(), n);
|
||||
if (PROP_PARM_COUNT > 1)
|
||||
{
|
||||
PROP_INT_PARM(v, 1);
|
||||
move->movex = v / 16.f;
|
||||
if (PROP_PARM_COUNT > 2)
|
||||
{
|
||||
PROP_INT_PARM(v2, 2);
|
||||
move->movex = v2 / 16.f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_PROPERTY(movef, Sff, DukeActor)
|
||||
{
|
||||
auto move = &moves[moves.Reserve(1)];
|
||||
move->movex = move->movez = 0;
|
||||
PROP_STRING_PARM(n, 0);
|
||||
move->name = n;
|
||||
move->qualifiedName = FStringf("%s.%s", info->TypeName.GetChars(), n);
|
||||
if (PROP_PARM_COUNT > 1)
|
||||
{
|
||||
PROP_FLOAT_PARM(v, 1);
|
||||
move->movex = v;
|
||||
if (PROP_PARM_COUNT > 2)
|
||||
{
|
||||
PROP_FLOAT_PARM(v2, 2);
|
||||
move->movex = v2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_PROPERTY(action, SZIiiii, DukeActor)
|
||||
{
|
||||
auto action = &actions[actions.Reserve(1)];
|
||||
memset(&action, 0, sizeof(action));
|
||||
PROP_STRING_PARM(n, 0);
|
||||
action->name = n;
|
||||
action->qualifiedName = FStringf("%s.%s", info->TypeName.GetChars(), n);
|
||||
PROP_STRING_PARM(b, 1);
|
||||
action->base = b == nullptr ? FNullTextureID() : TexMan.CheckForTexture(b, ETextureType::Any, FTextureManager::TEXMAN_ReturnAll | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ForceLookup);
|
||||
PROP_INT_PARM(v2, 2);
|
||||
action->offset = v2;
|
||||
|
||||
if (PROP_PARM_COUNT > 3)
|
||||
{
|
||||
PROP_INT_PARM(v3, 3);
|
||||
action->numframes = v3;
|
||||
if (PROP_PARM_COUNT > 4)
|
||||
{
|
||||
PROP_INT_PARM(v4, 4);
|
||||
action->rotationtype = v4;
|
||||
if (PROP_PARM_COUNT > 5)
|
||||
{
|
||||
PROP_INT_PARM(v5, 5);
|
||||
action->increment = v5;
|
||||
if (PROP_PARM_COUNT > 6)
|
||||
{
|
||||
PROP_INT_PARM(v6, 6);
|
||||
action->delay = v6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_PROPERTY(ai, SSSi, DukeActor)
|
||||
{
|
||||
auto ai = &ais[ais.Reserve(1)];
|
||||
ai->moveflags = 0;
|
||||
PROP_STRING_PARM(n, 0);
|
||||
ai->name = n;
|
||||
PROP_STRING_PARM(a, 1);
|
||||
ai->action = FName(a).GetIndex() | 0x80000000; // don't look it up yet.
|
||||
PROP_STRING_PARM(m, 2);
|
||||
ai->action = FName(m).GetIndex() | 0x80000000; // don't look it up yet.
|
||||
if (PROP_PARM_COUNT > 3)
|
||||
{
|
||||
PROP_INT_PARM(v3, 3);
|
||||
ai->moveflags = v3;
|
||||
}
|
||||
}
|
||||
|
||||
CCMD(changewalltexture)
|
||||
{
|
||||
if (argv.argc() < 2) return;
|
||||
|
@ -660,4 +771,5 @@ CCMD(changewalltexture)
|
|||
}
|
||||
|
||||
|
||||
|
||||
END_DUKE_NS
|
||||
|
|
Loading…
Reference in a new issue