mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 23:02:03 +00:00
Clean up of mostly actors.c, but some other files along the way too.
- Rewrite some sprites-of-{stat,sector} loops using the SPRITES_OF, SPRITES_OF_SECT and new SPRITES_OF_SECT_SAFE macros. - In passing, identify some problems and mark them with 'XXX', but don't attempt to fix them yet. - The usual readability improvements... git-svn-id: https://svn.eduke32.com/eduke32@3679 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
52fc0bdfc5
commit
8064bd2f30
7 changed files with 434 additions and 464 deletions
|
@ -93,9 +93,13 @@ enum rendmode_t {
|
|||
#define PR_LIGHT_PRIO_LOW 4
|
||||
#define PR_LIGHT_PRIO_LOW_GAME 5
|
||||
|
||||
// Convenient sprite iterators, must not be used if any sprites are potentially deleted!
|
||||
// Convenient sprite iterators, must not be used if any sprites inside the loop
|
||||
// are potentially deleted or their sector changed...
|
||||
#define SPRITES_OF(Statnum, Iter) Iter=headspritestat[Statnum]; Iter>=0; Iter=nextspritestat[Iter]
|
||||
#define SPRITES_OF_SECT(Sectnum, Iter) Iter=headspritesect[Sectnum]; Iter>=0; Iter=nextspritesect[Iter]
|
||||
// ... in which case this iterator may be used:
|
||||
#define SPRITES_OF_SECT_SAFE(Sectnum, Iter, Next) Iter=headspritesect[Sectnum]; \
|
||||
Iter>=0 && (Next=nextspritestat[Iter], 1); Iter=Next
|
||||
|
||||
#define CLEARLINES2D(Startline, Numlines, Color) \
|
||||
clearbuf((char *)(frameplace + ((Startline)*bytesperline)), (bytesperline*(Numlines))>>2, (Color))
|
||||
|
|
|
@ -11387,15 +11387,15 @@ restart_grand:
|
|||
#ifdef YAX_ENABLE
|
||||
if (bn[0]<0 && bn[1]<0)
|
||||
#endif
|
||||
if ((nexts < 0) || (wal->cstat&32))
|
||||
return(0);
|
||||
if (nexts < 0 || wal->cstat&32)
|
||||
return 0;
|
||||
|
||||
t = divscale24(t,bot);
|
||||
x = x1 + mulscale24(x21,t);
|
||||
y = y1 + mulscale24(y21,t);
|
||||
z = z1 + mulscale24(z21,t);
|
||||
|
||||
getzsofslope((int16_t)dasectnum, x,y, &cfz[0],&cfz[1]);
|
||||
getzsofslope(dasectnum, x,y, &cfz[0],&cfz[1]);
|
||||
|
||||
if (z <= cfz[0] || z >= cfz[1])
|
||||
{
|
||||
|
@ -11425,16 +11425,16 @@ restart_grand:
|
|||
}
|
||||
|
||||
#endif
|
||||
return(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
if ((nexts < 0) || (wal->cstat&32))
|
||||
if (nexts < 0 || (wal->cstat&32))
|
||||
return 0;
|
||||
#endif
|
||||
getzsofslope((int16_t)nexts,x,y,&cfz[0],&cfz[1]);
|
||||
if ((z <= cfz[0]) || (z >= cfz[1]))
|
||||
return(0);
|
||||
getzsofslope(nexts, x,y, &cfz[0],&cfz[1]);
|
||||
if (z <= cfz[0] || z >= cfz[1])
|
||||
return 0;
|
||||
|
||||
add_nextsector:
|
||||
if (!(sectbitmap[nexts>>3] & (1<<(nexts&7))))
|
||||
|
@ -11456,10 +11456,10 @@ add_nextsector:
|
|||
#endif
|
||||
}
|
||||
|
||||
if ((sectbitmap[sect2>>3] & (1<<(sect2&7))))
|
||||
if (sectbitmap[sect2>>3] & (1<<(sect2&7)))
|
||||
return 1;
|
||||
|
||||
return(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void hit_set(hitdata_t *hit, int32_t sectnum, int32_t wallnum, int32_t spritenum,
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -29,6 +29,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define SLEEPTIME 1536
|
||||
#define ZOFFSET (1<<8)
|
||||
|
||||
#define ACTOR_MAXFALLINGZVEL 6144
|
||||
#define ACTOR_ONWATER_ADDZ (24<<8)
|
||||
|
||||
// KEEPINSYNC lunatic/con_lang.lua
|
||||
#define STAT_DEFAULT 0
|
||||
#define STAT_ACTOR 1
|
||||
|
|
|
@ -58,17 +58,19 @@ EXTERN_INLINE void G_RestoreInterpolations(void) //Stick at end of drawscreen
|
|||
|
||||
EXTERN_INLINE int32_t G_CheckForSpaceCeiling(int32_t sectnum)
|
||||
{
|
||||
return ((sector[sectnum].ceilingstat&1) && sector[sectnum].ceilingpal == 0 && (sector[sectnum].ceilingpicnum==MOONSKY1 || sector[sectnum].ceilingpicnum==BIGORBIT1)?1:0);
|
||||
return ((sector[sectnum].ceilingstat&1) && sector[sectnum].ceilingpal == 0 &&
|
||||
(sector[sectnum].ceilingpicnum==MOONSKY1 || sector[sectnum].ceilingpicnum==BIGORBIT1));
|
||||
}
|
||||
|
||||
EXTERN_INLINE int32_t G_CheckForSpaceFloor(int32_t sectnum)
|
||||
{
|
||||
return ((sector[sectnum].floorstat&1) && sector[sectnum].ceilingpal == 0 && ((sector[sectnum].floorpicnum==MOONSKY1)||(sector[sectnum].floorpicnum==BIGORBIT1))?1:0);
|
||||
return ((sector[sectnum].floorstat&1) && sector[sectnum].ceilingpal == 0 &&
|
||||
(sector[sectnum].floorpicnum==MOONSKY1 || sector[sectnum].floorpicnum==BIGORBIT1));
|
||||
}
|
||||
|
||||
EXTERN_INLINE int32_t A_CheckEnemySprite(const spritetype *s)
|
||||
{
|
||||
return(A_CheckEnemyTile(s->picnum));
|
||||
return A_CheckEnemyTile(s->picnum);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -872,19 +872,21 @@ static void VM_Fall(int32_t g_i, spritetype *g_sp)
|
|||
actor[g_i].cgg = 3;
|
||||
}
|
||||
|
||||
if (g_sp->z < (actor[g_i].floorz-ZOFFSET))
|
||||
if (g_sp->z < actor[g_i].floorz-ZOFFSET)
|
||||
{
|
||||
g_sp->z += g_sp->zvel = min(6144, g_sp->zvel+j);
|
||||
g_sp->zvel = min(g_sp->zvel+j, ACTOR_MAXFALLINGZVEL);
|
||||
g_sp->z += g_sp->zvel;
|
||||
#ifdef YAX_ENABLE
|
||||
j = yax_getbunch(g_sp->sectnum, YAX_FLOOR);
|
||||
if (j >= 0 && (sector[g_sp->sectnum].floorstat&512)==0)
|
||||
if (yax_getbunch(g_sp->sectnum, YAX_FLOOR) >= 0 &&
|
||||
(sector[g_sp->sectnum].floorstat&512)==0)
|
||||
setspritez(g_i, (vec3_t *)g_sp);
|
||||
else
|
||||
#endif
|
||||
if (g_sp->z > (actor[g_i].floorz - ZOFFSET))
|
||||
g_sp->z = (actor[g_i].floorz - ZOFFSET);
|
||||
if (g_sp->z > actor[g_i].floorz - ZOFFSET)
|
||||
g_sp->z = actor[g_i].floorz - ZOFFSET;
|
||||
return;
|
||||
}
|
||||
|
||||
g_sp->z = actor[g_i].floorz - ZOFFSET;
|
||||
|
||||
if (A_CheckEnemySprite(g_sp) || (g_sp->picnum == APLAYER && g_sp->owner >= 0))
|
||||
|
@ -899,17 +901,20 @@ static void VM_Fall(int32_t g_i, spritetype *g_sp)
|
|||
A_PlaySound(SQUISHED,g_i);
|
||||
A_Spawn(g_i,BLOODPOOL);
|
||||
}
|
||||
|
||||
actor[g_i].picnum = SHOTSPARK1;
|
||||
actor[g_i].extra = 1;
|
||||
g_sp->zvel = 0;
|
||||
}
|
||||
else if (g_sp->zvel > 2048 && sector[g_sp->sectnum].lotag != ST_1_ABOVE_WATER)
|
||||
else if (g_sp->zvel > 2048 && sector[g_sp->sectnum].lotag != ST_1_ABOVE_WATER)
|
||||
{
|
||||
j = g_sp->sectnum;
|
||||
pushmove((vec3_t *)g_sp,(int16_t *)&j,128L,(4L<<8),(4L<<8),CLIPMASK0);
|
||||
if ((unsigned)j < MAXSECTORS)
|
||||
changespritesect(g_i,j);
|
||||
A_PlaySound(THUD,g_i);
|
||||
int16_t newsect = g_sp->sectnum;
|
||||
|
||||
pushmove((vec3_t *)g_sp, &newsect, 128, 4<<8, 4<<8, CLIPMASK0);
|
||||
if ((unsigned)newsect < MAXSECTORS)
|
||||
changespritesect(g_i, newsect);
|
||||
|
||||
A_PlaySound(THUD, g_i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -925,13 +930,18 @@ static void VM_Fall(int32_t g_i, spritetype *g_sp)
|
|||
{
|
||||
switch (DYNAMICTILEMAP(g_sp->picnum))
|
||||
{
|
||||
case OCTABRAIN__STATIC:
|
||||
case COMMANDER__STATIC:
|
||||
case DRONE__STATIC:
|
||||
break;
|
||||
|
||||
default:
|
||||
// fix for flying/jumping monsters getting stuck in water
|
||||
{
|
||||
#if !defined LUNATIC
|
||||
int32_t moveScriptOfs = vm.g_t[1];
|
||||
#endif
|
||||
|
||||
// fix for flying/jumping monsters getting stuck in water
|
||||
if ((g_sp->hitag & jumptoplayer) ||
|
||||
(G_HaveActor(g_sp->picnum) &&
|
||||
#if !defined LUNATIC
|
||||
|
@ -944,15 +954,13 @@ static void VM_Fall(int32_t g_i, spritetype *g_sp)
|
|||
// OSD_Printf("%d\n", script[moveScriptOfs + 1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// OSD_Printf("hitag: %d\n",g_sp->hitag);
|
||||
g_sp->z += (24<<8);
|
||||
case OCTABRAIN__STATIC:
|
||||
case COMMANDER__STATIC:
|
||||
case DRONE__STATIC:
|
||||
// OSD_Printf("hitag: %d\n",g_sp->hitag);
|
||||
g_sp->z += ACTOR_ONWATER_ADDZ;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -204,6 +204,7 @@ int32_t __fastcall A_FindPlayer(const spritetype *s, int32_t *d)
|
|||
if (!g_netServer && ud.multimode < 2)
|
||||
{
|
||||
DukePlayer_t *const myps = g_player[myconnectindex].ps;
|
||||
|
||||
*d = A_FP_ManhattanDist(myps, s);
|
||||
return myconnectindex;
|
||||
}
|
||||
|
@ -2954,7 +2955,8 @@ int32_t A_CheckHitSprite(int32_t i, int16_t *hitsp)
|
|||
|
||||
if (A_CheckEnemySprite(&sprite[i]))
|
||||
zoff = (42<<8);
|
||||
else if (PN == APLAYER) zoff = (39<<8);
|
||||
else if (PN == APLAYER)
|
||||
zoff = (39<<8);
|
||||
|
||||
SZ -= zoff;
|
||||
hitscan((const vec3_t *)&sprite[i],SECT,
|
||||
|
@ -2966,9 +2968,9 @@ int32_t A_CheckHitSprite(int32_t i, int16_t *hitsp)
|
|||
*hitsp = hit.sprite;
|
||||
|
||||
if (hit.wall >= 0 && (wall[hit.wall].cstat&16) && A_CheckEnemySprite(&sprite[i]))
|
||||
return((1<<30));
|
||||
return 1<<30;
|
||||
|
||||
return (FindDistance2D(hit.pos.x-SX,hit.pos.y-SY));
|
||||
return FindDistance2D(hit.pos.x-SX,hit.pos.y-SY);
|
||||
}
|
||||
|
||||
static int32_t P_FindWall(DukePlayer_t *p,int16_t *hitw)
|
||||
|
@ -2984,7 +2986,7 @@ static int32_t P_FindWall(DukePlayer_t *p,int16_t *hitw)
|
|||
if (hit.wall < 0)
|
||||
return INT32_MAX;
|
||||
|
||||
return (FindDistance2D(hit.pos.x-p->pos.x,hit.pos.y-p->pos.y));
|
||||
return FindDistance2D(hit.pos.x-p->pos.x,hit.pos.y-p->pos.y);
|
||||
}
|
||||
|
||||
// returns 1 if sprite i should not be considered by neartag
|
||||
|
|
Loading…
Reference in a new issue