diff --git a/source/core/gamehud.h b/source/core/gamehud.h index db17a68e5..faacee6ac 100644 --- a/source/core/gamehud.h +++ b/source/core/gamehud.h @@ -11,7 +11,6 @@ void hud_drawsprite(double sx, double sy, double sz, double a, FTextureID texid, // orientation bits for hud_drawsprite. enum { RS_TRANS1 = 1, - RS_YFLIP = 4, RS_TOPLEFT = 16, RS_TRANS2 = 32, RS_NOMASK = 64, @@ -21,8 +20,8 @@ enum { RS_ALIGN_MASK = 768, RS_STRETCH = 1024, - RS_XFLIPHUD = RS_YFLIP, - RS_YFLIPHUD = 16384, // this is for hud_drawsprite which uses RS_YFLIP for x-flipping but needs both flags + RS_XFLIPHUD = 4, + RS_YFLIPHUD = 16384, RS_CENTER = (1 << 29), // proper center align. }; diff --git a/source/games/blood/src/qav.cpp b/source/games/blood/src/qav.cpp index 5450a0b20..fba44b4f9 100644 --- a/source/games/blood/src/qav.cpp +++ b/source/games/blood/src/qav.cpp @@ -134,8 +134,9 @@ void DrawFrame(double x, double y, double z, double a, double alpha, int picnum, auto translation = TRANSLATION(Translation_Remap, palnum); bool topleft = !!(stat & RS_TOPLEFT); + bool xflip = !!(stat & 0x100); // repurposed flag - bool yflip = !!(stat & RS_YFLIP); + bool yflip = !!(stat & 4); auto color = shadeToLight(shade); DrawTexture(twod, tex, x, y, DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_Rotate, a, DTA_LegacyRenderStyle, renderstyle, DTA_Alpha, alpha, DTA_Pin, pin, DTA_TranslationIndex, translation, @@ -145,8 +146,8 @@ void DrawFrame(double x, double y, double z, double a, double alpha, int picnum, else { // there's some disagreements about flag values between QAV and the drawer. Shuffle these around. - if (stat & RS_YFLIP) stat |= RS_YFLIPHUD; - stat &= ~RS_YFLIP; + if (stat & 4) stat |= RS_YFLIPHUD; + stat &= ~4; if (stat & 0x100) stat |= RS_XFLIPHUD; stat &= ~0x100; if ((stat & kQavOrientationLeft)) stat |= RS_ALIGN_L; diff --git a/source/games/duke/src/hudweapon_d.cpp b/source/games/duke/src/hudweapon_d.cpp index 8f367f390..fd1497c87 100644 --- a/source/games/duke/src/hudweapon_d.cpp +++ b/source/games/duke/src/hudweapon_d.cpp @@ -193,7 +193,7 @@ static bool animateaccess(int gs, player_struct* p, double xoffset, double yoffs { if (p->access_incs == 0 || p->GetActor()->spr.extra <= 0) return false; - static const char* const frames[] = { "HANDHOLDINGLASER0", "HANDHOLDINGLASER1", "HANDHOLDINGLASER2", "HANDHOLDINGLASER3" }; + static const char* const frames[] = { "HANDHOLDINGLASER0", "HANDHOLDINGLASER1", "HANDHOLDINGLASER2" }; static const int8_t access_y[] = {0,-8,-16,-32,-64,-84,-108,-108,-108,-108,-108,-108,-108,-108,-108,-108,-96,-72,-64,-32,-16}; const double accessi = interpolatedvalue(access_y[p->oaccess_incs], access_y[p->access_incs], interpfrac); @@ -207,6 +207,22 @@ static bool animateaccess(int gs, player_struct* p, double xoffset, double yoffs return true; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +void animateshrunken(player_struct* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac) +{ + const double fistsign = BobVal(interpolatedvalue(p->ofistsign, p->fistsign, interpfrac)) * 16; + int pal = ps[screenpeek].cursector->floorpal; + if (p->jetpack_on == 0) yoffset += 32 - (p->GetActor()->vel.X * 8); + hud_drawpal(250 + fistsign + xoffset, 258 - fabs(fistsign * 4) + yoffset, "FIST", shade, o, pal, nullAngle); + hud_drawpal(40 - fistsign + xoffset, 200 + fabs(fistsign * 4) + yoffset, "FIST", shade, o | 4, pal, nullAngle); +} + + //--------------------------------------------------------------------------- // // @@ -283,18 +299,18 @@ void displayweapon_d(int snum, double interpfrac) { if (quick_kick < 5 || quick_kick > 9) { - hud_drawpal(80 + offsets.X, 250 + offsets.Y, DTILE_KNEE, shade, o | 4, pal2, angle); + hud_drawpal(80 + offsets.X, 250 + offsets.Y, "KNEE", shade, o | 4, pal2, angle); } else { - hud_drawpal(160 - 16 + offsets.X, 214 + offsets.Y, DTILE_KNEE + 1, shade, o | 4, pal2, angle); + hud_drawpal(160 - 16 + offsets.X, 214 + offsets.Y, "KNEE1", shade, o | 4, pal2, angle); } } if (p->GetActor()->spr.scale.X < 0.625) { //shrunken.. - animateshrunken(p, offsets.X, offsets.Y + gun_pos, DTILE_FIST, shade, o, interpfrac); + animateshrunken(p, offsets.X, offsets.Y + gun_pos, shade, o, interpfrac); } else { @@ -335,17 +351,21 @@ void displayweapon_d(int snum, double interpfrac) auto displaytripbomb = [&]() { - static const char* const frames[] = { "HANDHOLDINGLASER0", "HANDHOLDINGLASER1", "HANDHOLDINGLASER2", "HANDHOLDINGLASER3" }; + static const char* const frames[] = { "HANDHOLDINGLASER0", "HANDHOLDINGLASER1", "HANDHOLDINGLASER2" }; offsets.X += 8; offsets.Y -= 10; if (*kb > 6) offsets.Y += kickback_pic * 8.; else if (*kb < 4) - hud_drawpal(142 + offsets.X, 234 + offsets.Y, "HANDHOLDINGLASER3", shade, o, pal, angle); + hud_drawpal(142 + offsets.X, 234 + offsets.Y, "TRIPBOMB", shade, o, pal, angle); - hud_drawpal(130 + offsets.X, 249 + offsets.Y, frames[(*kb >> 2)], shade, o, pal, angle); - hud_drawpal(152 + offsets.X, 249 + offsets.Y, frames[(*kb >> 2)], shade, o | 4, pal, angle); + int i = (*kb >> 2); + if (i < 4) + { + hud_drawpal(130 + offsets.X, 249 + offsets.Y, frames[i], shade, o, pal, angle); + hud_drawpal(152 + offsets.X, 249 + offsets.Y, frames[i], shade, o | 4, pal, angle); + } }; //--------------------------------------------------------------------------- @@ -626,15 +646,15 @@ void displayweapon_d(int snum, double interpfrac) auto displaypistol = [&]() { + static const char* const frames[] = { "FIRSTGUN0", "FIRSTGUN1", "FIRSTGUN2" }; if (*kb < 5) { static constexpr uint8_t kb_frames[] = { 0,1,2,0,0 }; - hud_drawpal((195 - 12 - (*kb == 2) * 3) + offsets.X, 244 + offsets.Y, DTILE_FIRSTGUN + kb_frames[*kb], shade, 2, pal, angle); + hud_drawpal((195 - 12 - (*kb == 2) * 3) + offsets.X, 244 + offsets.Y, frames[kb_frames[*kb]], shade, 2, pal, angle); } else { const int pin = (isWW2GI() || (gs.displayflags & DUKE3D_NO_WIDESCREEN_PINNING)) ? 0 : RS_ALIGN_R; - const int pic_5 = DTILE_FIRSTGUN+5; const int WEAPON2_RELOAD_TIME = 50; const int reload_time = isWW2GI() ? weapReload : WEAPON2_RELOAD_TIME; @@ -642,31 +662,31 @@ void displayweapon_d(int snum, double interpfrac) if (*kb < 10) { - hud_drawpal(194 + offsets.X, 230 + offsets.Y, DTILE_FIRSTGUN + 4, shade, o | pin, pal, angle); + hud_drawpal(194 + offsets.X, 230 + offsets.Y, "FIRSTGUNRELOAD0", shade, o | pin, pal, angle); } else if (*kb < 15) { - hud_drawpal(244 + offsets.X - (kickback_pic * 8.), 130 + offsets.Y + (kickback_pic * 16.), DTILE_FIRSTGUN + 6, shade, o | pin, pal, angle); - hud_drawpal(224 + offsets.X, 220 + offsets.Y, pic_5, shade, o | pin, pal, angle); + hud_drawpal(244 + offsets.X - (kickback_pic * 8.), 130 + offsets.Y + (kickback_pic * 16.), "FIRSTGUNMAG0", shade, o | pin, pal, angle); + hud_drawpal(224 + offsets.X, 220 + offsets.Y, "FIRSTGUNRELOAD1", shade, o | pin, pal, angle); } else if (*kb < 20) { - hud_drawpal(124 + offsets.X + (kickback_pic * 2.), 430 + offsets.Y - (kickback_pic * 8.), DTILE_FIRSTGUN + 6, shade, o | pin, pal, angle); - hud_drawpal(224 + offsets.X, 220 + offsets.Y, pic_5, shade, o | pin, pal, angle); + hud_drawpal(124 + offsets.X + (kickback_pic * 2.), 430 + offsets.Y - (kickback_pic * 8.), "FIRSTGUNMAG0", shade, o | pin, pal, angle); + hud_drawpal(224 + offsets.X, 220 + offsets.Y, "FIRSTGUNRELOAD1", shade, o | pin, pal, angle); } else if (*kb < (isNamWW2GI()? (reload_time - 12) : 23)) { - hud_drawpal(184 + offsets.X, 235 + offsets.Y, DTILE_FIRSTGUN + 8, shade, o | pin, pal, angle); - hud_drawpal(224 + offsets.X, 210 + offsets.Y, pic_5, shade, o | pin, pal, angle); + hud_drawpal(184 + offsets.X, 235 + offsets.Y, "FIRSTGUNHAND", shade, o | pin, pal, angle); + hud_drawpal(224 + offsets.X, 210 + offsets.Y, "FIRSTGUNRELOAD1", shade, o | pin, pal, angle); } else if (*kb < (isNamWW2GI()? (reload_time - 6) : 25)) { - hud_drawpal(164 + offsets.X, 245 + offsets.Y, DTILE_FIRSTGUN + 8, shade, o | pin, pal, angle); - hud_drawpal(224 + offsets.X, 220 + offsets.Y, pic_5, shade, o | pin, pal, angle); + hud_drawpal(164 + offsets.X, 245 + offsets.Y, "FIRSTGUNHAND", shade, o | pin, pal, angle); + hud_drawpal(224 + offsets.X, 220 + offsets.Y, "FIRSTGUNRELOAD1", shade, o | pin, pal, angle); } else if (*kb < (isNamWW2GI()? reload_time : 27)) { - hud_drawpal(194 + offsets.X, 235 + offsets.Y, pic_5, shade, o, pal, angle); + hud_drawpal(194 + offsets.X, 235 + offsets.Y, "FIRSTGUNRELOAD1", shade, o, pal, angle); } } }; @@ -679,8 +699,9 @@ void displayweapon_d(int snum, double interpfrac) auto displayhandbomb = [&]() { - int pic = DTILE_HANDTHROW; + static const char* const frames[] = { "HANDTHROW0", "HANDTHROW1", "HANDTHROW2" }; + int pic = 0; if (*kb) { static constexpr uint8_t throw_frames[] = { 0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2 }; @@ -716,11 +737,11 @@ void displayweapon_d(int snum, double interpfrac) offsets.Y += 9 * (kickback_pic - 14); //D } - pic += throw_frames[*kb]; + pic = throw_frames[*kb]; offsets.Y -= 10; } - hud_drawpal(190 + offsets.X, 260 + offsets.Y, pic, shade, o, pal, angle); + hud_drawpal(190 + offsets.X, 260 + offsets.Y, frames[pic], shade, o, pal, angle); }; //--------------------------------------------------------------------------- @@ -731,8 +752,9 @@ void displayweapon_d(int snum, double interpfrac) auto displayhandremote = [&]() { + static const char* const frames[] = { "HANDREMOTE0", "HANDREMOTE1", "HANDREMOTE2" }; static constexpr uint8_t remote_frames[] = { 0,1,1,2,1,1,0,0,0,0,0 }; - hud_drawpal(102 + offsets.X, 258 + offsets.Y, DTILE_HANDREMOTE + (*kb ? remote_frames[*kb] : 0), shade, o, pal, angle); + hud_drawpal(102 + offsets.X, 258 + offsets.Y, frames[(*kb ? remote_frames[*kb] : 0)], shade, o, pal, angle); }; //--------------------------------------------------------------------------- @@ -743,6 +765,7 @@ void displayweapon_d(int snum, double interpfrac) auto displaydevastator_ww = [&] { + const char* const frames[] = { "DEVISTATOR", "DEVISTATORFIRE" }; if (*kb) { if (*kb < weapTotalTime) @@ -751,13 +774,13 @@ void displayweapon_d(int snum, double interpfrac) if (p->ammo_amount[p->curr_weapon] & 1) { - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR + i, -32, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, frames[i], -32, o, pal, angle); } else { - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR + i, -32, o | 4, pal, angle); - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, frames[i], -32, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); } } // else we are in 'reload time' @@ -765,21 +788,21 @@ void displayweapon_d(int snum, double interpfrac) { // down offsets.Y += 10 * (kickback_pic - weapTotalTime); //D - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); } else { // up and left offsets.Y += 10 * (weapReload - kickback_pic); //U - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); } } else { - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); } }; @@ -791,6 +814,7 @@ void displayweapon_d(int snum, double interpfrac) auto displaydevastator = [&] { + const char* const frames[] = { "DEVISTATOR", "DEVISTATORFIRE" }; if (*kb) { static constexpr uint8_t cycloidy[] = { 0,4,12,24,12,4,0 }; @@ -798,19 +822,19 @@ void displayweapon_d(int snum, double interpfrac) if (p->hbomb_hold_delay) { - hud_drawpal(268 + offsets.X + (cycloidy[*kb] >> 1), 238 + offsets.Y + cycloidy[*kb], DTILE_DEVISTATOR + i, -32, o, pal, angle); - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X + (cycloidy[*kb] >> 1), 238 + offsets.Y + cycloidy[*kb], frames[i], -32, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); } else { - hud_drawpal(30 + offsets.X - (cycloidy[*kb] >> 1), 240 + offsets.Y + cycloidy[*kb], DTILE_DEVISTATOR + i, -32, o | 4, pal, angle); - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); + hud_drawpal(30 + offsets.X - (cycloidy[*kb] >> 1), 240 + offsets.Y + cycloidy[*kb], frames[i], -32, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); } } else { - hud_drawpal(268 + offsets.X, 238 + offsets.Y, DTILE_DEVISTATOR, shade, o, pal, angle); - hud_drawpal(30 + offsets.X, 240 + offsets.Y, DTILE_DEVISTATOR, shade, o | 4, pal, angle); + hud_drawpal(268 + offsets.X, 238 + offsets.Y, "DEVISTATOR", shade, o, pal, angle); + hud_drawpal(30 + offsets.X, 240 + offsets.Y, "DEVISTATOR", shade, o | 4, pal, angle); } }; @@ -826,6 +850,7 @@ void displayweapon_d(int snum, double interpfrac) if (*kb) { + static const char* const cat[] = { "FREEZECAT0", "FREEZECAT1", "FREEZECAT2" }; static constexpr uint8_t cat_frames[] = { 0,0,1,1,2,2 }; if (p->GetActor()->spr.pal != 1) @@ -836,12 +861,12 @@ void displayweapon_d(int snum, double interpfrac) offsets.Y += 16; - hud_drawpal(210 + offsets.X, 261 + offsets.Y, DTILE_FREEZE + 2, -32, o | pin, pal, angle); - hud_drawpal(210 + offsets.X, 235 + offsets.Y, DTILE_FREEZE + 3 + cat_frames[*kb % 6], -32, o | pin, pal, angle); + hud_drawpal(210 + offsets.X, 261 + offsets.Y, "FREEZEFIRE", -32, o | pin, pal, angle); + hud_drawpal(210 + offsets.X, 235 + offsets.Y, cat[cat_frames[*kb % 6]], -32, o | pin, pal, angle); } else { - hud_drawpal(210 + offsets.X, 261 + offsets.Y, DTILE_FREEZE, shade, o | pin, pal, angle); + hud_drawpal(210 + offsets.X, 261 + offsets.Y, "FREEZE", shade, o | pin, pal, angle); } }; @@ -850,6 +875,7 @@ void displayweapon_d(int snum, double interpfrac) // // //--------------------------------------------------------------------------- + static const char* const coilfireframes[] = { "SHRINKERFIRE1", "SHRINKERFIRE2", "SHRINKERFIRE3", "SHRINKERFIRE4" }; auto displayshrinker_ww = [&] { @@ -861,13 +887,13 @@ void displayweapon_d(int snum, double interpfrac) // the 'at rest' display if (p->ammo_amount[cw] <= 0) //p->last_weapon >= 0) { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 3 + (*kb & 3), -32, o, 0, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 1, shade, o, pal, angle); + hud_drawpal(184 + offsets.X, 240 + offsets.Y, coilfireframes[(*kb & 3)], -32, o, 0, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "SHRINKERLITE", shade, o, pal, angle); } else { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 2, 16 - int(BobVal(random_club_frame) * 16), o, 0, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER, shade, o, pal, angle); + hud_drawpal(184 + offsets.X, 240 + offsets.Y, "SHRINKERCOIL", 16 - int(BobVal(random_club_frame) * 16), o, 0, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "SHRINKER", shade, o, pal, angle); } } else @@ -901,8 +927,8 @@ void displayweapon_d(int snum, double interpfrac) } // draw weapon - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 3 + (*kb & 3), -32, o, 0, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 1, shade, o, pal, angle); + hud_drawpal(184 + offsets.X, 240 + offsets.Y, coilfireframes[(*kb & 3)], -32, o, 0, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "SHRINKERLITE", shade, o, pal, angle); } }; @@ -919,7 +945,7 @@ void displayweapon_d(int snum, double interpfrac) if (*kb == 0) { - hud_drawpal(188 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER - 2, shade, o, pal, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "GROWER", shade, o, pal, angle); } else { @@ -950,8 +976,8 @@ void displayweapon_d(int snum, double interpfrac) } // display weapon - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 3 + (*kb & 3), -32, o, 2, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER - 1, shade, o, pal, angle); + hud_drawpal(184 + offsets.X, 240 + offsets.Y, coilfireframes[(*kb & 3)], -32, o, 2, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "GROWERLITE", shade, o, pal, angle); } }; @@ -963,22 +989,13 @@ void displayweapon_d(int snum, double interpfrac) auto displayshrinker = [&] { - auto shrinker = /*isWorldTour() ? DTILE_SHRINKERWIDE :*/ DTILE_SHRINKER; offsets.X += 28; offsets.Y += 18; if (*kb == 0) { - if (cw == GROW_WEAPON) - { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 2, 16 - int(BobVal(random_club_frame) * 16), o, 2, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, shrinker - 2, shade, o, pal, angle); - } - else - { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 2, 16 - int(BobVal(random_club_frame) * 16), o, 0, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, shrinker, shade, o, pal, angle); - } + hud_drawpal(184 + offsets.X, 240 + offsets.Y, "SHRINKERCOIL", 16 - int(BobVal(random_club_frame) * 16), o, 0, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "SHRINKER", shade, o, pal, angle); } else { @@ -988,16 +1005,37 @@ void displayweapon_d(int snum, double interpfrac) offsets.Y -= rand() & 3; } - if (cw == GROW_WEAPON) + hud_drawpal(184 + offsets.X, 240 + offsets.Y, coilfireframes[(*kb & 3)], -32, o, 0, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "SHRINKERLITE", shade, o, pal, angle); + } + }; + + //--------------------------------------------------------------------------- + // + // + // + //--------------------------------------------------------------------------- + + auto displaygrower = [&] + { + offsets.X += 28; + offsets.Y += 18; + + if (*kb == 0) + { + hud_drawpal(184 + offsets.X, 240 + offsets.Y, "SHRINKERCOIL", 16 - int(BobVal(random_club_frame) * 16), o, 2, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "GROWER", shade, o, pal, angle); + } + else + { + if (p->GetActor()->spr.pal != 1) { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 3 + (*kb & 3), -32, o, 2, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, shrinker - 1, shade, o, pal, angle); - } - else - { - hud_drawpal(184 + offsets.X, 240 + offsets.Y, DTILE_SHRINKER + 3 + (*kb & 3), -32, o, 0, angle); - hud_drawpal(188 + offsets.X, 240 + offsets.Y, shrinker + 1, shade, o, pal, angle); + offsets.X += rand() & 3; + offsets.Y -= rand() & 3; } + + hud_drawpal(184 + offsets.X, 240 + offsets.Y, coilfireframes[(*kb & 3)], -32, o, 2, angle); + hud_drawpal(188 + offsets.X, 240 + offsets.Y, "GROWERLITE", shade, o, pal, angle); } }; @@ -1011,11 +1049,12 @@ void displayweapon_d(int snum, double interpfrac) { if (*kb < 1 || p->cursector->lotag == 2) { - hud_drawpal(210 + offsets.X, 261 + offsets.Y, DTILE_FLAMETHROWER, shade, o, pal, angle); - hud_drawpal(210 + offsets.X, 261 + offsets.Y, DTILE_FLAMETHROWERPILOT, shade, o, pal, angle); + hud_drawpal(210 + offsets.X, 261 + offsets.Y, "FLAMETHROWER", shade, o, pal, angle); + hud_drawpal(210 + offsets.X, 261 + offsets.Y, "FLAMETHROWERPILOT", shade, o, pal, angle); } else { + static const char* const cat[] = { "FLAMETHROWERCAT0", "FLAMETHROWERCAT1", "FLAMETHROWERCAT2" }; static constexpr uint8_t cat_frames[] = { 0, 0, 1, 1, 2, 2 }; if (p->GetActor()->spr.pal != 1) @@ -1026,8 +1065,8 @@ void displayweapon_d(int snum, double interpfrac) offsets.Y += 16; - hud_drawpal(210 + offsets.X, 261 + offsets.Y, DTILE_FLAMETHROWER + 1, -32, o, pal, angle); - hud_drawpal(210 + offsets.X, 235 + offsets.Y, DTILE_FLAMETHROWER + 2 + cat_frames[*kb % 6], -32, o, pal, angle); + hud_drawpal(210 + offsets.X, 261 + offsets.Y, "FLAMETHROWERLOW", -32, o, pal, angle); + hud_drawpal(210 + offsets.X, 235 + offsets.Y, cat[cat_frames[*kb % 6]], -32, o, pal, angle); } }; @@ -1089,7 +1128,7 @@ void displayweapon_d(int snum, double interpfrac) case GROW_WEAPON: if (isWW2GI()) displaygrower_ww(); - else displayshrinker(); + else displaygrower(); break; case FLAMETHROWER_WEAPON: diff --git a/source/games/duke/src/hudweapon_r.cpp b/source/games/duke/src/hudweapon_r.cpp index 8e9ebedd3..08072ab0e 100644 --- a/source/games/duke/src/hudweapon_r.cpp +++ b/source/games/duke/src/hudweapon_r.cpp @@ -208,6 +208,7 @@ void DrawBoat(int const kb, DVector2 offsets, DAngle angle, int shade, int pal, // // //--------------------------------------------------------------------------- +void animateshrunken(player_struct* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac); void displayweapon_r(int snum, double interpfrac) { @@ -269,7 +270,7 @@ void displayweapon_r(int snum, double interpfrac) if (p->GetActor()->spr.scale.X < 0.125) { - animateshrunken(p, offsets.X, offsets.Y + gun_pos, RTILE_FIST, shade, o, interpfrac); + animateshrunken(p, offsets.X, offsets.Y + gun_pos, shade, o, interpfrac); } else { diff --git a/source/games/duke/src/inlines.h b/source/games/duke/src/inlines.h index 2a33b8102..384f967b9 100644 --- a/source/games/duke/src/inlines.h +++ b/source/games/duke/src/inlines.h @@ -180,20 +180,6 @@ inline void doslopetilting(player_struct* p) // //--------------------------------------------------------------------------- -inline void hud_draw(double x, double y, int tilenum, int shade, int orientation) -{ - int p = ps[screenpeek].cursector->floorpal; - hud_drawsprite(x, y, 65536, 0, tilenum, shade, p, 2 | orientation); -} - -inline void animateshrunken(player_struct* p, double xoffset, double yoffset, int tilenum, int8_t shade, int o, double interpfrac) -{ - const double fistsign = BobVal(interpolatedvalue(p->ofistsign, p->fistsign, interpfrac)) * 16; - if (p->jetpack_on == 0) yoffset += 32 - (p->GetActor()->vel.X * 8); - hud_draw(250 + fistsign + xoffset, 258 - fabs(fistsign * 4) + yoffset, tilenum, shade, o); - hud_draw(40 - fistsign + xoffset, 200 + fabs(fistsign * 4) + yoffset, tilenum, shade, o | 4); -} - inline ESpriteFlags randomFlip() { int r = krand() & 12; diff --git a/source/games/duke/src/namelist_d.h b/source/games/duke/src/namelist_d.h index 687820369..2f57894bc 100644 --- a/source/games/duke/src/namelist_d.h +++ b/source/games/duke/src/namelist_d.h @@ -653,11 +653,18 @@ x(CREDITPAGE1, 2504) x(CREDITPAGE2, 2505) x(CREDITPAGE3, 2506) x(DEVISTATOR, 2510) +x(DEVISTATORFIRE, 2511) x(KNEE, 2521) x(KNEE1, 2522) x(CROSSHAIR, 2523) -x(FIRSTGUN, 2524) -x(FIRSTGUNRELOAD, 2528) +x(FIRSTGUN0, 2524) +x(FIRSTGUN1, 2525) +x(FIRSTGUN2, 2526) +x(FIRSTGUNRELOAD0, 2528) +x(FIRSTGUNRELOAD1, 2529) +x(FIRSTGUNREMAG0, 2530) +x(FIRSTGUNREMAG1, 2531) +x(FIRSTGUNHAND, 2532) x(FALLINGCLIP, 2530) x(CLIPINHAND, 2531) x(HAND, 2532) @@ -677,17 +684,31 @@ x(RPGMUZZLEFLASH1, 2545) x(RPGMUZZLEFLASH2, 2546) x(RPGMUZZLEFLASH3, 2547) x(FREEZE, 2548) -x(CATLITE, 2552) +x(FREEZEFIRE, 2550) +x(FREEZECAT0, 2551) +x(FREEZECAT1, 2552) +x(FREEZECAT2, 2553) +x(GROWER, 2554) +x(GROWERLITE, 2555) x(SHRINKER, 2556) +x(SHRINKERLITE, 2557) +x(SHRINKERCOIL, 2558) +x(SHRINKERFIRE1, 2559) +x(SHRINKERFIRE2, 2560) +x(SHRINKERFIRE3, 2561) +x(SHRINKERFIRE4, 2562) x(HANDHOLDINGLASER0, 2563) -x(HANDHOLDINGLASER1, 2563) -x(HANDHOLDINGLASER2, 2563) -x(HANDHOLDINGLASER3, 2563) +x(HANDHOLDINGLASER1, 2564) +x(HANDHOLDINGLASER2, 2565) x(TRIPBOMB, 2566) x(LASERLINE, 2567) x(HANDHOLDINGACCESS, 2568) -x(HANDREMOTE, 2570) -x(HANDTHROW, 2573) +x(HANDREMOTE0, 2570) +x(HANDREMOTE1, 2571) +x(HANDREMOTE2, 2572) +x(HANDTHROW0, 2573) +x(HANDTHROW1, 2574) +x(HANDTHROW2, 2575) x(TIP0, 2576) x(TIP1, 2576) x(GLAIR, 2578) @@ -951,6 +972,10 @@ x(FLAMETHROWERSPRITE, 5134) x(FLAMETHROWERAMMO, 5135) x(FLAMETHROWERAMMO1, 5136) x(FLAMETHROWER, 5138) +x(FLAMETHROWERLOW, 5139) +x(FLAMETHROWERCAT0, 5140) +x(FLAMETHROWERCAT1, 5141) +x(FLAMETHROWERCAT2, 5142) x(ONFIRE, 5152) x(LAVAPOOL, 5304) x(LAVAPOOLBUBBLE, 5207) diff --git a/source/games/duke/src/premap_d.cpp b/source/games/duke/src/premap_d.cpp index 7a8abca9e..1fbd55d9b 100644 --- a/source/games/duke/src/premap_d.cpp +++ b/source/games/duke/src/premap_d.cpp @@ -188,7 +188,7 @@ static void cachegoodsprites(void) for( i = DTILE_CRACKKNUCKLES0; i <= DTILE_CRACKKNUCKLES3; i++) tloadtile(i); - for( i = DTILE_FIRSTGUN; i <= DTILE_FIRSTGUN+2 ; i++ ) + for( i = DTILE_FIRSTGUN0; i <= DTILE_FIRSTGUN2 ; i++ ) tloadtile(i); for( i = DTILE_EXPLOSION2; i < DTILE_EXPLOSION2+21 ; i++ ) @@ -196,7 +196,7 @@ static void cachegoodsprites(void) tloadtile(DTILE_BULLETHOLE); - for( i = DTILE_FIRSTGUNRELOAD; i < DTILE_FIRSTGUNRELOAD+8 ; i++ ) + for( i = DTILE_FIRSTGUNRELOAD0; i <= DTILE_FIRSTGUNRELOAD0 + 7 ; i++ ) tloadtile(i); tloadtile(DTILE_FOOTPRINTS);