- WHaven: Interpolate weapon HUD bobbing/swaying.

This commit is contained in:
Mitchell Richters 2021-02-13 18:32:33 +11:00
parent 6390efe32e
commit 16c0f88451
3 changed files with 42 additions and 39 deletions

View file

@ -13,9 +13,8 @@ static void overwritesprite(double thex, double they, int tilenum, int shade, in
hud_drawsprite(thex, they, 65536, (stat & RS_NOCLIP) << 7, tilenum, shade, dapalnum, dastat);
}
void drawweapons(int snum) {
int dax, day;
void drawweapons(int snum, double const dasmoothratio) {
double dax, day;
int dashade;
int dapalnum;
@ -30,6 +29,10 @@ void drawweapons(int snum) {
dapalnum = 0;
}
// Interpoplated snake values for smooth bobbing.
double dasnakex = osnakex + MulScaleF(snakex - osnakex, dasmoothratio, 16);
double dasnakey = osnakey + MulScaleF(snakey - osnakey, dasmoothratio, 16);
int dabits;
if (plr.invisibletime > 0)
dabits = RS_TRANS1;
@ -167,33 +170,33 @@ void drawweapons(int snum) {
if (plr.currweaponframe == BOWREADYEND) {
if (isWh2()) {
if (plr.weapon[plr.currweapon] == 1) {
day = readyanimtics[plr.currweapon][6].curry + snakey + 8;
dax = readyanimtics[plr.currweapon][6].currx + snakex + 8;
day = readyanimtics[plr.currweapon][6].curry + dasnakey + 8;
dax = readyanimtics[plr.currweapon][6].currx + dasnakex + 8;
}
else {
day = zreadyanimtics[plr.currweapon][6].curry + snakey + 8;
dax = zreadyanimtics[plr.currweapon][6].currx + snakex + 8;
day = zreadyanimtics[plr.currweapon][6].curry + dasnakey + 8;
dax = zreadyanimtics[plr.currweapon][6].currx + dasnakex + 8;
}
}
else {
day = readyanimtics[plr.currweapon][6].curry + snakey + 8;
dax = readyanimtics[plr.currweapon][6].currx + snakex + 8;
day = readyanimtics[plr.currweapon][6].curry + dasnakey + 8;
dax = readyanimtics[plr.currweapon][6].currx + dasnakex + 8;
}
}
else {
if (isWh2()) {
if (plr.weapon[plr.currweapon] == 1 || plr.weapon[7] == 2) {
day = weaponanimtics[plr.currweapon][0].curry + snakey + 8;
dax = weaponanimtics[plr.currweapon][0].currx + snakex + 8;
day = weaponanimtics[plr.currweapon][0].curry + dasnakey + 8;
dax = weaponanimtics[plr.currweapon][0].currx + dasnakex + 8;
}
else {
day = zweaponanimtics[plr.currweapon][0].curry + snakey + 8;
dax = zweaponanimtics[plr.currweapon][0].currx + snakex + 8;
day = zweaponanimtics[plr.currweapon][0].curry + dasnakey + 8;
dax = zweaponanimtics[plr.currweapon][0].currx + dasnakex + 8;
}
}
else {
day = weaponanimtics[plr.currweapon][0].curry + snakey + 8;
dax = weaponanimtics[plr.currweapon][0].currx + snakex + 8;
day = weaponanimtics[plr.currweapon][0].curry + dasnakey + 8;
dax = weaponanimtics[plr.currweapon][0].currx + dasnakex + 8;
}
}
}
@ -238,7 +241,7 @@ void drawweapons(int snum) {
overwritesprite(0, day + 8, plr.currweaponframe + 6, dashade, dabits, dapalnum);
}
else if (plr.currweaponframe != 0)
overwritesprite(dax + snakex, day, plr.currweaponframe, dashade, dabits, dapalnum);
overwritesprite(dax + dasnakex, day, plr.currweaponframe, dashade, dabits, dapalnum);
break;
case 2: // unready
if (isWh2()) {
@ -348,30 +351,30 @@ void drawweapons(int snum) {
&& plr.selectedgun < 5) {
if (plr.shieldtype == 1) {
if (plr.shieldpoints > 75) {
overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, GRONSHIELD, dashade, dabits, dapalnum);
}
else if (plr.shieldpoints > 50 && plr.shieldpoints < 76) {
overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 1, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, GRONSHIELD + 1, dashade, dabits, dapalnum);
}
else if (plr.shieldpoints > 25 && plr.shieldpoints < 51) {
overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 2, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, GRONSHIELD + 2, dashade, dabits, dapalnum);
}
else {
overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 3, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, GRONSHIELD + 3, dashade, dabits, dapalnum);
}
}
else {
if (plr.shieldpoints > 150) {
overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, ROUNDSHIELD, dashade, dabits, dapalnum);
}
else if (plr.shieldpoints > 100 && plr.shieldpoints < 151) {
overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 1, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, ROUNDSHIELD + 1, dashade, dabits, dapalnum);
}
else if (plr.shieldpoints > 50 && plr.shieldpoints < 101) {
overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 2, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, ROUNDSHIELD + 2, dashade, dabits, dapalnum);
}
else {
overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 3, dashade, dabits, dapalnum);
overwritesprite(-40 + dasnakex, 100 + dasnakey, ROUNDSHIELD + 3, dashade, dabits, dapalnum);
}
}
}
@ -400,16 +403,15 @@ void drawscary() {
}
void DrawHud(double const dasmoothratio) {
if (!player[pyrn].dead)
drawweapons(pyrn, dasmoothratio);
if (player[pyrn].spiked == 1)
spikeheart(player[pyrn]);
if (scarytime >= 0)
drawscary();
void DrawHud(float smooth) {
if (!player[pyrn].dead)
drawweapons(pyrn);
if (player[pyrn].spiked == 1)
spikeheart(player[pyrn]);
if (scarytime >= 0)
drawscary();
//drawInterface(player[pyrn]);
}
//drawInterface(player[pyrn]);
}
END_WH_NS

View file

@ -14,7 +14,7 @@ int dropshieldcnt = 0;
boolean droptheshield = false;
int dahand = 0;
int weapondrop;
int snakex, snakey;
double osnakex, osnakey, snakex, snakey;
boolean checkmedusadist(int i, int x, int y, int z, int lvl) {
int attackdist = (isWh2() ? 8192 : 1024) + (lvl << 9);
@ -681,8 +681,9 @@ void weaponsprocess(int snum) {
plr.currweaponframe = weaponanimtics[plr.currweapon][0].daweaponframe;
}
if (plr.plInput.fvel || plr.plInput.svel) {
snakex = bsin(lockclock << 4, -12);
snakey = bsin(lockclock << 4, -12);
osnakex = snakex;
osnakey = snakey;
snakex = snakey = bsinf(lockclock << 4, -12);
}
break;
case 2: // unready

View file

@ -193,7 +193,7 @@ void trowajavlin(int s);
void spawnhornskull(short i);
void spawnapentagram(int sn);
void processinput(int num);
void DrawHud(float smooth);
void DrawHud(double const dasmoothratio);
// whplr
@ -291,7 +291,7 @@ extern int dropshieldcnt;
extern boolean droptheshield;
extern int dahand;
extern int weapondrop;
extern int snakex, snakey;
extern double osnakex, osnakey, snakex, snakey;
boolean checkmedusadist(int i, int x, int y, int z, int lvl);
void autoweaponchange(PLAYER& plr, int dagun);