diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp index 17af5c26d..618f50663 100644 --- a/src/p_enemy.cpp +++ b/src/p_enemy.cpp @@ -2803,7 +2803,7 @@ void A_Face (AActor *self, AActor *other, angle_t max_turn, angle_t max_pitch, a target_z = other->z + (other->height / 2) + other->GetBobOffset(); if (flags & FAF_TOP) target_z = other->z + (other->height) + other->GetBobOffset(); - if (!flags & FAF_NODISTFACTOR) + if (!(flags & FAF_NODISTFACTOR)) target_z += pitch_offset; double dist_z = target_z - source_z; diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 9db52f728..fc157c92b 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -1850,30 +1850,31 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_TakeFromSiblings) enum SIX_Flags { - SIXF_TRANSFERTRANSLATION = 1 << 0, - SIXF_ABSOLUTEPOSITION = 1 << 1, - SIXF_ABSOLUTEANGLE = 1 << 2, - SIXF_ABSOLUTEVELOCITY = 1 << 3, - SIXF_SETMASTER = 1 << 4, - SIXF_NOCHECKPOSITION = 1 << 5, - SIXF_TELEFRAG = 1 << 6, - SIXF_CLIENTSIDE = 1 << 7, // only used by Skulldronum - SIXF_TRANSFERAMBUSHFLAG = 1 << 8, - SIXF_TRANSFERPITCH = 1 << 9, - SIXF_TRANSFERPOINTERS = 1 << 10, - SIXF_USEBLOODCOLOR = 1 << 11, - SIXF_CLEARCALLERTID = 1 << 12, - SIXF_MULTIPLYSPEED = 1 << 13, - SIXF_TRANSFERSCALE = 1 << 14, - SIXF_TRANSFERSPECIAL = 1 << 15, - SIXF_CLEARCALLERSPECIAL = 1 << 16, - SIXF_TRANSFERSTENCILCOL = 1 << 17, - SIXF_TRANSFERALPHA = 1 << 18, - SIXF_TRANSFERRENDERSTYLE = 1 << 19, - SIXF_SETTARGET = 1 << 20, - SIXF_SETTRACER = 1 << 21, - SIXF_NOPOINTERS = 1 << 22, - SIXF_ORIGINATOR = 1 << 23, + SIXF_TRANSFERTRANSLATION = 0x00000001, + SIXF_ABSOLUTEPOSITION = 0x00000002, + SIXF_ABSOLUTEANGLE = 0x00000004, + SIXF_ABSOLUTEVELOCITY = 0x00000008, + SIXF_SETMASTER = 0x00000010, + SIXF_NOCHECKPOSITION = 0x00000020, + SIXF_TELEFRAG = 0x00000040, + SIXF_CLIENTSIDE = 0x00000080, // only used by Skulldronum + SIXF_TRANSFERAMBUSHFLAG = 0x00000100, + SIXF_TRANSFERPITCH = 0x00000200, + SIXF_TRANSFERPOINTERS = 0x00000400, + SIXF_USEBLOODCOLOR = 0x00000800, + SIXF_CLEARCALLERTID = 0x00001000, + SIXF_MULTIPLYSPEED = 0x00002000, + SIXF_TRANSFERSCALE = 0x00004000, + SIXF_TRANSFERSPECIAL = 0x00008000, + SIXF_CLEARCALLERSPECIAL = 0x00010000, + SIXF_TRANSFERSTENCILCOL = 0x00020000, + SIXF_TRANSFERALPHA = 0x00040000, + SIXF_TRANSFERRENDERSTYLE = 0x00080000, + SIXF_SETTARGET = 0x00100000, + SIXF_SETTRACER = 0x00200000, + SIXF_NOPOINTERS = 0x00400000, + SIXF_ORIGINATOR = 0x00800000, + SIXF_TRANSFERSPRITEFRAME = 0x01000000, }; static bool InitSpawnedItem(AActor *self, AActor *mo, int flags) @@ -2019,6 +2020,12 @@ static bool InitSpawnedItem(AActor *self, AActor *mo, int flags) { mo->RenderStyle = self->RenderStyle; } + + if (flags & SIXF_TRANSFERSPRITEFRAME) + { + mo->sprite = self->sprite; + mo->frame = self->frame; + } return true; } diff --git a/wadsrc/static/actors/constants.txt b/wadsrc/static/actors/constants.txt index b4bb4c532..27f2d78d8 100644 --- a/wadsrc/static/actors/constants.txt +++ b/wadsrc/static/actors/constants.txt @@ -72,6 +72,7 @@ const int SXF_SETTARGET = 1 << 20; const int SXF_SETTRACER = 1 << 21; const int SXF_NOPOINTERS = 1 << 22; const int SXF_ORIGINATOR = 1 << 23; +const int SIXF_TRANSFERSPRITEFRAME = 1 << 24; // Flags for A_Chase const int CHF_FASTCHASE = 1;