Remove attempt at being compatible with the original ranges of ang and horiz values, and introduce a q16 version of drawrooms (and showroom)

git-svn-id: https://svn.eduke32.com/eduke32@6735 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2018-03-07 12:02:03 +00:00
parent b99aaf0438
commit ee37c04623
8 changed files with 39 additions and 31 deletions

View file

@ -1069,8 +1069,9 @@ void preparemirror(int32_t dax, int32_t day, fix16_t daang, int16_t dawall,
int32_t *tposx, int32_t *tposy, fix16_t *tang);
void completemirror(void);
int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
fix16_t daang, fix16_t dahoriz, int16_t dacursectnum);
int32_t drawrooms_q16(int32_t daposx, int32_t daposy, int32_t daposz, fix16_t daang, fix16_t dahoriz, int16_t dacursectnum);
int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, int16_t daang, int16_t dahoriz, int16_t dacursectnum);
void drawmasks(void);
void clearview(int32_t dacol);
void clearallviews(int32_t dacol);

View file

@ -980,7 +980,7 @@ void yax_drawrooms(void (*SpriteAnimFunc)(int32_t,int32_t,int32_t,int32_t),
int32_t odsprcnt = yax_spritesortcnt[yax_globallev];
#endif
// +MAXSECTORS: force
drawrooms(globalposx,globalposy,globalposz,globalang,horiz,k+MAXSECTORS);
drawrooms_q16(globalposx,globalposy,globalposz,qglobalang,horiz,k+MAXSECTORS);
if (numhere > 1)
for (i=0; i<(numsectors+7)>>3; i++)
lgotsector[i] |= gotsector[i];
@ -1058,7 +1058,7 @@ void yax_drawrooms(void (*SpriteAnimFunc)(int32_t,int32_t,int32_t,int32_t),
for (nmp=r_tror_nomaskpass; nmp>=0; nmp--)
{
yax_nomaskpass = nmp;
drawrooms(globalposx,globalposy,globalposz,globalang,horiz,k+MAXSECTORS); // +MAXSECTORS: force
drawrooms_q16(globalposx,globalposy,globalposz,qglobalang,horiz,k+MAXSECTORS); // +MAXSECTORS: force
if (nmp==1)
{
@ -1101,7 +1101,7 @@ void yax_drawrooms(void (*SpriteAnimFunc)(int32_t,int32_t,int32_t,int32_t),
scansector_collectsprites = 0;
// draw base level
drawrooms(globalposx,globalposy,globalposz,globalang,horiz,
drawrooms_q16(globalposx,globalposy,globalposz,qglobalang,horiz,
osectnum + MAXSECTORS*didmirror);
// if (scansector_collectsprites)
// spritesortcnt = 0;
@ -7919,7 +7919,14 @@ void set_globalang(fix16_t ang)
//
// drawrooms
//
int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
int16_t daang, int16_t dahoriz, int16_t dacursectnum)
{
return drawrooms_q16(daposx, daposy, daposz, fix16_from_int(daang), fix16_from_int(dahoriz), dacursectnum);
}
int32_t drawrooms_q16(int32_t daposx, int32_t daposy, int32_t daposz,
fix16_t daang, fix16_t dahoriz, int16_t dacursectnum)
{
int32_t i, j, /*cz, fz,*/ closest;
@ -7930,15 +7937,8 @@ int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
beforedrawrooms = 0;
set_globalpos(daposx, daposy, daposz);
// support the old range of values
if ((dahoriz & 0xFFFF0000) == 0)
dahoriz = fix16_from_int(dahoriz);
if ((daang & 0xFFFF0000) == 0)
daang = fix16_from_int(daang);
set_globalang(daang);
global100horiz = dahoriz;
// xdimenscale is scale(xdimen,yxaspect,320);

View file

@ -5998,8 +5998,8 @@ void polymost_drawsprite(int32_t snum)
float const ft[4] = { ((float)(globalposy - vv.y)) * ff.y + ((float)(globalposx - vv.x)) * ff.x,
((float)(globalposx - vv.x)) * ff.y - ((float)(globalposy - vv.y)) * ff.x,
singlobalang * ff.y + cosglobalang * ff.x,
singlobalang * ff.x - cosglobalang * ff.y };
fsinglobalang * ff.y + fcosglobalang * ff.x,
fsinglobalang * ff.x - fcosglobalang * ff.y };
f = fviewingrange * -(1.f / (65536.f * 262144.f));
xtex.u = (float)ft[3] * f;

View file

@ -521,7 +521,7 @@ static void G_SE40(int32_t smoothratio)
if (getrendermode() == REND_POLYMER)
polymer_setanimatesprites(G_DoSpriteAnimations, CAMERA(pos.x), CAMERA(pos.y), fix16_to_int(CAMERA(q16ang)), smoothratio);
#endif
drawrooms(sprite[sprite2].x + x, sprite[sprite2].y + y,
drawrooms_q16(sprite[sprite2].x + x, sprite[sprite2].y + y,
z + renderz, CAMERA(q16ang), CAMERA(q16horiz), sect);
drawing_ror = 1 + level;
@ -616,12 +616,12 @@ void G_HandleMirror(int32_t x, int32_t y, int32_t z, fix16_t a, fix16_t q16horiz
int32_t didmirror;
yax_preparedrawrooms();
didmirror = drawrooms(tposx,tposy,z,tang,q16horiz,g_mirrorSector[i]+MAXSECTORS);
didmirror = drawrooms_q16(tposx,tposy,z,tang,q16horiz,g_mirrorSector[i]+MAXSECTORS);
yax_drawrooms(G_DoSpriteAnimations, g_mirrorSector[i], didmirror, smoothratio);
}
#ifdef USE_OPENGL
else
drawrooms(tposx,tposy,z,tang,q16horiz,g_mirrorSector[i]+MAXSECTORS);
drawrooms_q16(tposx,tposy,z,tang,q16horiz,g_mirrorSector[i]+MAXSECTORS);
// XXX: Sprites don't get drawn with TROR/Polymost
#endif
display_mirror = 1;
@ -759,7 +759,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
polymer_setanimatesprites(G_DoSpriteAnimations, pSprite->x, pSprite->y, fix16_to_int(CAMERA(q16ang)), smoothRatio);
#endif
yax_preparedrawrooms();
drawrooms(pSprite->x, pSprite->y, pSprite->z - ZOFFSET6, CAMERA(q16ang), pSprite->yvel, pSprite->sectnum);
drawrooms_q16(pSprite->x, pSprite->y, pSprite->z - ZOFFSET6, CAMERA(q16ang), fix16_from_int(pSprite->yvel), pSprite->sectnum);
yax_drawrooms(G_DoSpriteAnimations, pSprite->sectnum, 0, smoothRatio);
G_DoSpriteAnimations(pSprite->x, pSprite->y, fix16_to_int(CAMERA(q16ang)), smoothRatio);
drawmasks();
@ -1030,7 +1030,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
gotpic[MIRROR>>3] |= (1<<(MIRROR&7));
#else
yax_preparedrawrooms();
drawrooms(CAMERA(pos.x),CAMERA(pos.y),CAMERA(pos.z),CAMERA(q16ang),CAMERA(q16horiz),CAMERA(sect));
drawrooms_q16(CAMERA(pos.x),CAMERA(pos.y),CAMERA(pos.z),CAMERA(q16ang),CAMERA(q16horiz),CAMERA(sect));
yax_drawrooms(G_DoSpriteAnimations, CAMERA(sect), 0, smoothRatio);
#ifdef LEGACY_ROR
if ((unsigned)ror_sprite < MAXSPRITES && drawing_ror == 1) // viewing from bottom

View file

@ -465,6 +465,8 @@ static tokenmap_t const vm_keywords[] =
{ "shootvar", CON_SHOOTVAR },
{ "showview", CON_SHOWVIEW },
{ "showviewunbiased", CON_SHOWVIEWUNBIASED },
{ "showviewq16", CON_SHOWVIEWQ16 },
{ "showviewq16unbiased", CON_SHOWVIEWQ16UNBIASED },
{ "sin", CON_SIN },
{ "sizeat", CON_SIZEAT },
{ "sizeto", CON_SIZETO },
@ -4819,6 +4821,8 @@ DO_DEFSTATE:
case CON_SHOWVIEW:
case CON_SHOWVIEWUNBIASED:
case CON_SHOWVIEWQ16:
case CON_SHOWVIEWQ16UNBIASED:
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
{
C_ReportError(ERROR_EVENTONLY);

View file

@ -1228,6 +1228,8 @@ enum ScriptKeywords_t
CON_IFVARBE, // 422
CON_IFVARVARBE, // 423
CON_UNDEFINECHEAT, // 424
CON_SHOWVIEWQ16, // 425
CON_SHOWVIEWQ16UNBIASED,// 426
CON_END
};
// KEEPINSYNC with the keyword list in lunatic/con_lang.lua

View file

@ -1176,7 +1176,7 @@ int G_StartTrack(int const levelNum)
}
#endif
LUNATIC_EXTERN void G_ShowView(vec3_t vec, int32_t a, int32_t horiz, int32_t sect,
LUNATIC_EXTERN void G_ShowView(vec3_t vec, fix16_t a, fix16_t horiz, int32_t sect,
int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t unbiasedp)
{
if (g_screenCapture)
@ -1211,13 +1211,6 @@ LUNATIC_EXTERN void G_ShowView(vec3_t vec, int32_t a, int32_t horiz, int32_t sec
y2 = scale(y2,ydim-1,199);
}
// support the old range of values
if ((horiz & 0xFFFF0000) == 0)
horiz = fix16_from_int(horiz);
if ((a & 0xFFFF0000) == 0)
a = fix16_from_int(a);
horiz = fix16_clamp(horiz, F16(HORIZ_MIN), F16(HORIZ_MAX));
int const onewaspect = newaspect_enable;
@ -1235,7 +1228,7 @@ LUNATIC_EXTERN void G_ShowView(vec3_t vec, int32_t a, int32_t horiz, int32_t sec
polymer_setanimatesprites(G_DoSpriteAnimations, vec.x, vec.y, fix16_to_int(a), smoothratio);
#endif
yax_preparedrawrooms();
drawrooms(vec.x, vec.y, vec.z, a, horiz, sect);
drawrooms_q16(vec.x, vec.y, vec.z, a, horiz, sect);
yax_drawrooms(G_DoSpriteAnimations, sect, 0, smoothratio);
display_mirror = 2;
@ -2872,6 +2865,8 @@ nullquote:
case CON_SHOWVIEW:
case CON_SHOWVIEWUNBIASED:
case CON_SHOWVIEWQ16:
case CON_SHOWVIEWQ16UNBIASED:
insptr++;
{
struct {
@ -2893,7 +2888,13 @@ nullquote:
continue;
}
G_ShowView(v.vec, v.params[0], v.params[1], v.params[2], v.scrn[0].x, v.scrn[0].y, v.scrn[1].x, v.scrn[1].y, (tw != CON_SHOWVIEW));
if (tw != CON_SHOWVIEWQ16 && tw != CON_SHOWVIEWQ16UNBIASED)
{
v.params[0] <<= 16;
v.params[1] <<= 16;
}
G_ShowView(v.vec, v.params[0], v.params[1], v.params[2], v.scrn[0].x, v.scrn[0].y, v.scrn[1].x, v.scrn[1].y, (tw != CON_SHOWVIEW && tw != CON_SHOWVIEWQ16));
continue;
}

View file

@ -111,7 +111,7 @@ static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum, int playerNu
void G_GetTimeDate(int32_t * const pValues);
int G_StartTrack(int const levelNum);
#ifdef LUNATIC
void G_ShowView(vec3_t vec, int32_t a, int32_t horiz, int32_t sect,
void G_ShowView(vec3_t vec, fix16_t a, fix16_t horiz, int32_t sect,
int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t unbiasedp);
void P_AddWeaponMaybeSwitchI(int32_t snum, int32_t weap);
void VM_FallSprite(int32_t i);