mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-07 00:41:13 +00:00
WANTED 2
This commit is contained in:
parent
5c7b66cc0f
commit
c00736efac
5 changed files with 140 additions and 23 deletions
|
@ -6604,6 +6604,13 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_PLAYERARROW_ITEM",
|
"S_PLAYERARROW_ITEM",
|
||||||
"S_PLAYERARROW_NUMBER",
|
"S_PLAYERARROW_NUMBER",
|
||||||
"S_PLAYERARROW_X",
|
"S_PLAYERARROW_X",
|
||||||
|
"S_PLAYERARROW_WANTED1",
|
||||||
|
"S_PLAYERARROW_WANTED2",
|
||||||
|
"S_PLAYERARROW_WANTED3",
|
||||||
|
"S_PLAYERARROW_WANTED4",
|
||||||
|
"S_PLAYERARROW_WANTED5",
|
||||||
|
"S_PLAYERARROW_WANTED6",
|
||||||
|
"S_PLAYERARROW_WANTED7",
|
||||||
|
|
||||||
"S_PLAYERBOMB", // Player bomb overlay
|
"S_PLAYERBOMB", // Player bomb overlay
|
||||||
"S_PLAYERITEM", // Player item overlay
|
"S_PLAYERITEM", // Player item overlay
|
||||||
|
@ -7238,6 +7245,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_FIREDITEM",
|
"MT_FIREDITEM",
|
||||||
|
|
||||||
"MT_PLAYERARROW",
|
"MT_PLAYERARROW",
|
||||||
|
"MT_PLAYERWANTED",
|
||||||
|
|
||||||
"MT_KARMAHITBOX",
|
"MT_KARMAHITBOX",
|
||||||
"MT_KARMAWHEEL",
|
"MT_KARMAWHEEL",
|
||||||
|
|
37
src/info.c
37
src/info.c
|
@ -59,7 +59,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"BANA","GSHE","JAWZ","SSMN","KRBM","BHOG","BLIG","LIGH","SINK","SITR",
|
"BANA","GSHE","JAWZ","SSMN","KRBM","BHOG","BLIG","LIGH","SINK","SITR",
|
||||||
"KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB",
|
"KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB",
|
||||||
"CHOM","SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ARRO",
|
"CHOM","SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ARRO",
|
||||||
"ITEM","ITMI","ITMN","PBOM","VIEW"
|
"ITEM","ITMI","ITMN","WANT","PBOM","VIEW"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
|
@ -2922,6 +2922,14 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_ITEM, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ITEM
|
{SPR_ITEM, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ITEM
|
||||||
{SPR_ITMN, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_NUMBER
|
{SPR_ITMN, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_NUMBER
|
||||||
{SPR_ITMN, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_X
|
{SPR_ITMN, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_X
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_PLAYERARROW_WANTED2}, // S_PLAYERARROW_WANTED1
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_PLAYERARROW_WANTED3}, // S_PLAYERARROW_WANTED2
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|2, 3, {NULL}, 0, 0, S_PLAYERARROW_WANTED4}, // S_PLAYERARROW_WANTED3
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_PLAYERARROW_WANTED5}, // S_PLAYERARROW_WANTED4
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|4, 3, {NULL}, 0, 0, S_PLAYERARROW_WANTED6}, // S_PLAYERARROW_WANTED5
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_PLAYERARROW_WANTED7}, // S_PLAYERARROW_WANTED6
|
||||||
|
{SPR_WANT, FF_FULLBRIGHT|6, 3, {NULL}, 0, 0, S_PLAYERARROW_WANTED1}, // S_PLAYERARROW_WANTED7
|
||||||
|
|
||||||
|
|
||||||
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
|
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
|
||||||
{SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM
|
{SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM
|
||||||
|
@ -16587,6 +16595,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_PLAYERWANTED
|
||||||
|
-1, // doomednum
|
||||||
|
S_PLAYERARROW_WANTED1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
8, // speed
|
||||||
|
36*FRACUNIT, // radius
|
||||||
|
37*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
16, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_KARMAHITBOX
|
{ // MT_KARMAHITBOX
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_PLAYERBOMB, // spawnstate
|
S_PLAYERBOMB, // spawnstate
|
||||||
|
|
|
@ -627,6 +627,7 @@ typedef enum sprite
|
||||||
SPR_ITEM,
|
SPR_ITEM,
|
||||||
SPR_ITMI,
|
SPR_ITMI,
|
||||||
SPR_ITMN,
|
SPR_ITMN,
|
||||||
|
SPR_WANT,
|
||||||
|
|
||||||
SPR_PBOM, // player bomb
|
SPR_PBOM, // player bomb
|
||||||
|
|
||||||
|
@ -3450,6 +3451,13 @@ typedef enum state
|
||||||
S_PLAYERARROW_ITEM,
|
S_PLAYERARROW_ITEM,
|
||||||
S_PLAYERARROW_NUMBER,
|
S_PLAYERARROW_NUMBER,
|
||||||
S_PLAYERARROW_X,
|
S_PLAYERARROW_X,
|
||||||
|
S_PLAYERARROW_WANTED1,
|
||||||
|
S_PLAYERARROW_WANTED2,
|
||||||
|
S_PLAYERARROW_WANTED3,
|
||||||
|
S_PLAYERARROW_WANTED4,
|
||||||
|
S_PLAYERARROW_WANTED5,
|
||||||
|
S_PLAYERARROW_WANTED6,
|
||||||
|
S_PLAYERARROW_WANTED7,
|
||||||
|
|
||||||
S_PLAYERBOMB,
|
S_PLAYERBOMB,
|
||||||
S_PLAYERITEM,
|
S_PLAYERITEM,
|
||||||
|
@ -4101,6 +4109,7 @@ typedef enum mobj_type
|
||||||
MT_FIREDITEM,
|
MT_FIREDITEM,
|
||||||
|
|
||||||
MT_PLAYERARROW,
|
MT_PLAYERARROW,
|
||||||
|
MT_PLAYERWANTED,
|
||||||
|
|
||||||
MT_KARMAHITBOX,
|
MT_KARMAHITBOX,
|
||||||
MT_KARMAWHEEL,
|
MT_KARMAWHEEL,
|
||||||
|
|
36
src/k_kart.c
36
src/k_kart.c
|
@ -4265,8 +4265,8 @@ static void K_initKartHUD(void)
|
||||||
SPBW_X = BASEVIDWIDTH/2; // 270
|
SPBW_X = BASEVIDWIDTH/2; // 270
|
||||||
SPBW_Y = BASEVIDHEIGHT- 24; // 176
|
SPBW_Y = BASEVIDHEIGHT- 24; // 176
|
||||||
// Battle WANTED poster
|
// Battle WANTED poster
|
||||||
WANT_X = BASEVIDWIDTH - 47; // 270
|
WANT_X = BASEVIDWIDTH - 55; // 270
|
||||||
WANT_Y = BASEVIDHEIGHT- 64; // 176
|
WANT_Y = BASEVIDHEIGHT- 71; // 176
|
||||||
|
|
||||||
if (splitscreen) // Splitscreen
|
if (splitscreen) // Splitscreen
|
||||||
{
|
{
|
||||||
|
@ -4916,13 +4916,14 @@ fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my
|
||||||
static void K_drawKartWanted(void)
|
static void K_drawKartWanted(void)
|
||||||
{
|
{
|
||||||
UINT8 i, numwanted = 0;
|
UINT8 i, numwanted = 0;
|
||||||
|
UINT8 *colormap = NULL;
|
||||||
|
|
||||||
/*if (splitscreen) // Can't fit the poster on screen, sadly
|
if (splitscreen) // Can't fit the poster on screen, sadly
|
||||||
{
|
{
|
||||||
if (K_IsPlayerWanted(stplyr) && leveltime % 10 > 4)
|
if (K_IsPlayerWanted(stplyr) && leveltime % 10 > 3)
|
||||||
V_DrawRightAlignedString(WANT_X, WANT_Y, K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_HUDTRANS|V_REDMAP), "WANTED");
|
V_DrawRightAlignedString(WANT_X, WANT_Y, K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_HUDTRANS|V_REDMAP), "WANTED");
|
||||||
return;
|
return;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
|
@ -4934,11 +4935,13 @@ static void K_drawKartWanted(void)
|
||||||
if (numwanted <= 0)
|
if (numwanted <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
V_DrawScaledPatch(WANT_X, WANT_Y, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, kp_wanted);
|
if (battlewanted[0] != -1)
|
||||||
|
colormap = R_GetTranslationColormap(0, players[battlewanted[0]].skincolor, GTC_CACHE);
|
||||||
|
V_DrawFixedPatch(WANT_X<<FRACBITS, WANT_Y<<FRACBITS, FRACUNIT, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, kp_wanted, colormap);
|
||||||
|
|
||||||
for (i = 0; i < numwanted; i++)
|
for (i = 0; i < numwanted; i++)
|
||||||
{
|
{
|
||||||
INT32 x = WANT_X+2, y = WANT_Y+16;
|
INT32 x = WANT_X+7, y = WANT_Y+20;
|
||||||
fixed_t scale = FRACUNIT/2;
|
fixed_t scale = FRACUNIT/2;
|
||||||
player_t *p = &players[battlewanted[i]];
|
player_t *p = &players[battlewanted[i]];
|
||||||
|
|
||||||
|
@ -4947,25 +4950,22 @@ static void K_drawKartWanted(void)
|
||||||
|
|
||||||
if (numwanted == 1)
|
if (numwanted == 1)
|
||||||
{
|
{
|
||||||
x++;
|
x++; //y++;
|
||||||
scale = FRACUNIT;
|
scale = FRACUNIT;
|
||||||
}
|
}
|
||||||
else if (numwanted < 3)
|
else
|
||||||
y += 8;
|
{
|
||||||
|
if (i & 1)
|
||||||
if (i > 1)
|
|
||||||
y += 8;
|
|
||||||
|
|
||||||
if (numwanted == 3 && i == 2)
|
|
||||||
x += 9;
|
|
||||||
else if (i & 1)
|
|
||||||
x += 18;
|
x += 18;
|
||||||
|
if (i > 1)
|
||||||
|
y += 17;
|
||||||
|
}
|
||||||
|
|
||||||
if (players[battlewanted[i]].skincolor == 0)
|
if (players[battlewanted[i]].skincolor == 0)
|
||||||
V_DrawFixedPatch(x*scale, y*scale, scale, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, faceprefix[p->skin], NULL);
|
V_DrawFixedPatch(x*scale, y*scale, scale, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, faceprefix[p->skin], NULL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 *colormap = R_GetTranslationColormap((p->mo->colorized ? TC_RAINBOW : p->skin), p->mo->color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(TC_RAINBOW, p->skincolor, GTC_CACHE);
|
||||||
V_DrawFixedPatch(x*scale, y*scale, scale, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, faceprefix[p->skin], colormap);
|
V_DrawFixedPatch(x*scale, y*scale, scale, V_HUDTRANS|V_SNAPTORIGHT|V_SNAPTOBOTTOM, faceprefix[p->skin], colormap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
71
src/p_mobj.c
71
src/p_mobj.c
|
@ -6891,10 +6891,14 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
fixed_t scale = mobj->target->scale;
|
fixed_t scale = mobj->target->scale;
|
||||||
mobj->color = mobj->target->color;
|
mobj->color = mobj->target->color;
|
||||||
|
|
||||||
if (!netgame || G_RaceGametype()
|
if (G_RaceGametype()
|
||||||
|| mobj->target->player == &players[displayplayer]
|
|| mobj->target->player == &players[displayplayer]
|
||||||
|| mobj->target->player->kartstuff[k_balloon] <= 0
|
|| mobj->target->player->kartstuff[k_balloon] <= 0
|
||||||
|| (mobj->target->player->mo->flags2 & MF2_DONTDRAW))
|
|| (mobj->target->player->mo->flags2 & MF2_DONTDRAW)
|
||||||
|
#if 1 // Set to 0 to test without needing to host
|
||||||
|
|| !netgame
|
||||||
|
#endif
|
||||||
|
)
|
||||||
mobj->flags2 |= MF2_DONTDRAW;
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
else
|
else
|
||||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
@ -6935,6 +6939,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (mobj->target->player->kartstuff[k_itemroulette])
|
if (mobj->target->player->kartstuff[k_itemroulette])
|
||||||
{
|
{
|
||||||
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
||||||
|
mobj->tracer->sprite = SPR_ITEM;
|
||||||
mobj->tracer->frame = FF_FULLBRIGHT|((mobj->target->player->kartstuff[k_itemroulette] % (13*3)) / 3);
|
mobj->tracer->frame = FF_FULLBRIGHT|((mobj->target->player->kartstuff[k_itemroulette] % (13*3)) / 3);
|
||||||
}
|
}
|
||||||
else if (mobj->target->player->kartstuff[k_itemtype])
|
else if (mobj->target->player->kartstuff[k_itemtype])
|
||||||
|
@ -6993,6 +6998,18 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
P_SetScale(numx, mobj->scale);
|
P_SetScale(numx, mobj->scale);
|
||||||
numx->destscale = scale;
|
numx->destscale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (K_IsPlayerWanted(mobj->target->player) && mobj->movecount != 1)
|
||||||
|
{
|
||||||
|
mobj_t *wanted = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PLAYERWANTED);
|
||||||
|
P_SetTarget(&wanted->target, mobj->target);
|
||||||
|
P_SetTarget(&wanted->tracer, mobj);
|
||||||
|
P_SetScale(wanted, mobj->scale);
|
||||||
|
wanted->destscale = scale;
|
||||||
|
mobj->movecount = 1;
|
||||||
|
}
|
||||||
|
else if (!K_IsPlayerWanted(mobj->target->player))
|
||||||
|
mobj->movecount = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||||
|
@ -7003,6 +7020,54 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MT_PLAYERWANTED:
|
||||||
|
if (mobj->target && mobj->target->health && mobj->tracer
|
||||||
|
&& mobj->target->player && !mobj->target->player->spectator
|
||||||
|
&& mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD
|
||||||
|
&& players[displayplayer].mo && !players[displayplayer].spectator)
|
||||||
|
{
|
||||||
|
fixed_t scale = mobj->target->scale;
|
||||||
|
|
||||||
|
if (!K_IsPlayerWanted(mobj->target->player))
|
||||||
|
{
|
||||||
|
mobj->tracer->movecount = 0;
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mobj->tracer->flags2 & MF2_DONTDRAW)
|
||||||
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
|
||||||
|
P_UnsetThingPosition(mobj);
|
||||||
|
mobj->x = mobj->target->x;
|
||||||
|
mobj->y = mobj->target->y;
|
||||||
|
|
||||||
|
if (!(mobj->target->eflags & MFE_VERTICALFLIP))
|
||||||
|
{
|
||||||
|
mobj->z = mobj->target->z + (P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT+(64*mobj->scale));
|
||||||
|
mobj->eflags &= ~MFE_VERTICALFLIP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj->z = mobj->target->z - (P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT+(64*mobj->scale));
|
||||||
|
mobj->eflags |= MFE_VERTICALFLIP;
|
||||||
|
}
|
||||||
|
P_SetThingPosition(mobj);
|
||||||
|
|
||||||
|
scale += FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayer].mo->x-mobj->target->x,
|
||||||
|
players[displayplayer].mo->y-mobj->target->y)), RING_DIST), mobj->target->scale);
|
||||||
|
if (scale > 16*FRACUNIT)
|
||||||
|
scale = 16*FRACUNIT;
|
||||||
|
mobj->destscale = scale;
|
||||||
|
}
|
||||||
|
else if (mobj->health > 0)
|
||||||
|
{
|
||||||
|
P_KillMobj(mobj, NULL, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
//}
|
//}
|
||||||
case MT_WATERDROP:
|
case MT_WATERDROP:
|
||||||
P_SceneryCheckWater(mobj);
|
P_SceneryCheckWater(mobj);
|
||||||
|
@ -8943,7 +9008,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
break;
|
break;
|
||||||
case MT_KARMAHITBOX: // SRB2Kart
|
case MT_KARMAHITBOX: // SRB2Kart
|
||||||
{
|
{
|
||||||
const fixed_t rad = FixedMul(mobjinfo[MT_PLAYER].radius, mobj->scale)
|
const fixed_t rad = FixedMul(mobjinfo[MT_PLAYER].radius, mobj->scale);
|
||||||
mobj_t *cur, *prev = mobj;
|
mobj_t *cur, *prev = mobj;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue