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); int32_t *tposx, int32_t *tposy, fix16_t *tang);
void completemirror(void); void completemirror(void);
int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, int32_t drawrooms_q16(int32_t daposx, int32_t daposy, int32_t daposz, fix16_t daang, fix16_t dahoriz, int16_t dacursectnum);
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 drawmasks(void);
void clearview(int32_t dacol); void clearview(int32_t dacol);
void clearallviews(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]; int32_t odsprcnt = yax_spritesortcnt[yax_globallev];
#endif #endif
// +MAXSECTORS: force // +MAXSECTORS: force
drawrooms(globalposx,globalposy,globalposz,globalang,horiz,k+MAXSECTORS); drawrooms_q16(globalposx,globalposy,globalposz,qglobalang,horiz,k+MAXSECTORS);
if (numhere > 1) if (numhere > 1)
for (i=0; i<(numsectors+7)>>3; i++) for (i=0; i<(numsectors+7)>>3; i++)
lgotsector[i] |= gotsector[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--) for (nmp=r_tror_nomaskpass; nmp>=0; nmp--)
{ {
yax_nomaskpass = 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) if (nmp==1)
{ {
@ -1101,7 +1101,7 @@ void yax_drawrooms(void (*SpriteAnimFunc)(int32_t,int32_t,int32_t,int32_t),
scansector_collectsprites = 0; scansector_collectsprites = 0;
// draw base level // draw base level
drawrooms(globalposx,globalposy,globalposz,globalang,horiz, drawrooms_q16(globalposx,globalposy,globalposz,qglobalang,horiz,
osectnum + MAXSECTORS*didmirror); osectnum + MAXSECTORS*didmirror);
// if (scansector_collectsprites) // if (scansector_collectsprites)
// spritesortcnt = 0; // spritesortcnt = 0;
@ -7919,7 +7919,14 @@ void set_globalang(fix16_t ang)
// //
// drawrooms // drawrooms
// //
int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, 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) fix16_t daang, fix16_t dahoriz, int16_t dacursectnum)
{ {
int32_t i, j, /*cz, fz,*/ closest; 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; beforedrawrooms = 0;
set_globalpos(daposx, daposy, daposz); 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); set_globalang(daang);
global100horiz = dahoriz; global100horiz = dahoriz;
// xdimenscale is scale(xdimen,yxaspect,320); // 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 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, ((float)(globalposx - vv.x)) * ff.y - ((float)(globalposy - vv.y)) * ff.x,
singlobalang * ff.y + cosglobalang * ff.x, fsinglobalang * ff.y + fcosglobalang * ff.x,
singlobalang * ff.x - cosglobalang * ff.y }; fsinglobalang * ff.x - fcosglobalang * ff.y };
f = fviewingrange * -(1.f / (65536.f * 262144.f)); f = fviewingrange * -(1.f / (65536.f * 262144.f));
xtex.u = (float)ft[3] * f; xtex.u = (float)ft[3] * f;

View file

@ -521,7 +521,7 @@ static void G_SE40(int32_t smoothratio)
if (getrendermode() == REND_POLYMER) if (getrendermode() == REND_POLYMER)
polymer_setanimatesprites(G_DoSpriteAnimations, CAMERA(pos.x), CAMERA(pos.y), fix16_to_int(CAMERA(q16ang)), smoothratio); polymer_setanimatesprites(G_DoSpriteAnimations, CAMERA(pos.x), CAMERA(pos.y), fix16_to_int(CAMERA(q16ang)), smoothratio);
#endif #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); z + renderz, CAMERA(q16ang), CAMERA(q16horiz), sect);
drawing_ror = 1 + level; 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; int32_t didmirror;
yax_preparedrawrooms(); 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); yax_drawrooms(G_DoSpriteAnimations, g_mirrorSector[i], didmirror, smoothratio);
} }
#ifdef USE_OPENGL #ifdef USE_OPENGL
else 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 // XXX: Sprites don't get drawn with TROR/Polymost
#endif #endif
display_mirror = 1; 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); polymer_setanimatesprites(G_DoSpriteAnimations, pSprite->x, pSprite->y, fix16_to_int(CAMERA(q16ang)), smoothRatio);
#endif #endif
yax_preparedrawrooms(); 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); yax_drawrooms(G_DoSpriteAnimations, pSprite->sectnum, 0, smoothRatio);
G_DoSpriteAnimations(pSprite->x, pSprite->y, fix16_to_int(CAMERA(q16ang)), smoothRatio); G_DoSpriteAnimations(pSprite->x, pSprite->y, fix16_to_int(CAMERA(q16ang)), smoothRatio);
drawmasks(); drawmasks();
@ -1030,7 +1030,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
gotpic[MIRROR>>3] |= (1<<(MIRROR&7)); gotpic[MIRROR>>3] |= (1<<(MIRROR&7));
#else #else
yax_preparedrawrooms(); 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); yax_drawrooms(G_DoSpriteAnimations, CAMERA(sect), 0, smoothRatio);
#ifdef LEGACY_ROR #ifdef LEGACY_ROR
if ((unsigned)ror_sprite < MAXSPRITES && drawing_ror == 1) // viewing from bottom 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 }, { "shootvar", CON_SHOOTVAR },
{ "showview", CON_SHOWVIEW }, { "showview", CON_SHOWVIEW },
{ "showviewunbiased", CON_SHOWVIEWUNBIASED }, { "showviewunbiased", CON_SHOWVIEWUNBIASED },
{ "showviewq16", CON_SHOWVIEWQ16 },
{ "showviewq16unbiased", CON_SHOWVIEWQ16UNBIASED },
{ "sin", CON_SIN }, { "sin", CON_SIN },
{ "sizeat", CON_SIZEAT }, { "sizeat", CON_SIZEAT },
{ "sizeto", CON_SIZETO }, { "sizeto", CON_SIZETO },
@ -4819,6 +4821,8 @@ DO_DEFSTATE:
case CON_SHOWVIEW: case CON_SHOWVIEW:
case CON_SHOWVIEWUNBIASED: case CON_SHOWVIEWUNBIASED:
case CON_SHOWVIEWQ16:
case CON_SHOWVIEWQ16UNBIASED:
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0)) if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
{ {
C_ReportError(ERROR_EVENTONLY); C_ReportError(ERROR_EVENTONLY);

View file

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

View file

@ -1176,7 +1176,7 @@ int G_StartTrack(int const levelNum)
} }
#endif #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) int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t unbiasedp)
{ {
if (g_screenCapture) 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); 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)); horiz = fix16_clamp(horiz, F16(HORIZ_MIN), F16(HORIZ_MAX));
int const onewaspect = newaspect_enable; 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); polymer_setanimatesprites(G_DoSpriteAnimations, vec.x, vec.y, fix16_to_int(a), smoothratio);
#endif #endif
yax_preparedrawrooms(); 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); yax_drawrooms(G_DoSpriteAnimations, sect, 0, smoothratio);
display_mirror = 2; display_mirror = 2;
@ -2872,6 +2865,8 @@ nullquote:
case CON_SHOWVIEW: case CON_SHOWVIEW:
case CON_SHOWVIEWUNBIASED: case CON_SHOWVIEWUNBIASED:
case CON_SHOWVIEWQ16:
case CON_SHOWVIEWQ16UNBIASED:
insptr++; insptr++;
{ {
struct { struct {
@ -2893,7 +2888,13 @@ nullquote:
continue; 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; 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); void G_GetTimeDate(int32_t * const pValues);
int G_StartTrack(int const levelNum); int G_StartTrack(int const levelNum);
#ifdef LUNATIC #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); 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 P_AddWeaponMaybeSwitchI(int32_t snum, int32_t weap);
void VM_FallSprite(int32_t i); void VM_FallSprite(int32_t i);