Merge branch 'papersign3' into 'master'
I fucked up papersigns (Resolve #288). Closes #288 See merge request STJr/SRB2Internal!471
This commit is contained in:
commit
3e7242af3c
|
@ -5121,7 +5121,7 @@ void A_SignPlayer(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (actor->tracer == NULL || locvar1 < -3 || locvar1 >= numskins)
|
if (actor->tracer == NULL || locvar1 < -3 || locvar1 >= numskins || signcolor >= MAXTRANSLATIONS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if no face overlay, spawn one
|
// if no face overlay, spawn one
|
||||||
|
@ -5148,26 +5148,9 @@ void A_SignPlayer(mobj_t *actor)
|
||||||
if (signcolor)
|
if (signcolor)
|
||||||
;
|
;
|
||||||
else if ((actor->target->player->skincolor == skin->prefcolor) && (skin->prefoppositecolor)) // Set it as the skin's preferred oppositecolor?
|
else if ((actor->target->player->skincolor == skin->prefcolor) && (skin->prefoppositecolor)) // Set it as the skin's preferred oppositecolor?
|
||||||
{
|
|
||||||
signcolor = skin->prefoppositecolor;
|
signcolor = skin->prefoppositecolor;
|
||||||
/*
|
|
||||||
If you're here from the comment above Color_Opposite,
|
|
||||||
the following line is the one which is dependent on the
|
|
||||||
array being symmetrical. It gets the opposite of the
|
|
||||||
opposite of your desired colour just so it can get the
|
|
||||||
brightness frame for the End Sign. It's not a great
|
|
||||||
design choice, but it's constant time array access and
|
|
||||||
the idea that the colours should be OPPOSITES is kind
|
|
||||||
of in the name. If you have a better idea, feel free
|
|
||||||
to let me know. ~toast 2016/07/20
|
|
||||||
*/
|
|
||||||
signframe += (15 - Color_Opposite[Color_Opposite[skin->prefoppositecolor - 1][0] - 1][1]);
|
|
||||||
}
|
|
||||||
else if (actor->target->player->skincolor) // Set the sign to be an appropriate background color for this player's skincolor.
|
else if (actor->target->player->skincolor) // Set the sign to be an appropriate background color for this player's skincolor.
|
||||||
{
|
|
||||||
signcolor = Color_Opposite[actor->target->player->skincolor - 1][0];
|
signcolor = Color_Opposite[actor->target->player->skincolor - 1][0];
|
||||||
signframe += (15 - Color_Opposite[actor->target->player->skincolor - 1][1]);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
signcolor = SKINCOLOR_NONE;
|
signcolor = SKINCOLOR_NONE;
|
||||||
}
|
}
|
||||||
|
@ -5188,10 +5171,10 @@ void A_SignPlayer(mobj_t *actor)
|
||||||
skinnum = P_RandomKey(skincount);
|
skinnum = P_RandomKey(skincount);
|
||||||
for (skincount = 0; skincount < numskins; skincount++)
|
for (skincount = 0; skincount < numskins; skincount++)
|
||||||
{
|
{
|
||||||
if (skincheck(skincount))
|
|
||||||
skinnum++;
|
|
||||||
if (skincount > skinnum)
|
if (skincount > skinnum)
|
||||||
break;
|
break;
|
||||||
|
if (skincheck(skincount))
|
||||||
|
skinnum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // otherwise, advance 1 skin
|
else // otherwise, advance 1 skin
|
||||||
|
@ -5203,42 +5186,46 @@ void A_SignPlayer(mobj_t *actor)
|
||||||
skin = &skins[skinnum];
|
skin = &skins[skinnum];
|
||||||
}
|
}
|
||||||
else // specific skin
|
else // specific skin
|
||||||
{
|
|
||||||
skin = &skins[locvar1];
|
skin = &skins[locvar1];
|
||||||
}
|
|
||||||
|
|
||||||
facecolor = skin->prefcolor;
|
facecolor = skin->prefcolor;
|
||||||
if (signcolor)
|
if (signcolor)
|
||||||
;
|
;
|
||||||
else if (skin->prefoppositecolor)
|
else if (skin->prefoppositecolor)
|
||||||
{
|
|
||||||
signcolor = skin->prefoppositecolor;
|
signcolor = skin->prefoppositecolor;
|
||||||
}
|
else if (facecolor)
|
||||||
else
|
|
||||||
{
|
|
||||||
signcolor = Color_Opposite[facecolor - 1][0];
|
signcolor = Color_Opposite[facecolor - 1][0];
|
||||||
}
|
|
||||||
signframe += (15 - Color_Opposite[Color_Opposite[signcolor - 1][0] - 1][1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skin != NULL && skin->sprites[SPR2_SIGN].numframes) // player face
|
if (skin && skin->sprites[SPR2_SIGN].numframes) // player face
|
||||||
{
|
{
|
||||||
ov->color = facecolor;
|
ov->color = facecolor;
|
||||||
ov->skin = skin;
|
ov->skin = skin;
|
||||||
P_SetMobjState(ov, actor->info->seestate); // S_PLAY_SIGN
|
P_SetMobjState(ov, actor->info->seestate); // S_PLAY_SIGN
|
||||||
actor->tracer->color = signcolor;
|
|
||||||
actor->tracer->frame = signframe;
|
|
||||||
}
|
}
|
||||||
else // Eggman face
|
else // Eggman face
|
||||||
{
|
{
|
||||||
ov->color = SKINCOLOR_NONE;
|
ov->color = SKINCOLOR_NONE;
|
||||||
P_SetMobjState(ov, actor->info->meleestate); // S_EGGMANSIGN
|
P_SetMobjState(ov, actor->info->meleestate); // S_EGGMANSIGN
|
||||||
if (signcolor)
|
if (!signcolor)
|
||||||
actor->tracer->color = signcolor;
|
signcolor = SKINCOLOR_CARBON;
|
||||||
else
|
|
||||||
actor->tracer->color = signcolor = SKINCOLOR_CARBON;
|
|
||||||
actor->tracer->frame = signframe += (15 - Color_Opposite[Color_Opposite[signcolor - 1][0] - 1][1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actor->tracer->color = signcolor;
|
||||||
|
/*
|
||||||
|
If you're here from the comment above Color_Opposite,
|
||||||
|
the following line is the one which is dependent on the
|
||||||
|
array being symmetrical. It gets the opposite of the
|
||||||
|
opposite of your desired colour just so it can get the
|
||||||
|
brightness frame for the End Sign. It's not a great
|
||||||
|
design choice, but it's constant time array access and
|
||||||
|
the idea that the colours should be OPPOSITES is kind
|
||||||
|
of in the name. If you have a better idea, feel free
|
||||||
|
to let me know. ~toast 2016/07/20
|
||||||
|
*/
|
||||||
|
if (signcolor && signcolor < MAXSKINCOLORS)
|
||||||
|
signframe += (15 - Color_Opposite[Color_Opposite[signcolor - 1][0] - 1][1]);
|
||||||
|
actor->tracer->frame = signframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function: A_OverlayThink
|
// Function: A_OverlayThink
|
||||||
|
|
|
@ -1196,20 +1196,20 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
#ifdef ROTSPRITE
|
#ifdef ROTSPRITE
|
||||||
sprinfo = NULL;
|
sprinfo = NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
if (rot >= sprdef->numframes)
|
if (rot >= sprdef->numframes)
|
||||||
{
|
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("R_ProjectSprite: invalid sprite frame %s/%s for %s\n"),
|
|
||||||
sizeu1(rot), sizeu2(sprdef->numframes), sprnames[thing->sprite]);
|
|
||||||
thing->sprite = states[S_UNKNOWN].sprite;
|
|
||||||
thing->frame = states[S_UNKNOWN].frame;
|
|
||||||
sprdef = &sprites[thing->sprite];
|
|
||||||
rot = thing->frame&FF_FRAMEMASK;
|
|
||||||
if (!thing->skin)
|
|
||||||
{
|
{
|
||||||
thing->state->sprite = thing->sprite;
|
CONS_Alert(CONS_ERROR, M_GetText("R_ProjectSprite: invalid sprite frame %s/%s for %s\n"),
|
||||||
thing->state->frame = thing->frame;
|
sizeu1(rot), sizeu2(sprdef->numframes), sprnames[thing->sprite]);
|
||||||
|
if (thing->sprite == thing->state->sprite && thing->frame == thing->state->frame)
|
||||||
|
{
|
||||||
|
thing->state->sprite = states[S_UNKNOWN].sprite;
|
||||||
|
thing->state->frame = states[S_UNKNOWN].frame;
|
||||||
|
}
|
||||||
|
thing->sprite = states[S_UNKNOWN].sprite;
|
||||||
|
thing->frame = states[S_UNKNOWN].frame;
|
||||||
|
sprdef = &sprites[thing->sprite];
|
||||||
|
rot = thing->frame&FF_FRAMEMASK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue