- Duke shotgun and chaingun handled.

This commit is contained in:
Christoph Oelckers 2023-01-01 01:30:34 +01:00
parent 1aa88bd201
commit d5f1a82f21
2 changed files with 57 additions and 30 deletions

View file

@ -364,7 +364,12 @@ void displayweapon_d(int snum, double interpfrac)
{
if (*kb < (isWW2GI() ? weapTotalTime : 8))
{
hud_drawpal(164 + offsets.X, 176 + offsets.Y, DTILE_RPGGUN + (*kb >> 1), shade, o | pin, pal, angle);
int frame = (*kb >> 1);
if (frame >= 1 && frame <= 3)
{
static const char* const muzzleflash[] = { "RPGMUZZLEFLASH1", "RPGMUZZLEFLASH2", "RPGMUZZLEFLASH3" };
hud_drawpal(164 + offsets.X, 176 + offsets.Y, muzzleflash[frame - 1], shade, o | pin, pal, angle);
}
}
else if (isWW2GI())
{
@ -382,7 +387,7 @@ void displayweapon_d(int snum, double interpfrac)
}
}
hud_drawpal(164 + offsets.X, 176 + offsets.Y, DTILE_RPGGUN, shade, o | pin, pal, angle);
hud_drawpal(164 + offsets.X, 176 + offsets.Y, "RPGGUN", shade, o | pin, pal, angle);
};
//---------------------------------------------------------------------------
@ -401,7 +406,7 @@ void displayweapon_d(int snum, double interpfrac)
if (*kb > 0 && p->GetActor()->spr.pal != 1)
offsets.X += 1 - (rand() & 3);
int pic = DTILE_SHOTGUN;
const char* pic = "SHOTGUN";
if (*kb == 0)
{
@ -409,7 +414,7 @@ void displayweapon_d(int snum, double interpfrac)
}
else if (*kb <= weapTotalTime)
{
pic += 1;
pic = "SHOTGUN1";
}
// else we are in 'reload time'
else if (*kb < ((weapReload - weapTotalTime) / 2 + weapTotalTime))
@ -440,13 +445,13 @@ void displayweapon_d(int snum, double interpfrac)
{
case 1:
case 2:
hud_drawpal(168 + offsets.X, 201 + offsets.Y, DTILE_SHOTGUN + 2, -128, o, pal, angle);
hud_drawpal(168 + offsets.X, 201 + offsets.Y, "SHOTGUN2", -128, o, pal, angle);
[[fallthrough]];
case 0:
case 6:
case 7:
case 8:
hud_drawpal(146 + offsets.X, 202 + offsets.Y, DTILE_SHOTGUN, shade, o, pal, angle);
hud_drawpal(146 + offsets.X, 202 + offsets.Y, "SHOTGUN", shade, o, pal, angle);
break;
case 3:
case 4:
@ -459,38 +464,38 @@ void displayweapon_d(int snum, double interpfrac)
{
offsets.Y += 40;
offsets.X += 20;
hud_drawpal(178 + offsets.X, 194 + offsets.Y, DTILE_SHOTGUN + 1 + ((*(kb)-1) >> 1), -128, o, pal, angle);
// this was screwed. *kb can only be 3 and 4 here as case 2 is elsewhere, so ((*(kb)-1) >> 1) will always be 1, meaning only SHOTGUN2 can be drawn.
hud_drawpal(178 + offsets.X, 194 + offsets.Y, "SHOTGUN2", -128, o, pal, angle);
}
hud_drawpal(158 + offsets.X, 220 + offsets.Y, DTILE_SHOTGUN + 3, shade, o, pal, angle);
hud_drawpal(158 + offsets.X, 220 + offsets.Y, "SHOTGUN3", shade, o, pal, angle);
break;
case 13:
case 14:
case 15:
hud_drawpal(198 + offsets.X, 210 + offsets.Y, DTILE_SHOTGUN + 4, shade, o, pal, angle);
hud_drawpal(198 + offsets.X, 210 + offsets.Y, "SHOTGUN4", shade, o, pal, angle);
break;
case 16:
case 17:
case 18:
case 19:
hud_drawpal(234 + offsets.X, 196 + offsets.Y, DTILE_SHOTGUN + 5, shade, o, pal, angle);
hud_drawpal(234 + offsets.X, 196 + offsets.Y, "SHOTGUN5", shade, o, pal, angle);
break;
case 20:
case 21:
case 22:
case 23:
hud_drawpal(240 + offsets.X, 196 + offsets.Y, DTILE_SHOTGUN + 6, shade, o, pal, angle);
hud_drawpal(240 + offsets.X, 196 + offsets.Y, "SHOTGUN6", shade, o, pal, angle);
break;
case 24:
case 25:
case 26:
case 27:
hud_drawpal(234 + offsets.X, 196 + offsets.Y, DTILE_SHOTGUN + 5, shade, o, pal, angle);
hud_drawpal(234 + offsets.X, 196 + offsets.Y, "SHOTGUN5", shade, o, pal, angle);
break;
case 28:
case 29:
case 30:
hud_drawpal(188 + offsets.X, 206 + offsets.Y, DTILE_SHOTGUN + 4, shade, o, pal, angle);
hud_drawpal(188 + offsets.X, 206 + offsets.Y, "SHOTGUN4", shade, o, pal, angle);
break;
}
};
@ -511,11 +516,11 @@ void displayweapon_d(int snum, double interpfrac)
if (*kb == 0)
{
hud_drawpal(178 + offsets.X, 233 + offsets.Y, DTILE_CHAINGUN + 1, shade, o, pal, angle);
hud_drawpal(178 + offsets.X, 233 + offsets.Y, "CHAINGUNF1", shade, o, pal, angle);
}
else if (*kb <= weapTotalTime)
{
hud_drawpal(188 + offsets.X, 243 + offsets.Y, DTILE_CHAINGUN + 2, shade, o, pal, angle);
hud_drawpal(188 + offsets.X, 243 + offsets.Y, "CHAINGUNF2", shade, o, pal, angle);
}
else
{
@ -527,37 +532,37 @@ void displayweapon_d(int snum, double interpfrac)
// 5) move weapon down/left, clip inserted (2519)
double adj;
int pic;
const char* pic;
const int iFifths = max((weapReload - weapTotalTime) / 5, 1);
if (*kb < (iFifths + weapTotalTime))
{
// first segment
pic = 2519;
pic = "WW2CGRELOAD3";
adj = 80 - (10 * (weapTotalTime + iFifths - kickback_pic));
}
else if (*kb < (iFifths * 2 + weapTotalTime))
{
// second segment (down)
pic = 2518;
pic = "WW2SCRELOAD2";
adj = 80;
}
else if (*kb < (iFifths * 3 + weapTotalTime))
{
// third segment (up)
pic = 2517;
pic = "WW2CGRELOAD1";
adj = 80;
}
else if (*kb < (iFifths * 4 + weapTotalTime))
{
// fourth segment (down)
pic = 2518;
pic = "WW2CGRELOAD2";
adj = 80;
}
else
{
// up and left
pic = 2519;
pic = "WW2CGRELOAD3";
adj = 10 * (weapReload - kickback_pic);
}
@ -574,38 +579,40 @@ void displayweapon_d(int snum, double interpfrac)
auto displaychaingun = [&]
{
static const char* const fireframes[] = { "CHAINGUNF1", "CHAINGUNF2", "CHAINGUNF3", "CHAINGUNF4" };
static const char* const flashframes[] = { "CHAINGUNFLASH1", "CHAINGUNFLASH2", "CHAINGUNFLASH3" };
if (*kb > 0)
offsets.Y += BobVal(kickback_pic * 128.) * 4;
if (*kb > 0 && p->GetActor()->spr.pal != 1)
offsets.X += 1 - (rand() & 3);
hud_drawpal(168 + offsets.X, 260 + offsets.Y, DTILE_CHAINGUN, shade, o, pal, angle);
hud_drawpal(168 + offsets.X, 260 + offsets.Y, "CHAINGUN", shade, o, pal, angle);
switch(*kb)
{
case 0:
hud_drawpal(178 + offsets.X, 233 + offsets.Y, DTILE_CHAINGUN + 1, shade, o, pal, angle);
hud_drawpal(178 + offsets.X, 233 + offsets.Y, "CHAINGUNF1", shade, o, pal, angle);
break;
default:
if (*kb > 4 && *kb < 12)
{
auto rnd = p->GetActor()->spr.pal != 1 ? rand() & 7 : 0;
hud_drawpal(136 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), DTILE_CHAINGUN + 5 + ((*kb - 4) / 5), shade, o, pal, angle);
hud_drawpal(136 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), flashframes[((*kb - 4) / 5)], shade, o, pal, angle);
if (p->GetActor()->spr.pal != 1) rnd = rand() & 7;
hud_drawpal(180 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), DTILE_CHAINGUN + 5 + ((*kb - 4) / 5), shade, o, pal, angle);
hud_drawpal(180 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), flashframes[((*kb - 4) / 5)], shade, o, pal, angle);
}
if (*kb < 8)
{
auto rnd = rand() & 7;
hud_drawpal(158 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), DTILE_CHAINGUN + 5 + ((*kb - 2) / 5), shade, o, pal, angle);
hud_drawpal(178 + offsets.X, 233 + offsets.Y, DTILE_CHAINGUN + 1 + (*kb >> 1), shade, o, pal, angle);
hud_drawpal(158 + offsets.X + rnd, 208 + offsets.Y + rnd - (kickback_pic * 0.5), flashframes[((*kb - 2) / 5)], shade, o, pal, angle);
hud_drawpal(178 + offsets.X, 233 + offsets.Y, fireframes[(*kb >> 1)], shade, o, pal, angle);
}
else
{
hud_drawpal(178 + offsets.X, 233 + offsets.Y, DTILE_CHAINGUN + 1, shade, o, pal, angle);
hud_drawpal(178 + offsets.X, 233 + offsets.Y, "CHAINGUNF1", shade, o, pal, angle);
}
break;
}

