mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-28 09:50:42 +00:00
- Blood: Add mechanism to be able to force QAV interpolation based on picnum for testing purposes and not for end-user usage.
This commit is contained in:
parent
2365be7c95
commit
276c000f9f
4 changed files with 23 additions and 17 deletions
|
@ -87,6 +87,7 @@ CVARD(Bool, cl_bloodvanillabobbing, true, CVAR_ARCHIVE, "enable/disable Blood's
|
||||||
CVARD(Bool, cl_bloodvanillaexplosions, false, CVAR_ARCHIVE, "enable/disable Blood's vanilla explosion behavior")
|
CVARD(Bool, cl_bloodvanillaexplosions, false, CVAR_ARCHIVE, "enable/disable Blood's vanilla explosion behavior")
|
||||||
CVARD(Bool, cl_bloodvanillaenemies, false, CVAR_ARCHIVE, "enable/disable Blood's vanilla enemy behavior")
|
CVARD(Bool, cl_bloodvanillaenemies, false, CVAR_ARCHIVE, "enable/disable Blood's vanilla enemy behavior")
|
||||||
CVARD(Bool, cl_bloodqavinterp, true, CVAR_ARCHIVE, "enable/disable Blood's QAV interpolation")
|
CVARD(Bool, cl_bloodqavinterp, true, CVAR_ARCHIVE, "enable/disable Blood's QAV interpolation")
|
||||||
|
CVARD(Bool, cl_bloodqavforcedinterp, false, CVAR_ARCHIVE, "enable/disable Blood's QAV interpolation forcefully for QAVs that aren't defined as interpolatable")
|
||||||
CVARD(Bool, cl_bloodweapinterp, false, CVAR_ARCHIVE, "enable/disable Blood's weapon interpolation. Depends on 'cl_bloodqavinterp'")
|
CVARD(Bool, cl_bloodweapinterp, false, CVAR_ARCHIVE, "enable/disable Blood's weapon interpolation. Depends on 'cl_bloodqavinterp'")
|
||||||
CVARD(Bool, cl_bloodoldweapbalance, false, CVAR_ARCHIVE, "enable/disable legacy 1.0 weapon handling for Blood")
|
CVARD(Bool, cl_bloodoldweapbalance, false, CVAR_ARCHIVE, "enable/disable legacy 1.0 weapon handling for Blood")
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ EXTERN_CVAR(Bool, cl_bloodvanillabobbing)
|
||||||
EXTERN_CVAR(Bool, cl_bloodvanillaexplosions)
|
EXTERN_CVAR(Bool, cl_bloodvanillaexplosions)
|
||||||
EXTERN_CVAR(Bool, cl_bloodvanillaenemies)
|
EXTERN_CVAR(Bool, cl_bloodvanillaenemies)
|
||||||
EXTERN_CVAR(Bool, cl_bloodqavinterp)
|
EXTERN_CVAR(Bool, cl_bloodqavinterp)
|
||||||
|
EXTERN_CVAR(Bool, cl_bloodqavforcedinterp)
|
||||||
EXTERN_CVAR(Bool, cl_bloodweapinterp)
|
EXTERN_CVAR(Bool, cl_bloodweapinterp)
|
||||||
EXTERN_CVAR(Bool, cl_bloodoldweapbalance)
|
EXTERN_CVAR(Bool, cl_bloodoldweapbalance)
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,22 @@ enum
|
||||||
kQAVIsLoopable = 1 << 0,
|
kQAVIsLoopable = 1 << 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using QAVPrevTileFinder = TILE_FRAME* (*)(FRAMEINFO* const thisFrame, FRAMEINFO* const prevFrame, const int& i);
|
||||||
|
|
||||||
|
struct QAVInterpProps
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
QAVPrevTileFinder PrevTileFinder;
|
||||||
|
TMap<int, TArray<int>> IgnoreData;
|
||||||
|
|
||||||
|
bool CanInterpFrameTile(const int& nFrame, const int& i)
|
||||||
|
{
|
||||||
|
// Check whether the current frame's tile is skippable.
|
||||||
|
auto thisFrame = IgnoreData.CheckKey(nFrame);
|
||||||
|
return thisFrame ? !thisFrame->Contains(i) : true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static TMap<FString, QAVPrevTileFinder> qavPrevTileFinders;
|
static TMap<FString, QAVPrevTileFinder> qavPrevTileFinders;
|
||||||
static TMap<int, QAVInterpProps> qavInterpProps;
|
static TMap<int, QAVInterpProps> qavInterpProps;
|
||||||
|
|
||||||
|
@ -139,11 +155,15 @@ void DrawFrame(double x, double y, double z, double a, TILE_FRAME *pTile, int st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static QAVInterpProps forcedinterpdata{ 0, qavGetInterpType("picnum") };
|
||||||
|
|
||||||
void QAV::Draw(double x, double y, int ticks, int stat, int shade, int palnum, bool to3dview, double const smoothratio)
|
void QAV::Draw(double x, double y, int ticks, int stat, int shade, int palnum, bool to3dview, double const smoothratio)
|
||||||
{
|
{
|
||||||
assert(ticksPerFrame > 0);
|
assert(ticksPerFrame > 0);
|
||||||
|
|
||||||
auto const interpdata = qavInterpProps.CheckKey(res_id);
|
QAVInterpProps* interpdata = qavInterpProps.CheckKey(res_id);
|
||||||
|
if (!interpdata && cl_bloodqavforcedinterp) interpdata = &forcedinterpdata;
|
||||||
|
|
||||||
auto const nFrame = clamp(ticks / ticksPerFrame, 0, nFrames - 1);
|
auto const nFrame = clamp(ticks / ticksPerFrame, 0, nFrames - 1);
|
||||||
FRAMEINFO* const thisFrame = &frames[nFrame];
|
FRAMEINFO* const thisFrame = &frames[nFrame];
|
||||||
|
|
|
@ -238,22 +238,6 @@ struct QAV
|
||||||
void Precache(int palette = 0);
|
void Precache(int palette = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
using QAVPrevTileFinder = TILE_FRAME* (*)(FRAMEINFO* const thisFrame, FRAMEINFO* const prevFrame, const int& i);
|
|
||||||
|
|
||||||
struct QAVInterpProps
|
|
||||||
{
|
|
||||||
int flags;
|
|
||||||
QAVPrevTileFinder PrevTileFinder;
|
|
||||||
TMap<int, TArray<int>> IgnoreData;
|
|
||||||
|
|
||||||
bool CanInterpFrameTile(const int& nFrame, const int& i)
|
|
||||||
{
|
|
||||||
// Check whether the current frame's tile is skippable.
|
|
||||||
auto thisFrame = IgnoreData.CheckKey(nFrame);
|
|
||||||
return thisFrame ? !thisFrame->Contains(i) : true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
QAV* getQAV(int res_id);
|
QAV* getQAV(int res_id);
|
||||||
void qavProcessTicker(QAV* const pQAV, int* duration, int* lastTick);
|
void qavProcessTicker(QAV* const pQAV, int* duration, int* lastTick);
|
||||||
void qavProcessTimer(PLAYER* const pPlayer, QAV* const pQAV, int* duration, double* smoothratio, bool const fixedduration = false);
|
void qavProcessTimer(PLAYER* const pPlayer, QAV* const pQAV, int* duration, double* smoothratio, bool const fixedduration = false);
|
||||||
|
|
Loading…
Reference in a new issue