From 1aa88bd2019e9203bb79b273dbbe8480a6c37428 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 1 Jan 2023 00:46:36 +0100 Subject: [PATCH] - more HUD refactoring --- source/games/duke/src/gamevar.cpp | 2 +- source/games/duke/src/hudweapon_d.cpp | 36 +++++++++++++------ source/games/duke/src/namelist_d.h | 14 ++++++-- source/games/duke/src/namelist_r.h | 2 -- source/games/duke/src/premap_d.cpp | 4 +-- .../games/duke/actors/dukeweapons/tripbomb.zs | 2 +- 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/source/games/duke/src/gamevar.cpp b/source/games/duke/src/gamevar.cpp index 5f2b56b95..aa564ffb8 100644 --- a/source/games/duke/src/gamevar.cpp +++ b/source/games/duke/src/gamevar.cpp @@ -1016,7 +1016,7 @@ void AddSystemVars() AddGameVar(aszBuf, WEAPON_FLAG_STANDSTILL, GAMEVAR_FLAG_PERPLAYER | GAMEVAR_FLAG_SYSTEM); sprintf(aszBuf, "WEAPON%d_SHOOTS", TRIPBOMB_WEAPON); - AddGameVar(aszBuf, DTILE_HANDHOLDINGLASER, GAMEVAR_FLAG_PERPLAYER | GAMEVAR_FLAG_SYSTEM); + AddGameVar(aszBuf, DTILE_HANDHOLDINGLASER0, GAMEVAR_FLAG_PERPLAYER | GAMEVAR_FLAG_SYSTEM); sprintf(aszBuf, "WEAPON%d_SPAWNTIME", TRIPBOMB_WEAPON); AddGameVar(aszBuf, 0, GAMEVAR_FLAG_PERPLAYER | GAMEVAR_FLAG_SYSTEM); diff --git a/source/games/duke/src/hudweapon_d.cpp b/source/games/duke/src/hudweapon_d.cpp index 05874cd87..e8dc91cd8 100644 --- a/source/games/duke/src/hudweapon_d.cpp +++ b/source/games/duke/src/hudweapon_d.cpp @@ -62,6 +62,17 @@ inline static void hud_drawpal(double x, double y, int tilenum, int shade, int o // //--------------------------------------------------------------------------- +inline static void hud_drawpal(double x, double y, const char* tilenum, int shade, int orientation, int p, DAngle angle) +{ + hud_drawsprite(x, y, 1., angle.Degrees(), TexMan.CheckForTexture(tilenum, ETextureType::Any), shade, p, orientation); +} + +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + static void displayloogie(player_struct* p, double const interpfrac) { if (p->loogcnt == 0) return; @@ -111,7 +122,7 @@ static bool animateknee(int gs, player_struct* p, double xoffset, double yoffset static const int8_t knee_y[] = { 0,-8,-16,-32,-64,-84,-108,-108,-108,-72,-32,-8 }; const double kneei = interpolatedvalue(knee_y[p->oknee_incs], knee_y[p->knee_incs], interpfrac); - hud_drawpal(105 + (kneei * 0.25) + xoffset, 280 + kneei + yoffset, DTILE_KNEE, gs, 4, pal, angle); + hud_drawpal(105 + (kneei * 0.25) + xoffset, 280 + kneei + yoffset, "KNEE", gs, 4, pal, angle); return true; } @@ -125,10 +136,10 @@ static bool animateknee(int gs, player_struct* p, double xoffset, double yoffset static bool animateknuckles(int gs, player_struct* p, double xoffset, double yoffset, int pal, DAngle angle) { if (isWW2GI() || p->over_shoulder_on != 0 || p->knuckle_incs == 0 || p->GetActor()->spr.extra <= 0) return false; - + static const char* const frames[] = { "CRACKKNUCKLES0", "CRACKKNUCKLES1", "CRACKKNUCKLES2", "CRACKKNUCKLES3" }; static const uint8_t knuckle_frames[] = { 0,1,2,2,3,3,3,2,2,1,0 }; - hud_drawpal(160 + xoffset, 180 + yoffset, DTILE_CRACKKNUCKLES + knuckle_frames[p->knuckle_incs >> 1], gs, 4, pal, angle); + hud_drawpal(160 + xoffset, 180 + yoffset, frames[knuckle_frames[p->knuckle_incs >> 1]], gs, 4, pal, angle); return true; } @@ -163,10 +174,11 @@ static bool animatetip(int gs, player_struct* p, double xoffset, double yoffset, { if (p->tipincs == 0) return false; + static const char* frames[] = { "TIP0", "TIP1" }; static const int8_t tip_y[] = { 0,-8,-16,-32,-64,-84,-108,-108,-108,-108,-108,-108,-108,-108,-108,-108,-96,-72,-64,-32,-16 }; const double tipi = interpolatedvalue(tip_y[p->otipincs], tip_y[p->tipincs], interpfrac) * 0.5; - hud_drawpal(170 + xoffset, 240 + tipi + yoffset, DTILE_TIP + ((26 - p->tipincs) >> 4), gs, 0, pal, angle); + hud_drawpal(170 + xoffset, 240 + tipi + yoffset, frames[((26 - p->tipincs) >> 4)], gs, 0, pal, angle); return true; } @@ -181,15 +193,16 @@ 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 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); const int pal = p->access_spritenum != nullptr ? p->access_spritenum->spr.pal : 0; if ((p->access_incs-3) > 0 && (p->access_incs-3)>>3) - hud_drawpal(170 + (accessi * 0.25) + xoffset, 266 + accessi + yoffset, DTILE_HANDHOLDINGLASER + (p->access_incs >> 3), gs, 0, pal, angle); + hud_drawpal(170 + (accessi * 0.25) + xoffset, 266 + accessi + yoffset, frames[(p->access_incs >> 3)], gs, 0, pal, angle); else - hud_drawpal(170 + (accessi * 0.25) + xoffset, 266 + accessi + yoffset, DTILE_HANDHOLDINGACCESS, gs, 4, pal, angle); + hud_drawpal(170 + (accessi * 0.25) + xoffset, 266 + accessi + yoffset, "HANDHOLDINGACCESS", gs, 4, pal, angle); return true; } @@ -305,11 +318,11 @@ void displayweapon_d(int snum, double interpfrac) { if (*kb < 5 || *kb > 9) { - hud_drawpal(220 + offsets.X, 250 + offsets.Y, DTILE_KNEE, shade, o, pal2, angle); + hud_drawpal(220 + offsets.X, 250 + offsets.Y, "KNEE", shade, o, pal2, angle); } else { - hud_drawpal(160 + offsets.X, 214 + offsets.Y, DTILE_KNEE + 1, shade, o, pal2, angle); + hud_drawpal(160 + offsets.X, 214 + offsets.Y, "KNEE1", shade, o, pal2, angle); } } }; @@ -322,16 +335,17 @@ void displayweapon_d(int snum, double interpfrac) auto displaytripbomb = [&]() { + static const char* const frames[] = { "HANDHOLDINGLASER0", "HANDHOLDINGLASER1", "HANDHOLDINGLASER2", "HANDHOLDINGLASER3" }; 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, DTILE_HANDHOLDINGLASER + 3, shade, o, pal, angle); + hud_drawpal(142 + offsets.X, 234 + offsets.Y, "HANDHOLDINGLASER3", shade, o, pal, angle); - hud_drawpal(130 + offsets.X, 249 + offsets.Y, DTILE_HANDHOLDINGLASER + (*kb >> 2), shade, o, pal, angle); - hud_drawpal(152 + offsets.X, 249 + offsets.Y, DTILE_HANDHOLDINGLASER + (*kb >> 2), shade, o | 4, 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); }; //--------------------------------------------------------------------------- diff --git a/source/games/duke/src/namelist_d.h b/source/games/duke/src/namelist_d.h index 601104a4a..6363c7a5e 100644 --- a/source/games/duke/src/namelist_d.h +++ b/source/games/duke/src/namelist_d.h @@ -548,7 +548,10 @@ x(WALLBLOOD7, 2307) x(WALLBLOOD8, 2308) x(BURNING2, 2310) x(FIRE2, 2311) -x(CRACKKNUCKLES, 2324) +x(CRACKKNUCKLES0, 2324) +x(CRACKKNUCKLES1, 2325) +x(CRACKKNUCKLES2, 2326) +x(CRACKKNUCKLES3, 2327) x(SMALLSMOKE, 2329) x(SMALLSMOKEMAKER, 2330) x(FLOORFLAME, 2333) @@ -651,6 +654,7 @@ x(CREDITPAGE2, 2505) x(CREDITPAGE3, 2506) x(DEVISTATOR, 2510) x(KNEE, 2521) +x(KNEE1, 2522) x(CROSSHAIR, 2523) x(FIRSTGUN, 2524) x(FIRSTGUNRELOAD, 2528) @@ -666,13 +670,17 @@ x(RPGMUZZLEFLASH, 2545) x(FREEZE, 2548) x(CATLITE, 2552) x(SHRINKER, 2556) -x(HANDHOLDINGLASER, 2563) +x(HANDHOLDINGLASER0, 2563) +x(HANDHOLDINGLASER1, 2563) +x(HANDHOLDINGLASER2, 2563) +x(HANDHOLDINGLASER3, 2563) x(TRIPBOMB, 2566) x(LASERLINE, 2567) x(HANDHOLDINGACCESS, 2568) x(HANDREMOTE, 2570) x(HANDTHROW, 2573) -x(TIP, 2576) +x(TIP0, 2576) +x(TIP1, 2576) x(GLAIR, 2578) x(SCUBAMASK, 2581) x(SPACEMASK, 2584) diff --git a/source/games/duke/src/namelist_r.h b/source/games/duke/src/namelist_r.h index a36082983..994a903be 100644 --- a/source/games/duke/src/namelist_r.h +++ b/source/games/duke/src/namelist_r.h @@ -615,8 +615,6 @@ x(SHELL1, 1703) x(SHOTGUNSHELL, 1704) x(RPGMUZZLEFLASH, 1714) x(CATLITE, 1721) -x(HANDHOLDINGLASER, 1732) -x(HANDHOLDINGACCESS, 1737) x(HANDREMOTE, 1739) x(TIP, 1745) x(GLAIR, 1747) diff --git a/source/games/duke/src/premap_d.cpp b/source/games/duke/src/premap_d.cpp index ec6c7f430..7a8abca9e 100644 --- a/source/games/duke/src/premap_d.cpp +++ b/source/games/duke/src/premap_d.cpp @@ -185,10 +185,10 @@ static void cachegoodsprites(void) for( i = DTILE_BURNING2; i < DTILE_BURNING2+14; i++) tloadtile(i); - for( i = DTILE_CRACKKNUCKLES; i < DTILE_CRACKKNUCKLES+4; i++) + for( i = DTILE_CRACKKNUCKLES0; i <= DTILE_CRACKKNUCKLES3; i++) tloadtile(i); - for( i = DTILE_FIRSTGUN; i < DTILE_FIRSTGUN+3 ; i++ ) + for( i = DTILE_FIRSTGUN; i <= DTILE_FIRSTGUN+2 ; i++ ) tloadtile(i); for( i = DTILE_EXPLOSION2; i < DTILE_EXPLOSION2+21 ; i++ ) diff --git a/wadsrc/static/zscript/games/duke/actors/dukeweapons/tripbomb.zs b/wadsrc/static/zscript/games/duke/actors/dukeweapons/tripbomb.zs index 17008331c..94fabde01 100644 --- a/wadsrc/static/zscript/games/duke/actors/dukeweapons/tripbomb.zs +++ b/wadsrc/static/zscript/games/duke/actors/dukeweapons/tripbomb.zs @@ -272,7 +272,7 @@ class DukeHandHoldingLaser : DukeActor { default { - pic "HANDHOLDINGLASER"; + pic "HANDHOLDINGLASER0"; } override bool ShootThis(DukeActor shooter, DukePlayer p, Vector3 pos, double ang) const