mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
git-svn-id: https://svn.eduke32.com/eduke32@1207 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
9095a4911d
commit
16084e989e
18 changed files with 572 additions and 459 deletions
|
@ -480,6 +480,8 @@ int32_t setsprite(int16_t spritenum, int32_t newx, int32_t newy, int32_t newz)
|
||||||
|
|
||||||
int32_t screencapture(char *filename, char inverseit);
|
int32_t screencapture(char *filename, char inverseit);
|
||||||
|
|
||||||
|
int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
||||||
|
|
||||||
// PLAG: line utility functions
|
// PLAG: line utility functions
|
||||||
typedef struct s_equation {
|
typedef struct s_equation {
|
||||||
float a, b, c;
|
float a, b, c;
|
||||||
|
|
|
@ -823,9 +823,11 @@ void editinput(void)
|
||||||
goalz += mousz;
|
goalz += mousz;
|
||||||
if (keystatus[buildkeys[BK_MOVEUP]]) //A (stand high)
|
if (keystatus[buildkeys[BK_MOVEUP]]) //A (stand high)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if (keystatus[0x1d]|keystatus[0x9d])
|
if (keystatus[0x1d]|keystatus[0x9d])
|
||||||
horiz = max(-100,horiz-((keystatus[buildkeys[BK_RUN]]+1)*synctics*2));
|
horiz = max(-100,horiz-((keystatus[buildkeys[BK_RUN]]+1)*synctics*2));
|
||||||
else
|
else
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
goalz -= (16<<8);
|
goalz -= (16<<8);
|
||||||
if (keystatus[buildkeys[BK_RUN]]) //Either shift key
|
if (keystatus[buildkeys[BK_RUN]]) //Either shift key
|
||||||
|
@ -834,9 +836,11 @@ void editinput(void)
|
||||||
}
|
}
|
||||||
if (keystatus[buildkeys[BK_MOVEDOWN]]) //Z (stand low)
|
if (keystatus[buildkeys[BK_MOVEDOWN]]) //Z (stand low)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if (keystatus[0x1d]|keystatus[0x9d])
|
if (keystatus[0x1d]|keystatus[0x9d])
|
||||||
horiz = min(300,horiz+((keystatus[buildkeys[BK_RUN]]+1)*synctics*2));
|
horiz = min(300,horiz+((keystatus[buildkeys[BK_RUN]]+1)*synctics*2));
|
||||||
else
|
else
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
goalz += (12<<8);
|
goalz += (12<<8);
|
||||||
if (keystatus[buildkeys[BK_RUN]]) //Either shift key
|
if (keystatus[buildkeys[BK_RUN]]) //Either shift key
|
||||||
|
|
|
@ -289,7 +289,6 @@ extern int32_t nextvoxid;
|
||||||
|
|
||||||
extern char faketile[MAXTILES];
|
extern char faketile[MAXTILES];
|
||||||
extern char *faketiledata[MAXTILES];
|
extern char *faketiledata[MAXTILES];
|
||||||
extern int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
|
||||||
|
|
||||||
#if defined(POLYMOST) && defined(USE_OPENGL)
|
#if defined(POLYMOST) && defined(USE_OPENGL)
|
||||||
extern float alphahackarray[MAXTILES];
|
extern float alphahackarray[MAXTILES];
|
||||||
|
|
|
@ -335,7 +335,14 @@ void A_RadiusDamage(int32_t i, int32_t r, int32_t hp1, int32_t hp2, int32_t
|
||||||
y1 = (((wal->y+wall[wal->point2].y)>>1)+s->y)>>1;
|
y1 = (((wal->y+wall[wal->point2].y)>>1)+s->y)>>1;
|
||||||
updatesector(x1,y1,§);
|
updatesector(x1,y1,§);
|
||||||
if (sect >= 0 && cansee(x1,y1,s->z,sect,s->x,s->y,s->z,s->sectnum))
|
if (sect >= 0 && cansee(x1,y1,s->z,sect,s->x,s->y,s->z,s->sectnum))
|
||||||
A_DamageWall(i,x,wal->x,wal->y,s->z,s->picnum);
|
{
|
||||||
|
vec3_t tmpvect;
|
||||||
|
|
||||||
|
Bmemcpy(&tmpvect, wal, sizeof(int32_t) * 2);
|
||||||
|
tmpvect.z = s->z;
|
||||||
|
|
||||||
|
A_DamageWall(i,x,&tmpvect,s->picnum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (sectcnt < sectend);
|
while (sectcnt < sectend);
|
||||||
|
@ -466,7 +473,7 @@ BOLT:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_t zchange, uint32_t cliptype)
|
int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
|
||||||
{
|
{
|
||||||
int32_t daz, oldx, oldy;
|
int32_t daz, oldx, oldy;
|
||||||
int32_t retval;
|
int32_t retval;
|
||||||
|
@ -475,9 +482,9 @@ int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_
|
||||||
|
|
||||||
if (sprite[spritenum].statnum == 5 || (bg && sprite[spritenum].xrepeat < 4))
|
if (sprite[spritenum].statnum == 5 || (bg && sprite[spritenum].xrepeat < 4))
|
||||||
{
|
{
|
||||||
sprite[spritenum].x += (xchange*TICSPERFRAME)>>2;
|
sprite[spritenum].x += (change->x*TICSPERFRAME)>>2;
|
||||||
sprite[spritenum].y += (ychange*TICSPERFRAME)>>2;
|
sprite[spritenum].y += (change->y*TICSPERFRAME)>>2;
|
||||||
sprite[spritenum].z += (zchange*TICSPERFRAME)>>2;
|
sprite[spritenum].z += (change->z*TICSPERFRAME)>>2;
|
||||||
if (bg)
|
if (bg)
|
||||||
setsprite(spritenum,sprite[spritenum].x,sprite[spritenum].y,sprite[spritenum].z);
|
setsprite(spritenum,sprite[spritenum].x,sprite[spritenum].y,sprite[spritenum].z);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -493,7 +500,7 @@ int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_
|
||||||
oldy = sprite[spritenum].y;
|
oldy = sprite[spritenum].y;
|
||||||
|
|
||||||
if (sprite[spritenum].xrepeat > 60)
|
if (sprite[spritenum].xrepeat > 60)
|
||||||
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((xchange*TICSPERFRAME)<<11),((ychange*TICSPERFRAME)<<11),1024L,(4<<8),(4<<8),cliptype);
|
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),1024L,(4<<8),(4<<8),cliptype);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sprite[spritenum].picnum == LIZMAN)
|
if (sprite[spritenum].picnum == LIZMAN)
|
||||||
|
@ -503,7 +510,7 @@ int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_
|
||||||
else
|
else
|
||||||
cd = 192L;
|
cd = 192L;
|
||||||
|
|
||||||
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((xchange*TICSPERFRAME)<<11),((ychange*TICSPERFRAME)<<11),cd,(4<<8),(4<<8),cliptype);
|
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),cd,(4<<8),(4<<8),cliptype);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dasectnum < 0 || (dasectnum >= 0 &&
|
if (dasectnum < 0 || (dasectnum >= 0 &&
|
||||||
|
@ -530,16 +537,16 @@ int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_
|
||||||
{
|
{
|
||||||
if (sprite[spritenum].statnum == 4)
|
if (sprite[spritenum].statnum == 4)
|
||||||
retval =
|
retval =
|
||||||
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((xchange*TICSPERFRAME)<<11),((ychange*TICSPERFRAME)<<11),8L,(4<<8),(4<<8),cliptype);
|
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),8L,(4<<8),(4<<8),cliptype);
|
||||||
else
|
else
|
||||||
retval =
|
retval =
|
||||||
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((xchange*TICSPERFRAME)<<11),((ychange*TICSPERFRAME)<<11),(int32_t)(sprite[spritenum].clipdist<<2),(4<<8),(4<<8),cliptype);
|
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),(int32_t)(sprite[spritenum].clipdist<<2),(4<<8),(4<<8),cliptype);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dasectnum >= 0)
|
if (dasectnum >= 0)
|
||||||
if ((dasectnum != sprite[spritenum].sectnum))
|
if ((dasectnum != sprite[spritenum].sectnum))
|
||||||
changespritesect(spritenum,dasectnum);
|
changespritesect(spritenum,dasectnum);
|
||||||
daz = sprite[spritenum].z + ((zchange*TICSPERFRAME)>>3);
|
daz = sprite[spritenum].z + ((change->z*TICSPERFRAME)>>3);
|
||||||
if ((daz > ActorExtra[spritenum].ceilingz) && (daz <= ActorExtra[spritenum].floorz))
|
if ((daz > ActorExtra[spritenum].ceilingz) && (daz <= ActorExtra[spritenum].floorz))
|
||||||
sprite[spritenum].z = daz;
|
sprite[spritenum].z = daz;
|
||||||
else if (retval == 0)
|
else if (retval == 0)
|
||||||
|
@ -550,9 +557,12 @@ int32_t A_MoveSprite(int32_t spritenum, int32_t xchange, int32_t ychange, int32_
|
||||||
|
|
||||||
inline int32_t A_SetSprite(int32_t i,uint32_t cliptype) //The set sprite function
|
inline int32_t A_SetSprite(int32_t i,uint32_t cliptype) //The set sprite function
|
||||||
{
|
{
|
||||||
return (A_MoveSprite(i,(sprite[i].xvel*(sintable[(sprite[i].ang+512)&2047]))>>14,
|
vec3_t davect;
|
||||||
(sprite[i].xvel*(sintable[sprite[i].ang&2047]))>>14,sprite[i].zvel,
|
|
||||||
cliptype)==0);
|
davect.x = (sprite[i].xvel*(sintable[(sprite[i].ang+512)&2047]))>>14;
|
||||||
|
davect.y = (sprite[i].xvel*(sintable[sprite[i].ang&2047]))>>14;
|
||||||
|
davect.z = sprite[i].zvel;
|
||||||
|
return (A_MoveSprite(i,&davect,cliptype)==0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef deletesprite
|
#undef deletesprite
|
||||||
|
@ -2347,7 +2357,8 @@ static void A_DoProjectileBounce(int32_t i)
|
||||||
static void G_MoveWeapons(void)
|
static void G_MoveWeapons(void)
|
||||||
{
|
{
|
||||||
int32_t i = headspritestat[STAT_PROJECTILE], j=0, k, f, nexti, p, q;
|
int32_t i = headspritestat[STAT_PROJECTILE], j=0, k, f, nexti, p, q;
|
||||||
int32_t dax,day,daz, x, ll;
|
vec3_t davect;
|
||||||
|
int32_t x, ll;
|
||||||
uint32_t qq;
|
uint32_t qq;
|
||||||
spritetype *s;
|
spritetype *s;
|
||||||
|
|
||||||
|
@ -2403,9 +2414,12 @@ static void G_MoveWeapons(void)
|
||||||
ll = s->zvel>>1;
|
ll = s->zvel>>1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bmemcpy(&davect,s,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
dax = s->x;
|
dax = s->x;
|
||||||
day = s->y;
|
day = s->y;
|
||||||
daz = s->z;
|
daz = s->z;
|
||||||
|
*/
|
||||||
|
|
||||||
A_GetZLimits(i);
|
A_GetZLimits(i);
|
||||||
qq = CLIPMASK1;
|
qq = CLIPMASK1;
|
||||||
|
@ -2426,12 +2440,19 @@ static void G_MoveWeapons(void)
|
||||||
|
|
||||||
for (f=1;f<=ActorExtra[i].projectile.velmult;f++)
|
for (f=1;f<=ActorExtra[i].projectile.velmult;f++)
|
||||||
{
|
{
|
||||||
|
vec3_t tmpvect;
|
||||||
|
/*
|
||||||
dax = s->x;
|
dax = s->x;
|
||||||
day = s->y;
|
day = s->y;
|
||||||
daz = s->z;
|
daz = s->z;
|
||||||
j = A_MoveSprite(i,
|
*/
|
||||||
(k*(sintable[(s->ang+512)&2047]))>>14,
|
Bmemcpy(&davect,s,sizeof(int32_t) * 3);
|
||||||
(k*(sintable[s->ang&2047]))>>14,ll,qq);
|
|
||||||
|
tmpvect.x = (k*(sintable[(s->ang+512)&2047]))>>14;
|
||||||
|
tmpvect.y = (k*(sintable[s->ang&2047]))>>14;
|
||||||
|
tmpvect.z = ll;
|
||||||
|
|
||||||
|
j = A_MoveSprite(i,&tmpvect,qq);
|
||||||
if (j)
|
if (j)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2462,9 +2483,13 @@ static void G_MoveWeapons(void)
|
||||||
if (ActorExtra[i].projectile.spawns >= 0)
|
if (ActorExtra[i].projectile.spawns >= 0)
|
||||||
{
|
{
|
||||||
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
||||||
|
|
||||||
|
Bmemcpy(&sprite[k],&davect,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
sprite[k].x = dax;
|
sprite[k].x = dax;
|
||||||
sprite[k].y = day;
|
sprite[k].y = day;
|
||||||
sprite[k].z = daz;
|
sprite[k].z = daz;
|
||||||
|
*/
|
||||||
|
|
||||||
if (ActorExtra[i].projectile.sxrepeat > 4)
|
if (ActorExtra[i].projectile.sxrepeat > 4)
|
||||||
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
||||||
|
@ -2496,9 +2521,13 @@ static void G_MoveWeapons(void)
|
||||||
if (ActorExtra[i].projectile.spawns >= 0)
|
if (ActorExtra[i].projectile.spawns >= 0)
|
||||||
{
|
{
|
||||||
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
||||||
|
|
||||||
|
Bmemcpy(&sprite[k],&davect,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
sprite[k].x = dax;
|
sprite[k].x = dax;
|
||||||
sprite[k].y = day;
|
sprite[k].y = day;
|
||||||
sprite[k].z = daz;
|
sprite[k].z = daz;
|
||||||
|
*/
|
||||||
|
|
||||||
if (ActorExtra[i].projectile.sxrepeat > 4)
|
if (ActorExtra[i].projectile.sxrepeat > 4)
|
||||||
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
||||||
|
@ -2612,9 +2641,12 @@ static void G_MoveWeapons(void)
|
||||||
if (ActorExtra[i].projectile.spawns >= 0)
|
if (ActorExtra[i].projectile.spawns >= 0)
|
||||||
{
|
{
|
||||||
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
||||||
|
Bmemcpy(&sprite[k],&davect,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
sprite[k].x = dax;
|
sprite[k].x = dax;
|
||||||
sprite[k].y = day;
|
sprite[k].y = day;
|
||||||
sprite[k].z = daz;
|
sprite[k].z = daz;
|
||||||
|
*/
|
||||||
|
|
||||||
if (ActorExtra[i].projectile.sxrepeat > 4)
|
if (ActorExtra[i].projectile.sxrepeat > 4)
|
||||||
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
||||||
|
@ -2648,8 +2680,10 @@ static void G_MoveWeapons(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setsprite(i,dax,day,daz);
|
vec3_t tmpvect;
|
||||||
A_DamageWall(i,j,s->x,s->y,s->z,s->picnum);
|
setsprite(i,davect.x,davect.y,davect.z);
|
||||||
|
Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3);
|
||||||
|
A_DamageWall(i,j,&tmpvect,s->picnum);
|
||||||
|
|
||||||
if (ActorExtra[i].projectile.workslike & PROJECTILE_BOUNCESOFFWALLS)
|
if (ActorExtra[i].projectile.workslike & PROJECTILE_BOUNCESOFFWALLS)
|
||||||
{
|
{
|
||||||
|
@ -2675,7 +2709,7 @@ static void G_MoveWeapons(void)
|
||||||
}
|
}
|
||||||
else if ((j&49152) == 16384)
|
else if ((j&49152) == 16384)
|
||||||
{
|
{
|
||||||
setsprite(i,dax,day,daz);
|
setsprite(i,davect.x,davect.y,davect.z);
|
||||||
|
|
||||||
if (s->zvel < 0)
|
if (s->zvel < 0)
|
||||||
{
|
{
|
||||||
|
@ -2708,9 +2742,12 @@ static void G_MoveWeapons(void)
|
||||||
if (ActorExtra[i].projectile.workslike & PROJECTILE_RPG && ActorExtra[i].projectile.spawns > 0)
|
if (ActorExtra[i].projectile.workslike & PROJECTILE_RPG && ActorExtra[i].projectile.spawns > 0)
|
||||||
{
|
{
|
||||||
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
k = A_Spawn(i,ActorExtra[i].projectile.spawns);
|
||||||
|
Bmemcpy(&sprite[k],&davect,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
sprite[k].x = dax;
|
sprite[k].x = dax;
|
||||||
sprite[k].y = day;
|
sprite[k].y = day;
|
||||||
sprite[k].z = daz;
|
sprite[k].z = daz;
|
||||||
|
*/
|
||||||
|
|
||||||
if (ActorExtra[i].projectile.sxrepeat > 4)
|
if (ActorExtra[i].projectile.sxrepeat > 4)
|
||||||
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
sprite[k].xrepeat=ActorExtra[i].projectile.sxrepeat;
|
||||||
|
@ -2819,9 +2856,12 @@ static void G_MoveWeapons(void)
|
||||||
ll = s->zvel>>1;
|
ll = s->zvel>>1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bmemcpy(&davect,s,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
dax = s->x;
|
dax = s->x;
|
||||||
day = s->y;
|
day = s->y;
|
||||||
daz = s->z;
|
daz = s->z;
|
||||||
|
*/
|
||||||
|
|
||||||
A_GetZLimits(i);
|
A_GetZLimits(i);
|
||||||
qq = CLIPMASK1;
|
qq = CLIPMASK1;
|
||||||
|
@ -2837,7 +2877,15 @@ static void G_MoveWeapons(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
j = A_MoveSprite(i,(k*(sintable[(s->ang+512)&2047]))>>14,(k*(sintable[s->ang&2047]))>>14,ll,qq);
|
{
|
||||||
|
vec3_t tmpvect;
|
||||||
|
|
||||||
|
tmpvect.x = (k*(sintable[(s->ang+512)&2047]))>>14;
|
||||||
|
tmpvect.y = (k*(sintable[s->ang&2047]))>>14;
|
||||||
|
tmpvect.z = ll;
|
||||||
|
j = A_MoveSprite(i,&tmpvect,qq);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (s->picnum == RPG && s->yvel >= 0 && sprite[s->yvel].sectnum < MAXSECTORS)
|
if (s->picnum == RPG && s->yvel >= 0 && sprite[s->yvel].sectnum < MAXSECTORS)
|
||||||
if (FindDistance2D(s->x-sprite[s->yvel].x,s->y-sprite[s->yvel].y) < 256)
|
if (FindDistance2D(s->x-sprite[s->yvel].x,s->y-sprite[s->yvel].y) < 256)
|
||||||
|
@ -2953,8 +3001,10 @@ static void G_MoveWeapons(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setsprite(i,dax,day,daz);
|
vec3_t tmpvect;
|
||||||
A_DamageWall(i,j,s->x,s->y,s->z,s->picnum);
|
setsprite(i,davect.x,davect.y,davect.z);
|
||||||
|
Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3);
|
||||||
|
A_DamageWall(i,j,&tmpvect,s->picnum);
|
||||||
|
|
||||||
if (s->picnum == FREEZEBLAST)
|
if (s->picnum == FREEZEBLAST)
|
||||||
{
|
{
|
||||||
|
@ -2974,7 +3024,7 @@ static void G_MoveWeapons(void)
|
||||||
}
|
}
|
||||||
else if ((j&49152) == 16384)
|
else if ((j&49152) == 16384)
|
||||||
{
|
{
|
||||||
setsprite(i,dax,day,daz);
|
setsprite(i,davect.x,davect.y,davect.z);
|
||||||
|
|
||||||
if (s->zvel < 0)
|
if (s->zvel < 0)
|
||||||
{
|
{
|
||||||
|
@ -3004,9 +3054,12 @@ static void G_MoveWeapons(void)
|
||||||
if (s->picnum == RPG)
|
if (s->picnum == RPG)
|
||||||
{
|
{
|
||||||
k = A_Spawn(i,EXPLOSION2);
|
k = A_Spawn(i,EXPLOSION2);
|
||||||
|
Bmemcpy(&sprite[k],&davect,sizeof(int32_t) * 3);
|
||||||
|
/*
|
||||||
sprite[k].x = dax;
|
sprite[k].x = dax;
|
||||||
sprite[k].y = day;
|
sprite[k].y = day;
|
||||||
sprite[k].z = daz;
|
sprite[k].z = daz;
|
||||||
|
*/
|
||||||
|
|
||||||
if (s->xrepeat < 10)
|
if (s->xrepeat < 10)
|
||||||
{
|
{
|
||||||
|
@ -4355,10 +4408,14 @@ static void G_MoveActors(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
j = A_MoveSprite(i,
|
{
|
||||||
(s->xvel*(sintable[(s->ang+512)&2047]))>>14,
|
vec3_t tmpvect;
|
||||||
(s->xvel*(sintable[s->ang&2047]))>>14,
|
|
||||||
s->zvel,CLIPMASK0);
|
tmpvect.x = (s->xvel*(sintable[(s->ang+512)&2047]))>>14;
|
||||||
|
tmpvect.y = (s->xvel*(sintable[s->ang&2047]))>>14;
|
||||||
|
tmpvect.z = s->zvel;
|
||||||
|
j = A_MoveSprite(i,&tmpvect,CLIPMASK0);
|
||||||
|
}
|
||||||
|
|
||||||
ActorExtra[i].movflag = j;
|
ActorExtra[i].movflag = j;
|
||||||
|
|
||||||
|
@ -4399,9 +4456,12 @@ static void G_MoveActors(void)
|
||||||
|
|
||||||
if ((j&49152) == 32768)
|
if ((j&49152) == 32768)
|
||||||
{
|
{
|
||||||
|
vec3_t davect;
|
||||||
|
|
||||||
j &= (MAXWALLS-1);
|
j &= (MAXWALLS-1);
|
||||||
|
|
||||||
A_DamageWall(i,j,s->x,s->y,s->z,s->picnum);
|
Bmemcpy(&davect, s, sizeof(int32_t) * 3);
|
||||||
|
A_DamageWall(i,j,&davect,s->picnum);
|
||||||
|
|
||||||
k = getangle(
|
k = getangle(
|
||||||
wall[wall[j].point2].x-wall[j].x,
|
wall[wall[j].point2].x-wall[j].x,
|
||||||
|
|
|
@ -7263,8 +7263,6 @@ static void InitCustomColors(void)
|
||||||
editorcolors[4] = getclosestcol(42,0,0);
|
editorcolors[4] = getclosestcol(42,0,0);
|
||||||
editorcolors[5] = getclosestcol(0,0,0);
|
editorcolors[5] = getclosestcol(0,0,0);
|
||||||
*/
|
*/
|
||||||
extern int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
|
||||||
|
|
||||||
|
|
||||||
vgapal16[9*4+0] = 63;
|
vgapal16[9*4+0] = 63;
|
||||||
vgapal16[9*4+1] = 31;
|
vgapal16[9*4+1] = 31;
|
||||||
|
|
|
@ -574,6 +574,10 @@ extern int32_t movefifoplc, vel,svel,angvel,horiz;
|
||||||
|
|
||||||
extern int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount;
|
extern int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int32_t x, y, z;
|
||||||
|
} vec3_t;
|
||||||
|
|
||||||
#include "funct.h"
|
#include "funct.h"
|
||||||
|
|
||||||
extern int32_t g_screenCapture;
|
extern int32_t g_screenCapture;
|
||||||
|
@ -588,28 +592,26 @@ extern int32_t GametypeFlags[MAXGAMETYPES];
|
||||||
extern char g_numGametypes;
|
extern char g_numGametypes;
|
||||||
|
|
||||||
enum GametypeFlags_t {
|
enum GametypeFlags_t {
|
||||||
GAMETYPE_COOP = 1,
|
GAMETYPE_COOP = 0x00000001,
|
||||||
GAMETYPE_WEAPSTAY = 2,
|
GAMETYPE_WEAPSTAY = 0x00000002,
|
||||||
GAMETYPE_FRAGBAR = 4,
|
GAMETYPE_FRAGBAR = 0x00000004,
|
||||||
GAMETYPE_SCORESHEET = 8,
|
GAMETYPE_SCORESHEET = 0x00000008,
|
||||||
GAMETYPE_DMSWITCHES = 16,
|
GAMETYPE_DMSWITCHES = 0x00000010,
|
||||||
GAMETYPE_COOPSPAWN = 32,
|
GAMETYPE_COOPSPAWN = 0x00000020,
|
||||||
GAMETYPE_ACCESSCARDSPRITES = 64,
|
GAMETYPE_ACCESSCARDSPRITES = 0x00000040,
|
||||||
GAMETYPE_COOPVIEW = 128,
|
GAMETYPE_COOPVIEW = 0x00000080,
|
||||||
GAMETYPE_COOPSOUND = 256,
|
GAMETYPE_COOPSOUND = 0x00000100,
|
||||||
GAMETYPE_OTHERPLAYERSINMAP = 512,
|
GAMETYPE_OTHERPLAYERSINMAP = 0x00000200,
|
||||||
GAMETYPE_ITEMRESPAWN = 1024,
|
GAMETYPE_ITEMRESPAWN = 0x00000400,
|
||||||
GAMETYPE_MARKEROPTION = 2048,
|
GAMETYPE_MARKEROPTION = 0x00000800,
|
||||||
GAMETYPE_PLAYERSFRIENDLY = 4096,
|
GAMETYPE_PLAYERSFRIENDLY = 0x00001000,
|
||||||
GAMETYPE_FIXEDRESPAWN = 8192,
|
GAMETYPE_FIXEDRESPAWN = 0x00002000,
|
||||||
GAMETYPE_ACCESSATSTART = 16384,
|
GAMETYPE_ACCESSATSTART = 0x00004000,
|
||||||
GAMETYPE_PRESERVEINVENTORYDEATH = 32768,
|
GAMETYPE_PRESERVEINVENTORYDEATH = 0x00008000,
|
||||||
GAMETYPE_TDM = 65536,
|
GAMETYPE_TDM = 0x00010000,
|
||||||
GAMETYPE_TDMSPAWN = 131072
|
GAMETYPE_TDMSPAWN = 0x00020000
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GTFLAGS(x) (GametypeFlags[ud.coop] & x)
|
|
||||||
|
|
||||||
extern char g_numVolumes;
|
extern char g_numVolumes;
|
||||||
|
|
||||||
extern int32_t g_lastSaveSlot;
|
extern int32_t g_lastSaveSlot;
|
||||||
|
@ -785,14 +787,6 @@ enum GameEvent_t {
|
||||||
MAXEVENTS
|
MAXEVENTS
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SystemString_t {
|
|
||||||
STR_MAPNAME,
|
|
||||||
STR_MAPFILENAME,
|
|
||||||
STR_PLAYERNAME,
|
|
||||||
STR_VERSION,
|
|
||||||
STR_GAMETYPE
|
|
||||||
};
|
|
||||||
|
|
||||||
// store global game definitions
|
// store global game definitions
|
||||||
|
|
||||||
|
|
||||||
|
@ -1004,19 +998,18 @@ typedef struct {
|
||||||
animwalltype animwall[MAXANIMWALLS];
|
animwalltype animwall[MAXANIMWALLS];
|
||||||
int32_t msx[2048], msy[2048];
|
int32_t msx[2048], msy[2048];
|
||||||
int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount;
|
int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount;
|
||||||
char show2dsector[(MAXSECTORS+7)>>3];
|
uint8_t show2dsector[(MAXSECTORS+7)>>3];
|
||||||
int16_t g_numClouds,clouds[128],cloudx[128],cloudy[128];
|
int16_t g_numClouds,clouds[128],cloudx[128],cloudy[128];
|
||||||
ActorData_t ActorExtra[MAXSPRITES];
|
ActorData_t ActorExtra[MAXSPRITES];
|
||||||
int16_t pskyoff[MAXPSKYTILES], pskybits;
|
int16_t pskyoff[MAXPSKYTILES], pskybits;
|
||||||
|
|
||||||
int32_t animategoal[MAXANIMATES], animatevel[MAXANIMATES], g_animateCount;
|
int32_t animategoal[MAXANIMATES], animatevel[MAXANIMATES], g_animateCount;
|
||||||
int16_t animatesect[MAXANIMATES];
|
int16_t animatesect[MAXANIMATES];
|
||||||
int32_t animateptr[MAXANIMATES];
|
int32_t animateptr[MAXANIMATES];
|
||||||
char g_numPlayerSprites;
|
uint8_t g_numPlayerSprites;
|
||||||
char g_earthquakeTime;
|
uint8_t g_earthquakeTime;
|
||||||
int32_t lockclock;
|
int32_t lockclock;
|
||||||
int32_t randomseed, g_globalRandom;
|
int32_t randomseed, g_globalRandom;
|
||||||
char scriptptrs[MAXSPRITES];
|
uint8_t scriptptrs[MAXSPRITES];
|
||||||
intptr_t *vars[MAXGAMEVARS];
|
intptr_t *vars[MAXGAMEVARS];
|
||||||
} mapstate_t;
|
} mapstate_t;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ extern void S_MusicShutdown(void);
|
||||||
extern void S_MenuSound(void);
|
extern void S_MenuSound(void);
|
||||||
extern int32_t S_PlayMusic(const char *fn, const int32_t sel);
|
extern int32_t S_PlayMusic(const char *fn, const int32_t sel);
|
||||||
extern int32_t S_LoadSound(unsigned num);
|
extern int32_t S_LoadSound(unsigned num);
|
||||||
extern int32_t S_PlaySoundXYZ(int32_t num,int32_t i,int32_t x,int32_t y,int32_t z);
|
extern int32_t S_PlaySoundXYZ(int32_t num,int32_t i,const vec3_t *pos);
|
||||||
extern void S_PlaySound(int32_t num);
|
extern void S_PlaySound(int32_t num);
|
||||||
extern int32_t A_PlaySound(uint32_t num,int32_t i);
|
extern int32_t A_PlaySound(uint32_t num,int32_t i);
|
||||||
extern void S_StopSound(int32_t num);
|
extern void S_StopSound(int32_t num);
|
||||||
|
@ -74,7 +74,7 @@ extern void G_OperateMasterSwitches(int32_t low);
|
||||||
extern void G_OperateForceFields(int32_t s,int32_t low);
|
extern void G_OperateForceFields(int32_t s,int32_t low);
|
||||||
extern int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype);
|
extern int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype);
|
||||||
extern void activatebysector(int32_t sect,int32_t j);
|
extern void activatebysector(int32_t sect,int32_t j);
|
||||||
extern void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,int32_t atwith);
|
extern void A_DamageWall(int32_t spr,int32_t dawallnum,const vec3_t *pos,int32_t atwith);
|
||||||
extern void P_CheckTouchDamage(DukePlayer_t *p,int32_t j);
|
extern void P_CheckTouchDamage(DukePlayer_t *p,int32_t j);
|
||||||
extern int32_t Sect_DamageCeiling(int32_t sn);
|
extern int32_t Sect_DamageCeiling(int32_t sn);
|
||||||
extern void A_DamageObject(int32_t i,int32_t sn);
|
extern void A_DamageObject(int32_t i,int32_t sn);
|
||||||
|
@ -127,7 +127,6 @@ extern void A_Fall(int32_t iActor);
|
||||||
extern void C_Compile(const char *fn);
|
extern void C_Compile(const char *fn);
|
||||||
extern int32_t A_GetFurthestAngle(int32_t iActor,int32_t angs);
|
extern int32_t A_GetFurthestAngle(int32_t iActor,int32_t angs);
|
||||||
extern void A_Execute(int32_t iActor,int32_t iPlayer,int32_t lDist);
|
extern void A_Execute(int32_t iActor,int32_t iPlayer,int32_t lDist);
|
||||||
extern void overwritesprite(int32_t thex,int32_t they,int32_t tilenum,int32_t shade,int32_t stat,int32_t dapalnum);
|
|
||||||
extern void gamenumber(int32_t x,int32_t y,int32_t n,int32_t s);
|
extern void gamenumber(int32_t x,int32_t y,int32_t n,int32_t s);
|
||||||
extern void G_Shutdown(void);
|
extern void G_Shutdown(void);
|
||||||
extern void Net_GetPackets(void);
|
extern void Net_GetPackets(void);
|
||||||
|
@ -180,7 +179,7 @@ extern void P_AddWeapon(DukePlayer_t *p,int32_t weapon);
|
||||||
extern void P_SelectNextInvItem(DukePlayer_t *p);
|
extern void P_SelectNextInvItem(DukePlayer_t *p);
|
||||||
extern void P_CheckWeapon(DukePlayer_t *p);
|
extern void P_CheckWeapon(DukePlayer_t *p);
|
||||||
extern void A_RadiusDamage(int32_t i,int32_t r,int32_t hp1,int32_t hp2,int32_t hp3,int32_t hp4);
|
extern void A_RadiusDamage(int32_t i,int32_t r,int32_t hp1,int32_t hp2,int32_t hp3,int32_t hp4);
|
||||||
extern int32_t A_MoveSprite(int32_t spritenum,int32_t xchange,int32_t ychange,int32_t zchange,uint32_t cliptype);
|
extern int32_t A_MoveSprite(int32_t spritenum,const vec3_t *change,uint32_t cliptype);
|
||||||
extern inline int32_t A_SetSprite(int32_t i,uint32_t cliptype);
|
extern inline int32_t A_SetSprite(int32_t i,uint32_t cliptype);
|
||||||
extern void A_AddToDeleteQueue(int32_t i);
|
extern void A_AddToDeleteQueue(int32_t i);
|
||||||
extern void A_SpawnMultiple(int32_t sp,int32_t pic,int32_t n);
|
extern void A_SpawnMultiple(int32_t sp,int32_t pic,int32_t n);
|
||||||
|
|
|
@ -3473,7 +3473,6 @@ static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16
|
||||||
|
|
||||||
#define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1)
|
#define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1)
|
||||||
|
|
||||||
extern int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
|
||||||
palette_t CrosshairColors = { 255, 255, 255, 0 };
|
palette_t CrosshairColors = { 255, 255, 255, 0 };
|
||||||
palette_t DefaultCrosshairColors = { 0, 0, 0, 0 };
|
palette_t DefaultCrosshairColors = { 0, 0, 0, 0 };
|
||||||
int32_t g_crosshairSum = 0;
|
int32_t g_crosshairSum = 0;
|
||||||
|
@ -7505,7 +7504,7 @@ PALONLY:
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (display_mirror) tsprite[j].statnum = TSPR_MIRROR;
|
if (display_mirror) tsprite[j].statnum = TSPR_MIRROR;
|
||||||
if (tsprite[j].owner < MAXSPRITES && tsprite[j].owner > 0 && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS)
|
if (tsprite[j].owner < MAXSPRITES && tsprite[j].owner >= 0 && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS)
|
||||||
{
|
{
|
||||||
spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j];
|
spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j];
|
||||||
X_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1);
|
X_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1);
|
||||||
|
@ -7516,7 +7515,7 @@ PALONLY:
|
||||||
if (j < 0) return;
|
if (j < 0) return;
|
||||||
|
|
||||||
if (display_mirror) tsprite[j].statnum = TSPR_MIRROR;
|
if (display_mirror) tsprite[j].statnum = TSPR_MIRROR;
|
||||||
if (tsprite[j].owner > 0 && tsprite[j].owner < MAXSPRITES && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS)
|
if (tsprite[j].owner >= 0 && tsprite[j].owner < MAXSPRITES && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS)
|
||||||
{
|
{
|
||||||
spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j];
|
spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j];
|
||||||
X_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1);
|
X_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1);
|
||||||
|
|
|
@ -5738,6 +5738,7 @@ static void C_AddDefaultDefinitions(void)
|
||||||
C_AddDefinition("STR_PLAYERNAME",STR_PLAYERNAME,LABEL_DEFINE);
|
C_AddDefinition("STR_PLAYERNAME",STR_PLAYERNAME,LABEL_DEFINE);
|
||||||
C_AddDefinition("STR_VERSION",STR_VERSION,LABEL_DEFINE);
|
C_AddDefinition("STR_VERSION",STR_VERSION,LABEL_DEFINE);
|
||||||
C_AddDefinition("STR_GAMETYPE",STR_GAMETYPE,LABEL_DEFINE);
|
C_AddDefinition("STR_GAMETYPE",STR_GAMETYPE,LABEL_DEFINE);
|
||||||
|
C_AddDefinition("STR_VOLUMENAME",STR_VOLUMENAME,LABEL_DEFINE);
|
||||||
|
|
||||||
C_AddDefinition("NO",0,LABEL_DEFINE|LABEL_ACTION|LABEL_AI|LABEL_MOVE);
|
C_AddDefinition("NO",0,LABEL_DEFINE|LABEL_ACTION|LABEL_AI|LABEL_MOVE);
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,15 @@ extern int32_t g_errorLineNum;
|
||||||
extern int32_t g_tw;
|
extern int32_t g_tw;
|
||||||
extern const char *keyw[];
|
extern const char *keyw[];
|
||||||
|
|
||||||
|
enum SystemString_t {
|
||||||
|
STR_MAPNAME,
|
||||||
|
STR_MAPFILENAME,
|
||||||
|
STR_PLAYERNAME,
|
||||||
|
STR_VERSION,
|
||||||
|
STR_GAMETYPE,
|
||||||
|
STR_VOLUMENAME
|
||||||
|
};
|
||||||
|
|
||||||
enum ScriptError_t
|
enum ScriptError_t
|
||||||
{
|
{
|
||||||
ERROR_CLOSEBRACKET,
|
ERROR_CLOSEBRACKET,
|
||||||
|
|
|
@ -605,9 +605,14 @@ static void X_Move(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ActorExtra[vm.g_i].movflag = A_MoveSprite(vm.g_i,
|
{
|
||||||
(daxvel*(sintable[(angdif+512)&2047]))>>14,
|
vec3_t tmpvect;
|
||||||
(daxvel*(sintable[angdif&2047]))>>14,vm.g_sp->zvel,CLIPMASK0);
|
|
||||||
|
tmpvect.x = (daxvel*(sintable[(angdif+512)&2047]))>>14;
|
||||||
|
tmpvect.y = (daxvel*(sintable[angdif&2047]))>>14;
|
||||||
|
tmpvect.z = vm.g_sp->zvel;
|
||||||
|
ActorExtra[vm.g_i].movflag = A_MoveSprite(vm.g_i,&tmpvect,CLIPMASK0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a)
|
if (a)
|
||||||
|
@ -1617,6 +1622,9 @@ static int32_t X_DoExecute(void)
|
||||||
case STR_GAMETYPE:
|
case STR_GAMETYPE:
|
||||||
Bstrcpy(ScriptQuotes[i],GametypeNames[ud.coop]);
|
Bstrcpy(ScriptQuotes[i],GametypeNames[ud.coop]);
|
||||||
break;
|
break;
|
||||||
|
case STR_VOLUMENAME:
|
||||||
|
Bstrcpy(ScriptQuotes[i],EpisodeNames[ud.volume_number]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
OSD_Printf(CON_ERROR "unknown str ID %d %d\n",g_errorLineNum,keyw[g_tw],i,j);
|
OSD_Printf(CON_ERROR "unknown str ID %d %d\n",g_errorLineNum,keyw[g_tw],i,j);
|
||||||
}
|
}
|
||||||
|
@ -2402,7 +2410,11 @@ static int32_t X_DoExecute(void)
|
||||||
insptr++;
|
insptr++;
|
||||||
{
|
{
|
||||||
int32_t spritenum = Gv_GetVarX(*insptr++);
|
int32_t spritenum = Gv_GetVarX(*insptr++);
|
||||||
int32_t x = Gv_GetVarX(*insptr++), y = Gv_GetVarX(*insptr++), z = Gv_GetVarX(*insptr++);
|
vec3_t davector;
|
||||||
|
|
||||||
|
davector.x = Gv_GetVarX(*insptr++);
|
||||||
|
davector.y = Gv_GetVarX(*insptr++);
|
||||||
|
davector.z = Gv_GetVarX(*insptr++);
|
||||||
|
|
||||||
if (tw == CON_SETSPRITE)
|
if (tw == CON_SETSPRITE)
|
||||||
{
|
{
|
||||||
|
@ -2411,7 +2423,7 @@ static int32_t X_DoExecute(void)
|
||||||
OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum);
|
OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
setsprite(spritenum, x, y, z);
|
setsprite(spritenum, davector.x, davector.y, davector.z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2424,7 +2436,7 @@ static int32_t X_DoExecute(void)
|
||||||
insptr++;
|
insptr++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Gv_SetVarX(*insptr++, A_MoveSprite(spritenum, x, y, z, cliptype));
|
Gv_SetVarX(*insptr++, A_MoveSprite(spritenum, &davector, cliptype));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// Macros, some from SW source
|
// Macros, some from SW source
|
||||||
|
|
||||||
|
#define GTFLAGS(x) (GametypeFlags[ud.coop] & x)
|
||||||
|
|
||||||
#define TRAVERSE_SPRITE_SECT(l, o, n) for ((o) = (l); (n) = nextspritesect[o], (o) != -1; (o) = (n))
|
#define TRAVERSE_SPRITE_SECT(l, o, n) for ((o) = (l); (n) = nextspritesect[o], (o) != -1; (o) = (n))
|
||||||
#define TRAVERSE_SPRITE_STAT(l, o, n) for ((o) = (l); (n) = nextspritestat[o], (o) != -1; (o) = (n))
|
#define TRAVERSE_SPRITE_STAT(l, o, n) for ((o) = (l); (n) = nextspritestat[o], (o) != -1; (o) = (n))
|
||||||
#define TRAVERSE_CONNECT(i) for (i = connecthead; i != -1; i = connectpoint2[i])
|
#define TRAVERSE_CONNECT(i) for (i = connecthead; i != -1; i = connectpoint2[i])
|
||||||
|
|
|
@ -139,35 +139,39 @@ static void A_DoWaterTracers(int32_t x1,int32_t y1,int32_t z1,int32_t x2,int32_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void A_HitscanProjTrail(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t ang, int32_t atwith)
|
static void A_HitscanProjTrail(const vec3_t *sv, const vec3_t *dv, int32_t ang, int32_t atwith)
|
||||||
{
|
{
|
||||||
int32_t n, j, i;
|
int32_t n, j, i;
|
||||||
int16_t sect = -1;
|
int16_t sect = -1;
|
||||||
|
vec3_t srcvect;
|
||||||
|
vec3_t destvect;
|
||||||
|
|
||||||
x1 += (sintable[(348+ang+512)&2047]/ProjectileData[atwith].offset);
|
Bmemcpy(&destvect,&dv,sizeof(vec3_t));
|
||||||
y1 += (sintable[(ang+348)&2047]/ProjectileData[atwith].offset);
|
|
||||||
z1 += 1024+(ProjectileData[atwith].toffset<<8);
|
|
||||||
|
|
||||||
n = ((FindDistance2D(x1-x2,y1-y2))>>8)+1;
|
srcvect.x = sv->x + (sintable[(348+ang+512)&2047]/ProjectileData[atwith].offset);
|
||||||
|
srcvect.y = sv->y + (sintable[(ang+348)&2047]/ProjectileData[atwith].offset);
|
||||||
|
srcvect.z = sv->z + 1024+(ProjectileData[atwith].toffset<<8);
|
||||||
|
|
||||||
x2 = ((x2-x1)/n);
|
n = ((FindDistance2D(srcvect.x-destvect.x,srcvect.y-destvect.y))>>8)+1;
|
||||||
y2 = ((y2-y1)/n);
|
|
||||||
z2 = ((z2-z1)/n);
|
|
||||||
|
|
||||||
x1 += x2>>2;
|
destvect.x = ((destvect.x-srcvect.x)/n);
|
||||||
y1 += y2>>2;
|
destvect.y = ((destvect.y-srcvect.y)/n);
|
||||||
z1 += (z2>>2);
|
destvect.z = ((destvect.z-srcvect.z)/n);
|
||||||
|
|
||||||
|
srcvect.x += destvect.x>>2;
|
||||||
|
srcvect.y += destvect.y>>2;
|
||||||
|
srcvect.z += (destvect.z>>2);
|
||||||
|
|
||||||
for (i=ProjectileData[atwith].tnum;i>0;i--)
|
for (i=ProjectileData[atwith].tnum;i>0;i--)
|
||||||
{
|
{
|
||||||
x1 += x2;
|
srcvect.x += destvect.x;
|
||||||
y1 += y2;
|
srcvect.y += destvect.y;
|
||||||
z1 += z2;
|
srcvect.z += destvect.z;
|
||||||
updatesector(x1,y1,§);
|
updatesector(srcvect.x,srcvect.y,§);
|
||||||
getzsofslope(sect,x1,y1,&n,&j);
|
getzsofslope(sect,srcvect.x,srcvect.y,&n,&j);
|
||||||
if (sect < 0 || z1 > j || z1 < n)
|
if (sect < 0 || srcvect.z > j || srcvect.z < n)
|
||||||
break;
|
break;
|
||||||
j = A_InsertSprite(sect,x1,y1,z1,ProjectileData[atwith].trail,-32,ProjectileData[atwith].txrepeat,ProjectileData[atwith].tyrepeat,ang,0,0,g_player[0].ps->i,0);
|
j = A_InsertSprite(sect,srcvect.x,srcvect.y,srcvect.z,ProjectileData[atwith].trail,-32,ProjectileData[atwith].txrepeat,ProjectileData[atwith].tyrepeat,ang,0,0,g_player[0].ps->i,0);
|
||||||
changespritestat(j,1);
|
changespritestat(j,1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -301,7 +305,9 @@ static int32_t A_FindTargetSprite(spritetype *s,int32_t aang,int32_t atwith)
|
||||||
int32_t A_Shoot(int32_t i,int32_t atwith)
|
int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
{
|
{
|
||||||
int16_t hitsect, hitspr, hitwall, l, sa, p, j, k=-1, wh, scount;
|
int16_t hitsect, hitspr, hitwall, l, sa, p, j, k=-1, wh, scount;
|
||||||
int32_t sx, sy, sz, vel, zvel = 0, hitx, hity, hitz, x, oldzvel, dal;
|
int32_t vel, zvel = 0, x, oldzvel, dal;
|
||||||
|
vec3_t hitvect;
|
||||||
|
vec3_t srcvect;
|
||||||
char sizx,sizy;
|
char sizx,sizy;
|
||||||
spritetype *s = &sprite[i];
|
spritetype *s = &sprite[i];
|
||||||
int16_t sect = s->sectnum;
|
int16_t sect = s->sectnum;
|
||||||
|
@ -310,9 +316,9 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
{
|
{
|
||||||
p = s->yvel;
|
p = s->yvel;
|
||||||
|
|
||||||
sx = g_player[p].ps->posx;
|
srcvect.x = g_player[p].ps->posx;
|
||||||
sy = g_player[p].ps->posy;
|
srcvect.y = g_player[p].ps->posy;
|
||||||
sz = g_player[p].ps->posz+g_player[p].ps->pyoff+(4<<8);
|
srcvect.z = g_player[p].ps->posz+g_player[p].ps->pyoff+(4<<8);
|
||||||
sa = g_player[p].ps->ang;
|
sa = g_player[p].ps->ang;
|
||||||
|
|
||||||
g_player[p].ps->crack_time = 777;
|
g_player[p].ps->crack_time = 777;
|
||||||
|
@ -321,16 +327,16 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
{
|
{
|
||||||
p = -1;
|
p = -1;
|
||||||
sa = s->ang;
|
sa = s->ang;
|
||||||
sx = s->x;
|
Bmemcpy(&srcvect,s,sizeof(int32_t) * 3);
|
||||||
sy = s->y;
|
srcvect.z -= ((s->yrepeat*tilesizy[s->picnum])<<1)+(4<<8);
|
||||||
sz = s->z-((s->yrepeat*tilesizy[s->picnum])<<1)+(4<<8);
|
|
||||||
if (s->picnum != ROTATEGUN)
|
if (s->picnum != ROTATEGUN)
|
||||||
{
|
{
|
||||||
sz -= (7<<8);
|
srcvect.z -= (7<<8);
|
||||||
if (A_CheckEnemySprite(s) && PN != COMMANDER)
|
if (A_CheckEnemySprite(s) && PN != COMMANDER)
|
||||||
{
|
{
|
||||||
sx += (sintable[(sa+1024+96)&2047]>>7);
|
srcvect.x += (sintable[(sa+1024+96)&2047]>>7);
|
||||||
sy += (sintable[(sa+512+96)&2047]>>7);
|
srcvect.y += (sintable[(sa+512+96)&2047]>>7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -357,29 +363,29 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
||||||
sz += (6<<8);
|
srcvect.z += (6<<8);
|
||||||
sa += 15;
|
sa += 15;
|
||||||
}
|
}
|
||||||
else if (!(ProjectileData[atwith].workslike & PROJECTILE_NOAIM))
|
else if (!(ProjectileData[atwith].workslike & PROJECTILE_NOAIM))
|
||||||
{
|
{
|
||||||
j = g_player[A_FindPlayer(s,&x)].ps->i;
|
j = g_player[A_FindPlayer(s,&x)].ps->i;
|
||||||
zvel = ((sprite[j].z-sz)<<8) / (x+1);
|
zvel = ((sprite[j].z-srcvect.z)<<8) / (x+1);
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],zvel<<6,
|
sintable[sa&2047],zvel<<6,
|
||||||
&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
|
|
||||||
if (ProjectileData[atwith].workslike & PROJECTILE_BLOOD)
|
if (ProjectileData[atwith].workslike & PROJECTILE_BLOOD)
|
||||||
{
|
{
|
||||||
if (ProjectileData[atwith].range == 0)
|
if (ProjectileData[atwith].range == 0)
|
||||||
ProjectileData[atwith].range = 1024;
|
ProjectileData[atwith].range = 1024;
|
||||||
|
|
||||||
if (FindDistance2D(sx-hitx,sy-hity) < ProjectileData[atwith].range)
|
if (FindDistance2D(srcvect.x-hitvect.x,srcvect.y-hitvect.y) < ProjectileData[atwith].range)
|
||||||
if (FindDistance2D(wall[hitwall].x-wall[wall[hitwall].point2].x,wall[hitwall].y-wall[wall[hitwall].point2].y) > (mulscale(ProjectileData[atwith].xrepeat+8,tilesizx[ProjectileData[atwith].decal],3)))
|
if (FindDistance2D(wall[hitwall].x-wall[wall[hitwall].point2].x,wall[hitwall].y-wall[wall[hitwall].point2].y) > (mulscale(ProjectileData[atwith].xrepeat+8,tilesizx[ProjectileData[atwith].decal],3)))
|
||||||
if (hitwall >= 0 && wall[hitwall].overpicnum != BIGFORCE)
|
if (hitwall >= 0 && wall[hitwall].overpicnum != BIGFORCE)
|
||||||
if ((wall[hitwall].nextsector >= 0 && hitsect >= 0 &&
|
if ((wall[hitwall].nextsector >= 0 && hitsect >= 0 &&
|
||||||
|
@ -414,9 +420,9 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
sprite[k].xvel = -12;
|
sprite[k].xvel = -12;
|
||||||
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
||||||
sprite[k].x = hitx;
|
sprite[k].x = hitvect.x;
|
||||||
sprite[k].y = hity;
|
sprite[k].y = hitvect.y;
|
||||||
sprite[k].z = hitz;
|
sprite[k].z = hitvect.z;
|
||||||
sprite[k].cstat |= (krand()&4);
|
sprite[k].cstat |= (krand()&4);
|
||||||
sprite[k].xrepeat = ProjectileData[atwith].xrepeat;
|
sprite[k].xrepeat = ProjectileData[atwith].xrepeat;
|
||||||
sprite[k].yrepeat = ProjectileData[atwith].yrepeat;
|
sprite[k].yrepeat = ProjectileData[atwith].yrepeat;
|
||||||
|
@ -433,9 +439,9 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
sprite[k].xvel = -1;
|
sprite[k].xvel = -1;
|
||||||
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
||||||
sprite[k].x = hitx;
|
sprite[k].x = hitvect.x;
|
||||||
sprite[k].y = hity;
|
sprite[k].y = hitvect.y;
|
||||||
sprite[k].z = hitz;
|
sprite[k].z = hitvect.z;
|
||||||
if (ProjectileData[atwith].workslike & PROJECTILE_RANDDECALSIZE)
|
if (ProjectileData[atwith].workslike & PROJECTILE_RANDDECALSIZE)
|
||||||
{
|
{
|
||||||
wh = (krand()&ProjectileData[atwith].xrepeat);
|
wh = (krand()&ProjectileData[atwith].xrepeat);
|
||||||
|
@ -483,13 +489,13 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
if ((ProjectileData[atwith].range == 0) && (ProjectileData[atwith].workslike & PROJECTILE_KNEE))
|
if ((ProjectileData[atwith].range == 0) && (ProjectileData[atwith].workslike & PROJECTILE_KNEE))
|
||||||
ProjectileData[atwith].range = 1024;
|
ProjectileData[atwith].range = 1024;
|
||||||
|
|
||||||
if ((ProjectileData[atwith].range > 0) && ((klabs(sx-hitx)+klabs(sy-hity)) > ProjectileData[atwith].range))
|
if ((ProjectileData[atwith].range > 0) && ((klabs(srcvect.x-hitvect.x)+klabs(srcvect.y-hitvect.y)) > ProjectileData[atwith].range))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (hitwall >= 0 || hitspr >= 0)
|
if (hitwall >= 0 || hitspr >= 0)
|
||||||
{
|
{
|
||||||
j = A_InsertSprite(hitsect,hitx,hity,hitz,atwith,-15,0,0,sa,32,0,i,4);
|
j = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,atwith,-15,0,0,sa,32,0,i,4);
|
||||||
ActorExtra[j].projectile.workslike = ProjectileData[sprite[j].picnum].workslike;
|
ActorExtra[j].projectile.workslike = ProjectileData[sprite[j].picnum].workslike;
|
||||||
sprite[j].extra = ProjectileData[atwith].extra;
|
sprite[j].extra = ProjectileData[atwith].extra;
|
||||||
if (ProjectileData[atwith].extra_rand > 0)
|
if (ProjectileData[atwith].extra_rand > 0)
|
||||||
|
@ -520,12 +526,12 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
{
|
{
|
||||||
if (wall[hitwall].cstat&2)
|
if (wall[hitwall].cstat&2)
|
||||||
if (wall[hitwall].nextsector >= 0)
|
if (wall[hitwall].nextsector >= 0)
|
||||||
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
if (hitvect.z >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
hitwall = wall[hitwall].nextwall;
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
A_DamageWall(j,hitwall,hitx,hity,hitz,atwith);
|
A_DamageWall(j,hitwall,&hitvect,atwith);
|
||||||
if (p >= 0) P_ActivateSwitch(p,hitwall,0);
|
if (p >= 0) P_ActivateSwitch(p,hitwall,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -533,8 +539,8 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
||||||
{
|
{
|
||||||
j = A_Spawn(g_player[p].ps->i,WATERSPLASH2);
|
j = A_Spawn(g_player[p].ps->i,WATERSPLASH2);
|
||||||
sprite[j].x = hitx;
|
sprite[j].x = hitvect.x;
|
||||||
sprite[j].y = hity;
|
sprite[j].y = hitvect.y;
|
||||||
sprite[j].ang = g_player[p].ps->ang; // Total tweek
|
sprite[j].ang = g_player[p].ps->ang; // Total tweek
|
||||||
sprite[j].xvel = 32;
|
sprite[j].xvel = 32;
|
||||||
A_SetSprite(i,CLIPMASK0);
|
A_SetSprite(i,CLIPMASK0);
|
||||||
|
@ -569,10 +575,10 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
dal -= (8<<8);
|
dal -= (8<<8);
|
||||||
// return -1;
|
// return -1;
|
||||||
}
|
}
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0) hitx++;
|
if (hitvect.x == 0) hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal)<<8) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)<<8) / hitvect.x;
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Gv_SetVar(g_iAngRangeVarID,angRange, i,p);
|
Gv_SetVar(g_iAngRangeVarID,angRange, i,p);
|
||||||
|
@ -587,8 +593,8 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
{
|
{
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,sintable[(sa+512)&2047],sintable[sa&2047],
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,sintable[(sa+512)&2047],sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
if (hitspr != -1)
|
if (hitspr != -1)
|
||||||
{
|
{
|
||||||
if (sprite[hitspr].statnum == 1 || sprite[hitspr].statnum == 2 || sprite[hitspr].statnum == 10 || sprite[hitspr].statnum == 13)
|
if (sprite[hitspr].statnum == 1 || sprite[hitspr].statnum == 2 || sprite[hitspr].statnum == 10 || sprite[hitspr].statnum == 13)
|
||||||
|
@ -613,16 +619,16 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
}
|
}
|
||||||
zvel += (zRange/2)-(krand()&(zRange-1));
|
zvel += (zRange/2)-(krand()&(zRange-1));
|
||||||
}
|
}
|
||||||
sz -= (2<<8);
|
srcvect.z -= (2<<8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
sz -= (4<<8);
|
srcvect.z -= (4<<8);
|
||||||
hitx = ldist(&sprite[g_player[j].ps->i], s);
|
hitvect.x = ldist(&sprite[g_player[j].ps->i], s);
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
zvel = ((g_player[j].ps->posz-sz) <<8) / hitx;
|
zvel = ((g_player[j].ps->posz-srcvect.z) <<8) / hitvect.x;
|
||||||
if (s->picnum != BOSS1)
|
if (s->picnum != BOSS1)
|
||||||
{
|
{
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
|
@ -631,7 +637,7 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
sa = getangle(g_player[j].ps->posx-sx,g_player[j].ps->posy-sy)+64-(krand()&127);
|
sa = getangle(g_player[j].ps->posx-srcvect.x,g_player[j].ps->posy-srcvect.y)+64-(krand()&127);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,10 +645,10 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
else s->cstat &= ~257;
|
else s->cstat &= ~257;
|
||||||
|
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],
|
sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
|
|
||||||
|
|
||||||
if (ProjectileData[atwith].cstat >= 0) s->cstat |= ProjectileData[atwith].cstat;
|
if (ProjectileData[atwith].cstat >= 0) s->cstat |= ProjectileData[atwith].cstat;
|
||||||
|
@ -650,20 +656,28 @@ int32_t A_Shoot(int32_t i,int32_t atwith)
|
||||||
|
|
||||||
if (hitsect < 0) return -1;
|
if (hitsect < 0) return -1;
|
||||||
|
|
||||||
if ((ProjectileData[atwith].range > 0) && ((klabs(sx-hitx)+klabs(sy-hity)) > ProjectileData[atwith].range)) return -1;
|
if ((ProjectileData[atwith].range > 0) &&
|
||||||
|
((klabs(srcvect.x-hitvect.x)+klabs(srcvect.y-hitvect.y)) > ProjectileData[atwith].range))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (ProjectileData[atwith].trail >= 0)
|
if (ProjectileData[atwith].trail >= 0)
|
||||||
A_HitscanProjTrail(sx,sy,sz,hitx,hity,hitz,sa,atwith);
|
{
|
||||||
|
vec3_t tmpvect;
|
||||||
|
vec3_t tmphvect;
|
||||||
|
Bmemcpy(&tmpvect,&srcvect,sizeof(vec3_t));
|
||||||
|
Bmemcpy(&tmphvect,&hitvect,sizeof(vec3_t));
|
||||||
|
A_HitscanProjTrail(&tmpvect,&tmphvect,sa,atwith);
|
||||||
|
}
|
||||||
|
|
||||||
if (ProjectileData[atwith].workslike & PROJECTILE_WATERBUBBLES)
|
if (ProjectileData[atwith].workslike & PROJECTILE_WATERBUBBLES)
|
||||||
{
|
{
|
||||||
if ((krand()&15) == 0 && sector[hitsect].lotag == 2)
|
if ((krand()&15) == 0 && sector[hitsect].lotag == 2)
|
||||||
A_DoWaterTracers(hitx,hity,hitz,sx,sy,sz,8-(ud.multimode>>1));
|
A_DoWaterTracers(hitvect.x,hitvect.y,hitvect.z,srcvect.x,srcvect.y,srcvect.z,8-(ud.multimode>>1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
k = A_InsertSprite(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,10,10,sa,0,0,i,4);
|
k = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,SHOTSPARK1,-15,10,10,sa,0,0,i,4);
|
||||||
sprite[k].extra = ProjectileData[atwith].extra;
|
sprite[k].extra = ProjectileData[atwith].extra;
|
||||||
if (ProjectileData[atwith].extra_rand > 0)
|
if (ProjectileData[atwith].extra_rand > 0)
|
||||||
sprite[k].extra += (krand()%ProjectileData[atwith].extra_rand);
|
sprite[k].extra += (krand()%ProjectileData[atwith].extra_rand);
|
||||||
|
@ -821,15 +835,15 @@ DOSKIPBULLETHOLE:
|
||||||
|
|
||||||
if (wall[hitwall].cstat&2)
|
if (wall[hitwall].cstat&2)
|
||||||
if (wall[hitwall].nextsector >= 0)
|
if (wall[hitwall].nextsector >= 0)
|
||||||
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
if (hitvect.z >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
hitwall = wall[hitwall].nextwall;
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
A_DamageWall(k,hitwall,hitx,hity,hitz,atwith);
|
A_DamageWall(k,hitwall,&hitvect,atwith);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = A_InsertSprite(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,24,24,sa,0,0,i,4);
|
k = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,SHOTSPARK1,-15,24,24,sa,0,0,i,4);
|
||||||
sprite[k].extra = ProjectileData[atwith].extra;
|
sprite[k].extra = ProjectileData[atwith].extra;
|
||||||
if (ProjectileData[atwith].extra_rand > 0)
|
if (ProjectileData[atwith].extra_rand > 0)
|
||||||
sprite[k].extra += (krand()%ProjectileData[atwith].extra_rand);
|
sprite[k].extra += (krand()%ProjectileData[atwith].extra_rand);
|
||||||
|
@ -856,12 +870,14 @@ DOSKIPBULLETHOLE:
|
||||||
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
||||||
}
|
}
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
A_DamageWall(k,hitwall,hitx,hity,hitz,atwith);
|
A_DamageWall(k,hitwall,&hitvect,atwith);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((krand()&255) < 4)
|
if ((krand()&255) < 4)
|
||||||
if (ProjectileData[atwith].isound >= 0)
|
if (ProjectileData[atwith].isound >= 0)
|
||||||
S_PlaySoundXYZ(ProjectileData[atwith].isound,k,hitx,hity,hitz);
|
{
|
||||||
|
S_PlaySoundXYZ(ProjectileData[atwith].isound,k,&hitvect);
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -892,15 +908,15 @@ DOSKIPBULLETHOLE:
|
||||||
if (j >= 0)
|
if (j >= 0)
|
||||||
{
|
{
|
||||||
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)+(8<<8);
|
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)+(8<<8);
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
|
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
|
|
||||||
zvel = ((sprite[j].z-sz-dal)*vel) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)*vel) / hitvect.x;
|
||||||
|
|
||||||
if (sprite[j].picnum != RECON)
|
if (sprite[j].picnum != RECON)
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
// else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*81;
|
// else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*81;
|
||||||
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*(ProjectileData[atwith].vel/8);
|
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*(ProjectileData[atwith].vel/8);
|
||||||
|
@ -913,12 +929,12 @@ DOSKIPBULLETHOLE:
|
||||||
if (!(ProjectileData[atwith].workslike & PROJECTILE_NOAIM))
|
if (!(ProjectileData[atwith].workslike & PROJECTILE_NOAIM))
|
||||||
{
|
{
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
sa = getangle(g_player[j].ps->oposx-sx,g_player[j].ps->oposy-sy);
|
sa = getangle(g_player[j].ps->oposx-srcvect.x,g_player[j].ps->oposy-srcvect.y);
|
||||||
|
|
||||||
l = ldist(&sprite[g_player[j].ps->i],s);
|
l = ldist(&sprite[g_player[j].ps->i],s);
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
l++;
|
l++;
|
||||||
zvel = ((g_player[j].ps->oposz-sz)*vel) / l;
|
zvel = ((g_player[j].ps->oposz-srcvect.z)*vel) / l;
|
||||||
|
|
||||||
if (A_CheckEnemySprite(s) && (s->hitag&face_player_smart))
|
if (A_CheckEnemySprite(s) && (s->hitag&face_player_smart))
|
||||||
sa = s->ang+(krand()&31)-16;
|
sa = s->ang+(krand()&31)-16;
|
||||||
|
@ -937,9 +953,9 @@ DOSKIPBULLETHOLE:
|
||||||
sz-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);*/
|
sz-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);*/
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
j = A_InsertSprite(sect,
|
j = A_InsertSprite(sect,
|
||||||
sx+(sintable[(348+sa+512)&2047]/ProjectileData[atwith].offset),
|
srcvect.x+(sintable[(348+sa+512)&2047]/ProjectileData[atwith].offset),
|
||||||
sy+(sintable[(sa+348)&2047]/ProjectileData[atwith].offset),
|
srcvect.y+(sintable[(sa+348)&2047]/ProjectileData[atwith].offset),
|
||||||
sz-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);
|
srcvect.z-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);
|
||||||
|
|
||||||
sprite[j].xrepeat=ProjectileData[atwith].xrepeat;
|
sprite[j].xrepeat=ProjectileData[atwith].xrepeat;
|
||||||
sprite[j].yrepeat=ProjectileData[atwith].yrepeat;
|
sprite[j].yrepeat=ProjectileData[atwith].yrepeat;
|
||||||
|
@ -1001,26 +1017,26 @@ DOSKIPBULLETHOLE:
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
||||||
sz += (6<<8);
|
srcvect.z += (6<<8);
|
||||||
sa += 15;
|
sa += 15;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
j = g_player[A_FindPlayer(s,&x)].ps->i;
|
j = g_player[A_FindPlayer(s,&x)].ps->i;
|
||||||
zvel = ((sprite[j].z-sz)<<8) / (x+1);
|
zvel = ((sprite[j].z-srcvect.z)<<8) / (x+1);
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],zvel<<6,
|
sintable[sa&2047],zvel<<6,
|
||||||
&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
|
|
||||||
if (atwith == BLOODSPLAT1 || atwith == BLOODSPLAT2 || atwith == BLOODSPLAT3 || atwith == BLOODSPLAT4)
|
if (atwith == BLOODSPLAT1 || atwith == BLOODSPLAT2 || atwith == BLOODSPLAT3 || atwith == BLOODSPLAT4)
|
||||||
{
|
{
|
||||||
if (FindDistance2D(sx-hitx,sy-hity) < 1024)
|
if (FindDistance2D(srcvect.x-hitvect.x,srcvect.y-hitvect.y) < 1024)
|
||||||
if (hitwall >= 0 && wall[hitwall].overpicnum != BIGFORCE)
|
if (hitwall >= 0 && wall[hitwall].overpicnum != BIGFORCE)
|
||||||
if ((wall[hitwall].nextsector >= 0 && hitsect >= 0 &&
|
if ((wall[hitwall].nextsector >= 0 && hitsect >= 0 &&
|
||||||
sector[wall[hitwall].nextsector].lotag == 0 &&
|
sector[wall[hitwall].nextsector].lotag == 0 &&
|
||||||
|
@ -1051,9 +1067,9 @@ DOSKIPBULLETHOLE:
|
||||||
sprite[k].xvel = -12;
|
sprite[k].xvel = -12;
|
||||||
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
||||||
sprite[k].x = hitx;
|
sprite[k].x = hitvect.x;
|
||||||
sprite[k].y = hity;
|
sprite[k].y = hitvect.y;
|
||||||
sprite[k].z = hitz;
|
sprite[k].z = hitvect.z;
|
||||||
sprite[k].cstat |= (krand()&4);
|
sprite[k].cstat |= (krand()&4);
|
||||||
A_SetSprite(k,CLIPMASK0);
|
A_SetSprite(k,CLIPMASK0);
|
||||||
setsprite(k,sprite[k].x,sprite[k].y,sprite[k].z);
|
setsprite(k,sprite[k].x,sprite[k].y,sprite[k].z);
|
||||||
|
@ -1066,11 +1082,11 @@ DOSKIPBULLETHOLE:
|
||||||
|
|
||||||
if (hitsect < 0) break;
|
if (hitsect < 0) break;
|
||||||
|
|
||||||
if ((klabs(sx-hitx)+klabs(sy-hity)) < 1024)
|
if ((klabs(srcvect.x-hitvect.x)+klabs(srcvect.y-hitvect.y)) < 1024)
|
||||||
{
|
{
|
||||||
if (hitwall >= 0 || hitspr >= 0)
|
if (hitwall >= 0 || hitspr >= 0)
|
||||||
{
|
{
|
||||||
j = A_InsertSprite(hitsect,hitx,hity,hitz,KNEE,-15,0,0,sa,32,0,i,4);
|
j = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,KNEE,-15,0,0,sa,32,0,i,4);
|
||||||
sprite[j].extra += (krand()&7);
|
sprite[j].extra += (krand()&7);
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
|
@ -1095,12 +1111,12 @@ DOSKIPBULLETHOLE:
|
||||||
{
|
{
|
||||||
if (wall[hitwall].cstat&2)
|
if (wall[hitwall].cstat&2)
|
||||||
if (wall[hitwall].nextsector >= 0)
|
if (wall[hitwall].nextsector >= 0)
|
||||||
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
if (hitvect.z >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
hitwall = wall[hitwall].nextwall;
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
A_DamageWall(j,hitwall,hitx,hity,hitz,atwith);
|
A_DamageWall(j,hitwall,&hitvect,atwith);
|
||||||
if (p >= 0) P_ActivateSwitch(p,hitwall,0);
|
if (p >= 0) P_ActivateSwitch(p,hitwall,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1108,8 +1124,8 @@ DOSKIPBULLETHOLE:
|
||||||
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
||||||
{
|
{
|
||||||
j = A_Spawn(g_player[p].ps->i,WATERSPLASH2);
|
j = A_Spawn(g_player[p].ps->i,WATERSPLASH2);
|
||||||
sprite[j].x = hitx;
|
sprite[j].x = hitvect.x;
|
||||||
sprite[j].y = hity;
|
sprite[j].y = hitvect.y;
|
||||||
sprite[j].ang = g_player[p].ps->ang; // Total tweek
|
sprite[j].ang = g_player[p].ps->ang; // Total tweek
|
||||||
sprite[j].xvel = 32;
|
sprite[j].xvel = 32;
|
||||||
A_SetSprite(i,CLIPMASK0);
|
A_SetSprite(i,CLIPMASK0);
|
||||||
|
@ -1147,10 +1163,10 @@ DOSKIPBULLETHOLE:
|
||||||
dal -= (8<<8);
|
dal -= (8<<8);
|
||||||
|
|
||||||
}
|
}
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0) hitx++;
|
if (hitvect.x == 0) hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal)<<8) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)<<8) / hitvect.x;
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Gv_SetVar(g_iAngRangeVarID,angRange, i,p);
|
Gv_SetVar(g_iAngRangeVarID,angRange, i,p);
|
||||||
|
@ -1167,8 +1183,8 @@ DOSKIPBULLETHOLE:
|
||||||
{
|
{
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)<<5;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,sintable[(sa+512)&2047],sintable[sa&2047],
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,sintable[(sa+512)&2047],sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
if (hitspr != -1)
|
if (hitspr != -1)
|
||||||
{
|
{
|
||||||
if (sprite[hitspr].statnum == 1 || sprite[hitspr].statnum == 2 || sprite[hitspr].statnum == 10 || sprite[hitspr].statnum == 13)
|
if (sprite[hitspr].statnum == 1 || sprite[hitspr].statnum == 2 || sprite[hitspr].statnum == 10 || sprite[hitspr].statnum == 13)
|
||||||
|
@ -1194,16 +1210,16 @@ DOSKIPBULLETHOLE:
|
||||||
zvel += (zRange/2)-(krand()&(zRange-1));
|
zvel += (zRange/2)-(krand()&(zRange-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
sz -= (2<<8);
|
srcvect.z -= (2<<8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
sz -= (4<<8);
|
srcvect.z -= (4<<8);
|
||||||
hitx = ldist(&sprite[g_player[j].ps->i], s);
|
hitvect.x = ldist(&sprite[g_player[j].ps->i], s);
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
zvel = ((g_player[j].ps->posz-sz) <<8) / hitx;
|
zvel = ((g_player[j].ps->posz-srcvect.z) <<8) / hitvect.x;
|
||||||
if (s->picnum != BOSS1)
|
if (s->picnum != BOSS1)
|
||||||
{
|
{
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
|
@ -1212,26 +1228,27 @@ DOSKIPBULLETHOLE:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
sa = getangle(g_player[j].ps->posx-sx,g_player[j].ps->posy-sy)+64-(krand()&127);
|
sa = getangle(g_player[j].ps->posx-srcvect.x,g_player[j].ps->posy-srcvect.y)+64-(krand()&127);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s->cstat &= ~257;
|
s->cstat &= ~257;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],
|
sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
s->cstat |= 257;
|
s->cstat |= 257;
|
||||||
|
|
||||||
if (hitsect < 0) return -1;
|
if (hitsect < 0) return -1;
|
||||||
|
|
||||||
if ((krand()&15) == 0 && sector[hitsect].lotag == 2)
|
if ((krand()&15) == 0 && sector[hitsect].lotag == 2)
|
||||||
A_DoWaterTracers(hitx,hity,hitz,sx,sy,sz,8-(ud.multimode>>1));
|
A_DoWaterTracers(hitvect.x,hitvect.y,hitvect.z,
|
||||||
|
srcvect.x,srcvect.y,srcvect.z,8-(ud.multimode>>1));
|
||||||
|
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
k = A_InsertSprite(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,10,10,sa,0,0,i,4);
|
k = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,SHOTSPARK1,-15,10,10,sa,0,0,i,4);
|
||||||
sprite[k].extra = *actorscrptr[atwith];
|
sprite[k].extra = *actorscrptr[atwith];
|
||||||
sprite[k].extra += (krand()%6);
|
sprite[k].extra += (krand()%6);
|
||||||
sprite[k].yvel = atwith; // this is a hack to allow you to detect which weapon spawned a SHOTSPARK1
|
sprite[k].yvel = atwith; // this is a hack to allow you to detect which weapon spawned a SHOTSPARK1
|
||||||
|
@ -1346,9 +1363,9 @@ DOSKIPBULLETHOLE:
|
||||||
}
|
}
|
||||||
l = A_Spawn(k,BULLETHOLE);
|
l = A_Spawn(k,BULLETHOLE);
|
||||||
sprite[l].xvel = -1;
|
sprite[l].xvel = -1;
|
||||||
sprite[l].x = hitx;
|
sprite[l].x = hitvect.x;
|
||||||
sprite[l].y = hity;
|
sprite[l].y = hitvect.y;
|
||||||
sprite[l].z = hitz;
|
sprite[l].z = hitvect.z;
|
||||||
|
|
||||||
sprite[l].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
sprite[l].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
|
||||||
|
@ -1362,15 +1379,15 @@ SKIPBULLETHOLE:
|
||||||
|
|
||||||
if (wall[hitwall].cstat&2)
|
if (wall[hitwall].cstat&2)
|
||||||
if (wall[hitwall].nextsector >= 0)
|
if (wall[hitwall].nextsector >= 0)
|
||||||
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
if (hitvect.z >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
hitwall = wall[hitwall].nextwall;
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
A_DamageWall(k,hitwall,hitx,hity,hitz,SHOTSPARK1);
|
A_DamageWall(k,hitwall,&hitvect,SHOTSPARK1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = A_InsertSprite(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,24,24,sa,0,0,i,4);
|
k = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,SHOTSPARK1,-15,24,24,sa,0,0,i,4);
|
||||||
sprite[k].extra = *actorscrptr[atwith];
|
sprite[k].extra = *actorscrptr[atwith];
|
||||||
sprite[k].yvel = atwith; // this is a hack to allow you to detect which weapon spawned a SHOTSPARK1
|
sprite[k].yvel = atwith; // this is a hack to allow you to detect which weapon spawned a SHOTSPARK1
|
||||||
ActorExtra[k].temp_data[6] = hitwall;
|
ActorExtra[k].temp_data[6] = hitwall;
|
||||||
|
@ -1390,11 +1407,11 @@ SKIPBULLETHOLE:
|
||||||
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
||||||
}
|
}
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
A_DamageWall(k,hitwall,hitx,hity,hitz,SHOTSPARK1);
|
A_DamageWall(k,hitwall,&hitvect,SHOTSPARK1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((krand()&255) < 4)
|
if ((krand()&255) < 4)
|
||||||
S_PlaySoundXYZ(PISTOL_RICOCHET,k,hitx,hity,hitz);
|
S_PlaySoundXYZ(PISTOL_RICOCHET,k, &hitvect);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1412,12 +1429,12 @@ SKIPBULLETHOLE:
|
||||||
{
|
{
|
||||||
if (s->picnum == BOSS2) vel = 644;
|
if (s->picnum == BOSS2) vel = 644;
|
||||||
else vel = 348;
|
else vel = 348;
|
||||||
sz -= (4<<7);
|
srcvect.z -= (4<<7);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vel = 840;
|
vel = 840;
|
||||||
sz -= (4<<7);
|
srcvect.z -= (4<<7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1435,10 +1452,10 @@ SKIPBULLETHOLE:
|
||||||
if (j >= 0)
|
if (j >= 0)
|
||||||
{
|
{
|
||||||
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)-(12<<8);
|
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)-(12<<8);
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0) hitx++;
|
if (hitvect.x == 0) hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal)*vel) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)*vel) / hitvect.x;
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*98;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*98;
|
||||||
|
@ -1448,9 +1465,9 @@ SKIPBULLETHOLE:
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
// sa = getangle(g_player[j].ps->oposx-sx,g_player[j].ps->oposy-sy);
|
// sa = getangle(g_player[j].ps->oposx-sx,g_player[j].ps->oposy-sy);
|
||||||
sa += 16-(krand()&31);
|
sa += 16-(krand()&31);
|
||||||
hitx = ldist(&sprite[g_player[j].ps->i],s);
|
hitvect.x = ldist(&sprite[g_player[j].ps->i],s);
|
||||||
if (hitx == 0) hitx++;
|
if (hitvect.x == 0) hitvect.x++;
|
||||||
zvel = ((g_player[j].ps->oposz - sz + (3<<8))*vel) / hitx;
|
zvel = ((g_player[j].ps->oposz - srcvect.z + (3<<8))*vel) / hitvect.x;
|
||||||
}
|
}
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
oldzvel = zvel;
|
oldzvel = zvel;
|
||||||
|
@ -1458,7 +1475,7 @@ SKIPBULLETHOLE:
|
||||||
if (atwith == SPIT)
|
if (atwith == SPIT)
|
||||||
{
|
{
|
||||||
sizx = 18;
|
sizx = 18;
|
||||||
sizy = 18,sz -= (10<<8);
|
sizy = 18,srcvect.z -= (10<<8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1487,7 +1504,8 @@ SKIPBULLETHOLE:
|
||||||
|
|
||||||
while (scount > 0)
|
while (scount > 0)
|
||||||
{
|
{
|
||||||
j = A_InsertSprite(sect,sx,sy,sz,atwith,-127,sizx,sizy,sa,vel,zvel,i,4);
|
j = A_InsertSprite(sect,srcvect.x,srcvect.y,srcvect.z,
|
||||||
|
atwith,-127,sizx,sizy,sa,vel,zvel,i,4);
|
||||||
sprite[j].extra += (krand()&7);
|
sprite[j].extra += (krand()&7);
|
||||||
|
|
||||||
if (atwith == COOLEXPLOSION1)
|
if (atwith == COOLEXPLOSION1)
|
||||||
|
@ -1515,7 +1533,7 @@ SKIPBULLETHOLE:
|
||||||
return j;
|
return j;
|
||||||
|
|
||||||
case FREEZEBLAST__STATIC:
|
case FREEZEBLAST__STATIC:
|
||||||
sz += (3<<8);
|
srcvect.z += (3<<8);
|
||||||
case RPG__STATIC:
|
case RPG__STATIC:
|
||||||
|
|
||||||
if (s->extra >= 0) s->shade = -96;
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
@ -1539,11 +1557,11 @@ SKIPBULLETHOLE:
|
||||||
if (j >= 0)
|
if (j >= 0)
|
||||||
{
|
{
|
||||||
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)+(8<<8);
|
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1)+(8<<8);
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0) hitx++;
|
if (hitvect.x == 0) hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal)*vel) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)*vel) / hitvect.x;
|
||||||
if (sprite[j].picnum != RECON)
|
if (sprite[j].picnum != RECON)
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*81;
|
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*81;
|
||||||
if (atwith == RPG)
|
if (atwith == RPG)
|
||||||
|
@ -1552,19 +1570,19 @@ SKIPBULLETHOLE:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
sa = getangle(g_player[j].ps->oposx-sx,g_player[j].ps->oposy-sy);
|
sa = getangle(g_player[j].ps->oposx-srcvect.x,g_player[j].ps->oposy-srcvect.y);
|
||||||
if (PN == BOSS3)
|
if (PN == BOSS3)
|
||||||
sz -= (32<<8);
|
srcvect.z -= (32<<8);
|
||||||
else if (PN == BOSS2)
|
else if (PN == BOSS2)
|
||||||
{
|
{
|
||||||
vel += 128;
|
vel += 128;
|
||||||
sz += 24<<8;
|
srcvect.z += 24<<8;
|
||||||
}
|
}
|
||||||
|
|
||||||
l = ldist(&sprite[g_player[j].ps->i],s);
|
l = ldist(&sprite[g_player[j].ps->i],s);
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
l++;
|
l++;
|
||||||
zvel = ((g_player[j].ps->oposz-sz)*vel) / l;
|
zvel = ((g_player[j].ps->oposz-srcvect.z)*vel) / l;
|
||||||
|
|
||||||
if (A_CheckEnemySprite(s) && (s->hitag&face_player_smart))
|
if (A_CheckEnemySprite(s) && (s->hitag&face_player_smart))
|
||||||
sa = s->ang+(krand()&31)-16;
|
sa = s->ang+(krand()&31)-16;
|
||||||
|
@ -1575,9 +1593,9 @@ SKIPBULLETHOLE:
|
||||||
else l = -1;
|
else l = -1;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
j = A_InsertSprite(sect,
|
j = A_InsertSprite(sect,
|
||||||
sx+(sintable[(348+sa+512)&2047]/448),
|
srcvect.x+(sintable[(348+sa+512)&2047]/448),
|
||||||
sy+(sintable[(sa+348)&2047]/448),
|
srcvect.y+(sintable[(sa+348)&2047]/448),
|
||||||
sz-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);
|
srcvect.z-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);
|
||||||
|
|
||||||
sprite[j].extra += (krand()&7);
|
sprite[j].extra += (krand()&7);
|
||||||
if (atwith != FREEZEBLAST)
|
if (atwith != FREEZEBLAST)
|
||||||
|
@ -1659,16 +1677,16 @@ SKIPBULLETHOLE:
|
||||||
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*32;
|
zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*32;
|
||||||
else zvel = 0;
|
else zvel = 0;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz-g_player[p].ps->pyoff,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z-g_player[p].ps->pyoff,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],
|
sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
if (hitspr >= 0) break;
|
if (hitspr >= 0) break;
|
||||||
|
|
||||||
if (hitwall >= 0 && hitsect >= 0)
|
if (hitwall >= 0 && hitsect >= 0)
|
||||||
if (((hitx-sx)*(hitx-sx)+(hity-sy)*(hity-sy)) < (290*290))
|
if (((hitvect.x-srcvect.x)*(hitvect.x-srcvect.x)+(hitvect.y-srcvect.y)*(hitvect.y-srcvect.y)) < (290*290))
|
||||||
{
|
{
|
||||||
if (wall[hitwall].nextsector >= 0)
|
if (wall[hitwall].nextsector >= 0)
|
||||||
{
|
{
|
||||||
|
@ -1682,7 +1700,7 @@ SKIPBULLETHOLE:
|
||||||
if (j == 1)
|
if (j == 1)
|
||||||
{
|
{
|
||||||
int32_t lTripBombControl=Gv_GetVarByLabel("TRIPBOMB_CONTROL", TRIPBOMB_TRIPWIRE, g_player[p].ps->i, p);
|
int32_t lTripBombControl=Gv_GetVarByLabel("TRIPBOMB_CONTROL", TRIPBOMB_TRIPWIRE, g_player[p].ps->i, p);
|
||||||
k = A_InsertSprite(hitsect,hitx,hity,hitz,TRIPBOMB,-16,4,5,sa,0,0,i,6);
|
k = A_InsertSprite(hitsect,hitvect.x,hitvect.y,hitvect.z,TRIPBOMB,-16,4,5,sa,0,0,i,6);
|
||||||
if (lTripBombControl & TRIPBOMB_TIMER)
|
if (lTripBombControl & TRIPBOMB_TIMER)
|
||||||
{
|
{
|
||||||
int32_t lLifetime=Gv_GetVarByLabel("STICKYBOMB_LIFETIME", NAM_GRENADE_LIFETIME, g_player[p].ps->i, p);
|
int32_t lLifetime=Gv_GetVarByLabel("STICKYBOMB_LIFETIME", NAM_GRENADE_LIFETIME, g_player[p].ps->i, p);
|
||||||
|
@ -1721,9 +1739,9 @@ SKIPBULLETHOLE:
|
||||||
vel = x>>4;
|
vel = x>>4;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
A_InsertSprite(sect,
|
A_InsertSprite(sect,
|
||||||
sx+(sintable[(512+sa+512)&2047]>>8),
|
srcvect.x+(sintable[(512+sa+512)&2047]>>8),
|
||||||
sy+(sintable[(sa+512)&2047]>>8),
|
srcvect.y+(sintable[(sa+512)&2047]>>8),
|
||||||
sz+(6<<8),atwith,-64,32,32,sa,vel,zvel,i,1);
|
srcvect.z+(6<<8),atwith,-64,32,32,sa,vel,zvel,i,1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GROWSPARK__STATIC:
|
case GROWSPARK__STATIC:
|
||||||
|
@ -1747,11 +1765,11 @@ SKIPBULLETHOLE:
|
||||||
dal -= (8<<8);
|
dal -= (8<<8);
|
||||||
|
|
||||||
}
|
}
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal)<<8) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal)<<8) / hitvect.x;
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1760,16 +1778,16 @@ SKIPBULLETHOLE:
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
}
|
}
|
||||||
|
|
||||||
sz -= (2<<8);
|
srcvect.z -= (2<<8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
j = A_FindPlayer(s,&x);
|
j = A_FindPlayer(s,&x);
|
||||||
sz -= (4<<8);
|
srcvect.z -= (4<<8);
|
||||||
hitx = ldist(&sprite[g_player[j].ps->i], s);
|
hitvect.x = ldist(&sprite[g_player[j].ps->i], s);
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
zvel = ((g_player[j].ps->posz-sz) <<8) / hitx;
|
zvel = ((g_player[j].ps->posz-srcvect.z) <<8) / hitvect.x;
|
||||||
zvel += 128-(krand()&255);
|
zvel += 128-(krand()&255);
|
||||||
sa += 32-(krand()&63);
|
sa += 32-(krand()&63);
|
||||||
}
|
}
|
||||||
|
@ -1781,14 +1799,14 @@ SKIPBULLETHOLE:
|
||||||
|
|
||||||
s->cstat &= ~257;
|
s->cstat &= ~257;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
hitscan(sx,sy,sz,sect,
|
hitscan(srcvect.x,srcvect.y,srcvect.z,sect,
|
||||||
sintable[(sa+512)&2047],
|
sintable[(sa+512)&2047],
|
||||||
sintable[sa&2047],
|
sintable[sa&2047],
|
||||||
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
|
zvel<<6,&hitsect,&hitwall,&hitspr,&hitvect.x,&hitvect.y,&hitvect.z,CLIPMASK1);
|
||||||
|
|
||||||
s->cstat |= 257;
|
s->cstat |= 257;
|
||||||
|
|
||||||
j = A_InsertSprite(sect,hitx,hity,hitz,GROWSPARK,-16,28,28,sa,0,0,i,1);
|
j = A_InsertSprite(sect,hitvect.x,hitvect.y,hitvect.z,GROWSPARK,-16,28,28,sa,0,0,i,1);
|
||||||
|
|
||||||
sprite[j].pal = 2;
|
sprite[j].pal = 2;
|
||||||
sprite[j].cstat |= 130;
|
sprite[j].cstat |= 130;
|
||||||
|
@ -1808,9 +1826,9 @@ SKIPBULLETHOLE:
|
||||||
wall[wall[hitwall].point2].x-wall[hitwall].x,
|
wall[wall[hitwall].point2].x-wall[hitwall].x,
|
||||||
wall[wall[hitwall].point2].y-wall[hitwall].y);
|
wall[wall[hitwall].point2].y-wall[hitwall].y);
|
||||||
|
|
||||||
sx = hitx;
|
sx = hitvect.x;
|
||||||
sy = hity;
|
sy = hitvect.y;
|
||||||
sz = hitz;
|
srcvect.z = hitvect.z;
|
||||||
sect = hitsect;
|
sect = hitsect;
|
||||||
sa = ((l<<1) - sa)&2047;
|
sa = ((l<<1) - sa)&2047;
|
||||||
sx += sintable[(sa+512)&2047]>>12;
|
sx += sintable[(sa+512)&2047]>>12;
|
||||||
|
@ -1820,7 +1838,7 @@ SKIPBULLETHOLE:
|
||||||
goto RESHOOTGROW;
|
goto RESHOOTGROW;
|
||||||
}
|
}
|
||||||
else */
|
else */
|
||||||
A_DamageWall(j,hitwall,hitx,hity,hitz,atwith);
|
A_DamageWall(j,hitwall,&hitvect,atwith);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -1841,11 +1859,11 @@ SKIPBULLETHOLE:
|
||||||
if (j >= 0)
|
if (j >= 0)
|
||||||
{
|
{
|
||||||
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1);
|
dal = ((sprite[j].yrepeat*tilesizy[sprite[j].picnum])<<1);
|
||||||
hitx = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
hitvect.x = ldist(&sprite[g_player[p].ps->i], &sprite[j]);
|
||||||
if (hitx == 0)
|
if (hitvect.x == 0)
|
||||||
hitx++;
|
hitvect.x++;
|
||||||
zvel = ((sprite[j].z-sz-dal-(4<<8))*768) / hitx;
|
zvel = ((sprite[j].z-srcvect.z-dal-(4<<8))*768) / hitvect.x;
|
||||||
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
|
sa = getangle(sprite[j].x-srcvect.x,sprite[j].y-srcvect.y);
|
||||||
}
|
}
|
||||||
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*98;
|
else zvel = (100-g_player[p].ps->horiz-g_player[p].ps->horizoff)*98;
|
||||||
}
|
}
|
||||||
|
@ -1855,14 +1873,14 @@ SKIPBULLETHOLE:
|
||||||
l = ldist(&sprite[g_player[j].ps->i],s);
|
l = ldist(&sprite[g_player[j].ps->i],s);
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
l++;
|
l++;
|
||||||
zvel = ((g_player[j].ps->oposz-sz)*512) / l ;
|
zvel = ((g_player[j].ps->oposz-srcvect.z)*512) / l ;
|
||||||
}
|
}
|
||||||
else zvel = 0;
|
else zvel = 0;
|
||||||
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
if (ActorExtra[i].temp_data[9]) zvel = ActorExtra[i].temp_data[9];
|
||||||
j = A_InsertSprite(sect,
|
j = A_InsertSprite(sect,
|
||||||
sx+(sintable[(512+sa+512)&2047]>>12),
|
srcvect.x+(sintable[(512+sa+512)&2047]>>12),
|
||||||
sy+(sintable[(sa+512)&2047]>>12),
|
srcvect.y+(sintable[(sa+512)&2047]>>12),
|
||||||
sz+(2<<8),SHRINKSPARK,-16,28,28,sa,768,zvel,i,4);
|
srcvect.z+(2<<8),SHRINKSPARK,-16,28,28,sa,768,zvel,i,4);
|
||||||
|
|
||||||
sprite[j].cstat = 128;
|
sprite[j].cstat = 128;
|
||||||
sprite[j].clipdist = 32;
|
sprite[j].clipdist = 32;
|
||||||
|
|
|
@ -1144,7 +1144,7 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype)
|
||||||
{
|
{
|
||||||
int32_t switchpal, switchpicnum;
|
int32_t switchpal, switchpicnum;
|
||||||
int32_t i, x, lotag,hitag,picnum,correctdips = 1, numdips = 0;
|
int32_t i, x, lotag,hitag,picnum,correctdips = 1, numdips = 0;
|
||||||
int32_t sx,sy;
|
vec3_t davector;
|
||||||
|
|
||||||
if (w < 0) return 0;
|
if (w < 0) return 0;
|
||||||
|
|
||||||
|
@ -1153,8 +1153,10 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype)
|
||||||
lotag = sprite[w].lotag;
|
lotag = sprite[w].lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = sprite[w].hitag;
|
hitag = sprite[w].hitag;
|
||||||
sx = sprite[w].x;
|
|
||||||
sy = sprite[w].y;
|
// sx = sprite[w].x;
|
||||||
|
// sy = sprite[w].y;
|
||||||
|
Bmemcpy(&davector, &sprite[w], sizeof(int32_t) * 3);
|
||||||
picnum = sprite[w].picnum;
|
picnum = sprite[w].picnum;
|
||||||
switchpal = sprite[w].pal;
|
switchpal = sprite[w].pal;
|
||||||
}
|
}
|
||||||
|
@ -1163,8 +1165,10 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype)
|
||||||
lotag = wall[w].lotag;
|
lotag = wall[w].lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = wall[w].hitag;
|
hitag = wall[w].hitag;
|
||||||
sx = wall[w].x;
|
// sx = wall[w].x;
|
||||||
sy = wall[w].y;
|
// sy = wall[w].y;
|
||||||
|
Bmemcpy(&davector, &wall[w], sizeof(int32_t) * 2);
|
||||||
|
davector.z = g_player[snum].ps->posz;
|
||||||
picnum = wall[w].picnum;
|
picnum = wall[w].picnum;
|
||||||
switchpal = wall[w].pal;
|
switchpal = wall[w].pal;
|
||||||
}
|
}
|
||||||
|
@ -1488,17 +1492,17 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype)
|
||||||
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH+1)
|
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH+1)
|
||||||
{
|
{
|
||||||
if (switchtype == 1)
|
if (switchtype == 1)
|
||||||
S_PlaySoundXYZ(ALIEN_SWITCH1,w,sx,sy,g_player[snum].ps->posz);
|
S_PlaySoundXYZ(ALIEN_SWITCH1, w, &davector);
|
||||||
else S_PlaySoundXYZ(ALIEN_SWITCH1,g_player[snum].ps->i,sx,sy,g_player[snum].ps->posz);
|
else S_PlaySoundXYZ(ALIEN_SWITCH1,g_player[snum].ps->i,&davector);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (switchtype == 1)
|
if (switchtype == 1)
|
||||||
S_PlaySoundXYZ(SWITCH_ON,w,sx,sy,g_player[snum].ps->posz);
|
S_PlaySoundXYZ(SWITCH_ON, w, &davector);
|
||||||
else S_PlaySoundXYZ(SWITCH_ON,g_player[snum].ps->i,sx,sy,g_player[snum].ps->posz);
|
else S_PlaySoundXYZ(SWITCH_ON,g_player[snum].ps->i,&davector);
|
||||||
}
|
}
|
||||||
if (numdips != correctdips) break;
|
if (numdips != correctdips) break;
|
||||||
S_PlaySoundXYZ(END_OF_LEVEL_WARN,g_player[snum].ps->i,sx,sy,g_player[snum].ps->posz);
|
S_PlaySoundXYZ(END_OF_LEVEL_WARN,g_player[snum].ps->i,&davector);
|
||||||
}
|
}
|
||||||
case DIPSWITCH2__STATIC:
|
case DIPSWITCH2__STATIC:
|
||||||
//case DIPSWITCH2+1:
|
//case DIPSWITCH2+1:
|
||||||
|
@ -1578,13 +1582,13 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchtype)
|
||||||
if (hitag == 0 && CheckDoorTile(picnum) == 0)
|
if (hitag == 0 && CheckDoorTile(picnum) == 0)
|
||||||
{
|
{
|
||||||
if (switchtype == 1)
|
if (switchtype == 1)
|
||||||
S_PlaySoundXYZ(SWITCH_ON,w,sx,sy,g_player[snum].ps->posz);
|
S_PlaySoundXYZ(SWITCH_ON,w,&davector);
|
||||||
else S_PlaySoundXYZ(SWITCH_ON,g_player[snum].ps->i,sx,sy,g_player[snum].ps->posz);
|
else S_PlaySoundXYZ(SWITCH_ON,g_player[snum].ps->i,&davector);
|
||||||
}
|
}
|
||||||
else if (hitag != 0)
|
else if (hitag != 0)
|
||||||
{
|
{
|
||||||
if (switchtype == 1 && (g_sounds[hitag].m&4) == 0)
|
if (switchtype == 1 && (g_sounds[hitag].m&4) == 0)
|
||||||
S_PlaySoundXYZ(hitag,w,sx,sy,g_player[snum].ps->posz);
|
S_PlaySoundXYZ(hitag,w,&davector);
|
||||||
else A_PlaySound(hitag,g_player[snum].ps->i);
|
else A_PlaySound(hitag,g_player[snum].ps->i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1622,7 +1626,7 @@ static void BreakWall(int32_t newpn,int32_t spr,int32_t dawallnum)
|
||||||
A_SpawnWallGlass(spr,dawallnum,10);
|
A_SpawnWallGlass(spr,dawallnum,10);
|
||||||
}
|
}
|
||||||
|
|
||||||
void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,int32_t atwith)
|
void A_DamageWall(int32_t spr,int32_t dawallnum,const vec3_t *pos,int32_t atwith)
|
||||||
{
|
{
|
||||||
int16_t sn = -1;
|
int16_t sn = -1;
|
||||||
int32_t j, i, darkestwall;
|
int32_t j, i, darkestwall;
|
||||||
|
@ -1663,7 +1667,7 @@ void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,in
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((wal->cstat&16) || wal->overpicnum == BIGFORCE) && wal->nextsector >= 0)
|
if (((wal->cstat&16) || wal->overpicnum == BIGFORCE) && wal->nextsector >= 0)
|
||||||
if (sector[wal->nextsector].floorz > z)
|
if (sector[wal->nextsector].floorz > pos->z)
|
||||||
if (sector[wal->nextsector].floorz-sector[wal->nextsector].ceilingz)
|
if (sector[wal->nextsector].floorz-sector[wal->nextsector].ceilingz)
|
||||||
{
|
{
|
||||||
int32_t switchpicnum = wal->overpicnum;
|
int32_t switchpicnum = wal->overpicnum;
|
||||||
|
@ -1676,16 +1680,16 @@ void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,in
|
||||||
//case W_FORCEFIELD+2:
|
//case W_FORCEFIELD+2:
|
||||||
wal->extra = 1; // tell the forces to animate
|
wal->extra = 1; // tell the forces to animate
|
||||||
case BIGFORCE__STATIC:
|
case BIGFORCE__STATIC:
|
||||||
updatesector(x,y,&sn);
|
updatesector(pos->x,pos->y,&sn);
|
||||||
if (sn < 0) return;
|
if (sn < 0) return;
|
||||||
|
|
||||||
if (atwith == -1)
|
if (atwith == -1)
|
||||||
i = A_InsertSprite(sn,x,y,z,FORCERIPPLE,-127,8,8,0,0,0,spr,5);
|
i = A_InsertSprite(sn,pos->x,pos->y,pos->z,FORCERIPPLE,-127,8,8,0,0,0,spr,5);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (atwith == CHAINGUN)
|
if (atwith == CHAINGUN)
|
||||||
i = A_InsertSprite(sn,x,y,z,FORCERIPPLE,-127,16+sprite[spr].xrepeat,16+sprite[spr].yrepeat,0,0,0,spr,5);
|
i = A_InsertSprite(sn,pos->x,pos->y,pos->z,FORCERIPPLE,-127,16+sprite[spr].xrepeat,16+sprite[spr].yrepeat,0,0,0,spr,5);
|
||||||
else i = A_InsertSprite(sn,x,y,z,FORCERIPPLE,-127,32,32,0,0,0,spr,5);
|
else i = A_InsertSprite(sn,pos->x,pos->y,pos->z,FORCERIPPLE,-127,32,32,0,0,0,spr,5);
|
||||||
}
|
}
|
||||||
|
|
||||||
CS |= 18+128;
|
CS |= 18+128;
|
||||||
|
@ -1709,7 +1713,7 @@ void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,in
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case GLASS__STATIC:
|
case GLASS__STATIC:
|
||||||
updatesector(x,y,&sn);
|
updatesector(pos->x,pos->y,&sn);
|
||||||
if (sn < 0) return;
|
if (sn < 0) return;
|
||||||
wal->overpicnum=GLASS2;
|
wal->overpicnum=GLASS2;
|
||||||
A_SpawnWallGlass(spr,dawallnum,10);
|
A_SpawnWallGlass(spr,dawallnum,10);
|
||||||
|
@ -1718,14 +1722,14 @@ void A_DamageWall(int32_t spr,int32_t dawallnum,int32_t x,int32_t y,int32_t z,in
|
||||||
if (wal->nextwall >= 0)
|
if (wal->nextwall >= 0)
|
||||||
wall[wal->nextwall].cstat = 0;
|
wall[wal->nextwall].cstat = 0;
|
||||||
|
|
||||||
i = A_InsertSprite(sn,x,y,z,SECTOREFFECTOR,0,0,0,g_player[0].ps->ang,0,0,spr,3);
|
i = A_InsertSprite(sn,pos->x,pos->y,pos->z,SECTOREFFECTOR,0,0,0,g_player[0].ps->ang,0,0,spr,3);
|
||||||
SLT = 128;
|
SLT = 128;
|
||||||
T2 = 5;
|
T2 = 5;
|
||||||
T3 = dawallnum;
|
T3 = dawallnum;
|
||||||
A_PlaySound(GLASS_BREAKING,i);
|
A_PlaySound(GLASS_BREAKING,i);
|
||||||
return;
|
return;
|
||||||
case STAINGLASS1__STATIC:
|
case STAINGLASS1__STATIC:
|
||||||
updatesector(x,y,&sn);
|
updatesector(pos->x,pos->y,&sn);
|
||||||
if (sn < 0) return;
|
if (sn < 0) return;
|
||||||
A_SpawnRandomGlass(spr,dawallnum,80);
|
A_SpawnRandomGlass(spr,dawallnum,80);
|
||||||
wal->cstat = 0;
|
wal->cstat = 0;
|
||||||
|
@ -1935,19 +1939,27 @@ void P_CheckTouchDamage(DukePlayer_t *p,int32_t j)
|
||||||
p->posyv = -(sintable[(p->ang)&2047]<<8);
|
p->posyv = -(sintable[(p->ang)&2047]<<8);
|
||||||
A_PlaySound(DUKE_LONGTERM_PAIN,p->i);
|
A_PlaySound(DUKE_LONGTERM_PAIN,p->i);
|
||||||
|
|
||||||
A_DamageWall(p->i,j,
|
{
|
||||||
p->posx+(sintable[(p->ang+512)&2047]>>9),
|
vec3_t davect;
|
||||||
p->posy+(sintable[p->ang&2047]>>9),
|
|
||||||
p->posz,-1);
|
davect.x = p->posx+(sintable[(p->ang+512)&2047]>>9);
|
||||||
|
davect.y = p->posy+(sintable[p->ang&2047]>>9);
|
||||||
|
davect.z = p->posz;
|
||||||
|
A_DamageWall(p->i,j,&davect,-1);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BIGFORCE__STATIC:
|
case BIGFORCE__STATIC:
|
||||||
p->hurt_delay = 26;
|
p->hurt_delay = 26;
|
||||||
A_DamageWall(p->i,j,
|
{
|
||||||
p->posx+(sintable[(p->ang+512)&2047]>>9),
|
vec3_t davect;
|
||||||
p->posy+(sintable[p->ang&2047]>>9),
|
|
||||||
p->posz,-1);
|
davect.x = p->posx+(sintable[(p->ang+512)&2047]>>9);
|
||||||
|
davect.y = p->posy+(sintable[p->ang&2047]>>9);
|
||||||
|
davect.z = p->posz;
|
||||||
|
A_DamageWall(p->i,j,&davect,-1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,7 +267,7 @@ int32_t S_LoadSound(uint32_t num)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t S_PlaySoundXYZ(int32_t num,int32_t i,int32_t x,int32_t y,int32_t z)
|
int32_t S_PlaySoundXYZ(int32_t num, int32_t i, const vec3_t *pos)
|
||||||
{
|
{
|
||||||
int32_t sndist, cx, cy, cz, j,k;
|
int32_t sndist, cx, cy, cz, j,k;
|
||||||
int32_t pitche,pitchs,cs;
|
int32_t pitche,pitchs,cs;
|
||||||
|
@ -311,7 +311,7 @@ int32_t S_PlaySoundXYZ(int32_t num,int32_t i,int32_t x,int32_t y,int32_t z)
|
||||||
cs = g_player[screenpeek].ps->cursectnum;
|
cs = g_player[screenpeek].ps->cursectnum;
|
||||||
ca = g_player[screenpeek].ps->ang+g_player[screenpeek].ps->look_ang;
|
ca = g_player[screenpeek].ps->ang+g_player[screenpeek].ps->look_ang;
|
||||||
|
|
||||||
sndist = FindDistance3D((cx-x),(cy-y),(cz-z)>>4);
|
sndist = FindDistance3D((cx-pos->x),(cy-pos->y),(cz-pos->z)>>4);
|
||||||
|
|
||||||
if (i >= 0 && (g_sounds[num].m&16) == 0 && PN == MUSICANDSFX && SLT < 999 && (sector[SECT].lotag&0xff) < 9)
|
if (i >= 0 && (g_sounds[num].m&16) == 0 && PN == MUSICANDSFX && SLT < 999 && (sector[SECT].lotag&0xff) < 9)
|
||||||
sndist = divscale14(sndist,(SHT+1));
|
sndist = divscale14(sndist,(SHT+1));
|
||||||
|
@ -367,7 +367,7 @@ int32_t S_PlaySoundXYZ(int32_t num,int32_t i,int32_t x,int32_t y,int32_t z)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sndang = 2048 + ca - getangle(cx-x,cy-y);
|
sndang = 2048 + ca - getangle(cx-pos->x,cy-pos->y);
|
||||||
sndang &= 2047;
|
sndang &= 2047;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,7 +512,12 @@ int32_t A_PlaySound(uint32_t num, int32_t i)
|
||||||
S_PlaySound(num);
|
S_PlaySound(num);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return S_PlaySoundXYZ(num,i,SX,SY,SZ);
|
{
|
||||||
|
vec3_t davector;
|
||||||
|
Bmemcpy(&davector,&sprite[i],sizeof(intptr_t) * 3);
|
||||||
|
// OSD_Printf("x: %d y: %d z: %d\n",davector.x,davector.y,davector.z);
|
||||||
|
return S_PlaySoundXYZ(num,i, &davector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void A_StopSound(int32_t num, int32_t i)
|
void A_StopSound(int32_t num, int32_t i)
|
||||||
|
|
Loading…
Reference in a new issue