View file

@ -665,8 +665,17 @@ x(SHELL, 2533)
x(SHELL1, 2534)
x(SHOTGUNSHELL, 2535)
x(CHAINGUN, 2536)
x(CHAINGUNF1, 2537)
x(CHAINGUNF2, 2538)
x(CHAINGUNF3, 2539)
x(CHAINGUNF4, 2540)
x(CHAINGUNFLASH1, 2541)
x(CHAINGUNFLASH2, 2542)
x(CHAINGUNFLASH3, 2543)
x(RPGGUN, 2544)
x(RPGMUZZLEFLASH, 2545)
x(RPGMUZZLEFLASH1, 2545)
x(RPGMUZZLEFLASH2, 2546)
x(RPGMUZZLEFLASH3, 2547)
x(FREEZE, 2548)
x(CATLITE, 2552)
x(SHRINKER, 2556)
@ -689,6 +698,12 @@ x(SHOTSPARK1, 2595)
x(RPG, 2605)
x(LASERSITE, 2612)
x(SHOTGUN, 2613)
x(SHOTGUN1, 2614)
x(SHOTGUN2, 2615)
x(SHOTGUN3, 2616)
x(SHOTGUN4, 2617)
x(SHOTGUN5, 2618)
x(SHOTGUN6, 2619)
x(BOSS1, 2630)
x(BOSS1STAYPUT, 2631)
x(BOSS1SHOOT, 2660)
@ -1009,3 +1024,8 @@ x(BEACHBATHER, 1312) // FEM1
x(DRAGON, 2120) // LIZMAN
x(SEAGULLSHIT, 1638)
x(SEAGULL, 2150) // LIZMANSPITTING
// WW2GI stuff
x(WW2CGRELOAD1, 2517)
x(WW2CGRELOAD2, 2518)
x(WW2CGRELOAD3, 2519)