mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 12:30:46 +00:00
-'shoot' replaced.
# Conflicts: # source/build/src/palette.cpp
This commit is contained in:
parent
f56a8360b0
commit
990cb2acb8
34 changed files with 2398 additions and 225 deletions
|
@ -2984,7 +2984,7 @@ void UpdateDacs(int nPalette, bool bNoTint)
|
||||||
nGreen = ClipRange(nGreen, -255, 255);
|
nGreen = ClipRange(nGreen, -255, 255);
|
||||||
nBlue = ClipRange(nBlue, -255, 255);
|
nBlue = ClipRange(nBlue, -255, 255);
|
||||||
|
|
||||||
videoSetPalette(0, nPalette, 0);
|
videoSetPalette(nPalette, 0);
|
||||||
videoTintBlood(nRed, nGreen, nBlue);
|
videoTintBlood(nRed, nGreen, nBlue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,8 +175,8 @@ void yax_drawrooms(void (*SpriteAnimFunc)(int32_t,int32_t,int32_t,int32_t,int32_
|
||||||
# define yax_drawrooms(SpriteAnimFunc, sectnum, didmirror, smoothr)
|
# define yax_drawrooms(SpriteAnimFunc, sectnum, didmirror, smoothr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLIPMASK0 (((1L)<<16)+1L)
|
#define CLIPMASK0 (((1)<<16)+1)
|
||||||
#define CLIPMASK1 (((256L)<<16)+64L)
|
#define CLIPMASK1 (((256)<<16)+64)
|
||||||
|
|
||||||
#define NEXTWALL(i) (wall[wall[i].nextwall])
|
#define NEXTWALL(i) (wall[wall[i].nextwall])
|
||||||
#define POINT2(i) (wall[wall[i].point2])
|
#define POINT2(i) (wall[wall[i].point2])
|
||||||
|
|
|
@ -149,7 +149,7 @@ inline void videoSetBrightness(int brightness)
|
||||||
typedef TFlags<ESetPalFlag> ESetPalFlags;
|
typedef TFlags<ESetPalFlag> ESetPalFlags;
|
||||||
DEFINE_TFLAGS_OPERATORS(ESetPalFlags)
|
DEFINE_TFLAGS_OPERATORS(ESetPalFlags)
|
||||||
|
|
||||||
void videoSetPalette(int dabrightness, int dapalid, ESetPalFlags flags);
|
void videoSetPalette(int dapalid, ESetPalFlags flags);
|
||||||
inline void videoFadePalette(uint8_t r, uint8_t g, uint8_t b, uint8_t offset)
|
inline void videoFadePalette(uint8_t r, uint8_t g, uint8_t b, uint8_t offset)
|
||||||
{
|
{
|
||||||
palfadergb.r = r;
|
palfadergb.r = r;
|
||||||
|
@ -157,6 +157,10 @@ inline void videoFadePalette(uint8_t r, uint8_t g, uint8_t b, uint8_t offset)
|
||||||
palfadergb.b = b;
|
palfadergb.b = b;
|
||||||
palfadergb.a = offset;
|
palfadergb.a = offset;
|
||||||
}
|
}
|
||||||
|
inline void videoclearFade()
|
||||||
|
{
|
||||||
|
palfadergb.d = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void videoTintBlood(int32_t r, int32_t g, int32_t b);
|
void videoTintBlood(int32_t r, int32_t g, int32_t b);
|
||||||
|
|
|
@ -74,7 +74,7 @@ void MyLoadPalette()
|
||||||
//
|
//
|
||||||
//kread(hFile, kenpal, sizeof(kenpal));
|
//kread(hFile, kenpal, sizeof(kenpal));
|
||||||
//kclose(hFile);
|
//kclose(hFile);
|
||||||
videoSetPalette(0, BASEPAL, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
SetOverscan(BASEPAL);
|
SetOverscan(BASEPAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ void GrabPalette()
|
||||||
{
|
{
|
||||||
SetOverscan(BASEPAL);
|
SetOverscan(BASEPAL);
|
||||||
|
|
||||||
videoSetPalette(0, BASEPAL, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
|
|
||||||
nPalDiff = 0;
|
nPalDiff = 0;
|
||||||
nPalDelay = 0;
|
nPalDelay = 0;
|
||||||
|
@ -183,7 +183,7 @@ void BlackOut()
|
||||||
|
|
||||||
void RestorePalette()
|
void RestorePalette()
|
||||||
{
|
{
|
||||||
videoSetPalette(0, BASEPAL, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
videoTintBlood(0, 0, 0);
|
videoTintBlood(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1043,8 +1043,6 @@ void CinemaFadeIn()
|
||||||
{
|
{
|
||||||
BlackOut();
|
BlackOut();
|
||||||
|
|
||||||
//videoSetPalette(0, ANIMPAL, Pal_Fullscreen);
|
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
if (videoGetRenderMode() >= REND_POLYMOST)
|
if (videoGetRenderMode() >= REND_POLYMOST)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1667,7 +1667,7 @@ void recon(int i, int explosion, int firelaser, int attacksnd, int painsnd, int
|
||||||
a = s->ang;
|
a = s->ang;
|
||||||
s->ang = hittype[i].tempang;
|
s->ang = hittype[i].tempang;
|
||||||
if (attacksnd >= 0) spritesound(attacksnd, i);
|
if (attacksnd >= 0) spritesound(attacksnd, i);
|
||||||
shoot(i, firelaser);
|
fi.shoot(i, firelaser);
|
||||||
s->ang = a;
|
s->ang = a;
|
||||||
}
|
}
|
||||||
if (t[2] > (26 * 3) || !cansee(s->x, s->y, s->z - (16 << 8), s->sectnum, ps[p].posx, ps[p].posy, ps[p].posz, ps[p].cursectnum))
|
if (t[2] > (26 * 3) || !cansee(s->x, s->y, s->z - (16 << 8), s->sectnum, ps[p].posx, ps[p].posy, ps[p].posz, ps[p].cursectnum))
|
||||||
|
@ -1701,7 +1701,7 @@ void recon(int i, int explosion, int firelaser, int attacksnd, int painsnd, int
|
||||||
else if ((t[2] & 15) == 0 && attacksnd >= 0)
|
else if ((t[2] & 15) == 0 && attacksnd >= 0)
|
||||||
{
|
{
|
||||||
spritesound(attacksnd, i);
|
spritesound(attacksnd, i);
|
||||||
shoot(i, firelaser);
|
fi.shoot(i, firelaser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->ang += getincangle(s->ang, getangle(ps[p].posx - s->x, ps[p].posy - s->y)) >> 2;
|
s->ang += getincangle(s->ang, getangle(ps[p].posx - s->x, ps[p].posy - s->y)) >> 2;
|
||||||
|
@ -2785,7 +2785,7 @@ void handle_se14(int i, bool checkstat, int RPG, int JIBS6)
|
||||||
{
|
{
|
||||||
j = s->ang;
|
j = s->ang;
|
||||||
s->ang = getangle(s->x - ps[p].posx, s->y - ps[p].posy);
|
s->ang = getangle(s->x - ps[p].posx, s->y - ps[p].posy);
|
||||||
shoot(i, RPG);
|
fi.shoot(i, RPG);
|
||||||
s->ang = j;
|
s->ang = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3325,7 +3325,7 @@ void handle_se05(int i, int FIRELASER)
|
||||||
{
|
{
|
||||||
j = s->ang;
|
j = s->ang;
|
||||||
s->ang = getangle(s->x - ps[p].posx, s->y - ps[p].posy);
|
s->ang = getangle(s->x - ps[p].posx, s->y - ps[p].posy);
|
||||||
shoot(i, FIRELASER);
|
fi.shoot(i, FIRELASER);
|
||||||
s->ang = j;
|
s->ang = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -190,6 +190,7 @@ struct ActorInfo
|
||||||
{
|
{
|
||||||
uint32_t scriptaddress;
|
uint32_t scriptaddress;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
int aimoffset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -200,8 +201,10 @@ enum sflags_t
|
||||||
SFLAG_NVG = 0x00000002,
|
SFLAG_NVG = 0x00000002,
|
||||||
SFLAG_INVENTORY = 0x00000004,
|
SFLAG_INVENTORY = 0x00000004,
|
||||||
SFLAG_ADULT = 0x00000008,
|
SFLAG_ADULT = 0x00000008,
|
||||||
|
SFLAG_SHRINKAUTOAIM = 0x00000010,
|
||||||
SFLAG_BADGUY = 0x00000020,
|
SFLAG_BADGUY = 0x00000020,
|
||||||
SFLAG_NOPAL = 0x00000040,
|
SFLAG_NOPAL = 0x00000040,
|
||||||
|
SFLAG_FORCEAUTOAIM = 0x00000080,
|
||||||
SFLAG_USEACTIVATOR = 0x00000200,
|
SFLAG_USEACTIVATOR = 0x00000200,
|
||||||
SFLAG_NOFLOORSHADOW = 0x00001000, // for temp. internal use, per-tile flag not checked
|
SFLAG_NOFLOORSHADOW = 0x00001000, // for temp. internal use, per-tile flag not checked
|
||||||
SFLAG_BADGUYSTAYPUT = 0x00008000,
|
SFLAG_BADGUYSTAYPUT = 0x00008000,
|
||||||
|
|
|
@ -3992,7 +3992,7 @@ void moveeffectors_d(void) //STATNUM 3
|
||||||
if (t[0])
|
if (t[0])
|
||||||
{
|
{
|
||||||
if (t[0] == 1)
|
if (t[0] == 1)
|
||||||
shoot(i, sc->extra);
|
fi.shoot(i, sc->extra);
|
||||||
else if (t[0] == 26 * 5)
|
else if (t[0] == 26 * 5)
|
||||||
t[0] = 0;
|
t[0] = 0;
|
||||||
t[0]++;
|
t[0]++;
|
||||||
|
|
|
@ -4020,7 +4020,7 @@ void moveeffectors_r(void) //STATNUM 3
|
||||||
if (t[0])
|
if (t[0])
|
||||||
{
|
{
|
||||||
if (t[0] == 1)
|
if (t[0] == 1)
|
||||||
shoot(i, sc->extra);
|
fi.shoot(i, sc->extra);
|
||||||
else if (t[0] == 26 * 5)
|
else if (t[0] == 26 * 5)
|
||||||
t[0] = 0;
|
t[0] = 0;
|
||||||
t[0]++;
|
t[0]++;
|
||||||
|
|
|
@ -93,6 +93,10 @@ int spawn_d(int j, int pn);
|
||||||
int spawn_r(int j, int pn);
|
int spawn_r(int j, int pn);
|
||||||
void check_fta_sounds_d(int i);
|
void check_fta_sounds_d(int i);
|
||||||
void check_fta_sounds_r(int i);
|
void check_fta_sounds_r(int i);
|
||||||
|
void incur_damage_d(struct player_struct* p);
|
||||||
|
void incur_damage_r(struct player_struct* p);
|
||||||
|
void shoot_d(int i, int atwith);
|
||||||
|
void shoot_r(int i, int atwith);
|
||||||
|
|
||||||
|
|
||||||
Dispatcher fi;
|
Dispatcher fi;
|
||||||
|
@ -133,7 +137,10 @@ void SetDispatcher()
|
||||||
checktimetosleep_d,
|
checktimetosleep_d,
|
||||||
move_d,
|
move_d,
|
||||||
spawn_d,
|
spawn_d,
|
||||||
check_fta_sounds_d
|
check_fta_sounds_d,
|
||||||
|
|
||||||
|
incur_damage_d,
|
||||||
|
shoot_d
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -171,6 +178,9 @@ void SetDispatcher()
|
||||||
move_r,
|
move_r,
|
||||||
spawn_r,
|
spawn_r,
|
||||||
check_fta_sounds_r,
|
check_fta_sounds_r,
|
||||||
|
|
||||||
|
incur_damage_r,
|
||||||
|
shoot_r
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,20 @@ void initactorflags_d()
|
||||||
4562,
|
4562,
|
||||||
4498,
|
4498,
|
||||||
4957 });
|
4957 });
|
||||||
|
|
||||||
|
setflag(SFLAG_SHRINKAUTOAIM, {
|
||||||
|
GREENSLIME,
|
||||||
|
GREENSLIME + 1,
|
||||||
|
GREENSLIME + 2,
|
||||||
|
GREENSLIME + 3,
|
||||||
|
GREENSLIME + 4,
|
||||||
|
GREENSLIME + 5,
|
||||||
|
GREENSLIME + 6,
|
||||||
|
GREENSLIME + 7,
|
||||||
|
});
|
||||||
|
|
||||||
|
actorinfo[ORGANTIC].aimoffset = 32 << 8;
|
||||||
|
actorinfo[ROTATEGUN].aimoffset = 32 << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,7 @@ void initactorflags_r()
|
||||||
DOLPHIN2,
|
DOLPHIN2,
|
||||||
TOUGHGAL });
|
TOUGHGAL });
|
||||||
|
|
||||||
|
actorinfo[RPG2].flags |= SFLAG_FORCEAUTOAIM;
|
||||||
}
|
}
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
|
@ -214,7 +214,7 @@ extern int32_t g_crosshairSum;
|
||||||
extern int32_t g_doQuickSave;
|
extern int32_t g_doQuickSave;
|
||||||
extern int32_t g_levelTextTime;
|
extern int32_t g_levelTextTime;
|
||||||
extern int32_t g_quitDeadline;
|
extern int32_t g_quitDeadline;
|
||||||
extern int32_t g_restorePalette;
|
extern int32_t restorepalette;
|
||||||
extern int32_t tempwallptr;
|
extern int32_t tempwallptr;
|
||||||
extern int32_t ticrandomseed;
|
extern int32_t ticrandomseed;
|
||||||
extern int32_t vote_map;
|
extern int32_t vote_map;
|
||||||
|
@ -524,6 +524,10 @@ struct Dispatcher
|
||||||
int (*spawn)(int j, int pn);
|
int (*spawn)(int j, int pn);
|
||||||
void (*check_fta_sounds)(int i);
|
void (*check_fta_sounds)(int i);
|
||||||
|
|
||||||
|
// player
|
||||||
|
void (*incur_damage)(struct player_struct* p);
|
||||||
|
void (*shoot)(int, int);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -469,7 +469,7 @@ int parse(void)
|
||||||
break;
|
break;
|
||||||
case concmd_shoot:
|
case concmd_shoot:
|
||||||
insptr++;
|
insptr++;
|
||||||
shoot(g_i, (short)*insptr);
|
fi.shoot(g_i, (short)*insptr);
|
||||||
insptr++;
|
insptr++;
|
||||||
break;
|
break;
|
||||||
case concmd_ifsoundid:
|
case concmd_ifsoundid:
|
||||||
|
|
|
@ -252,7 +252,7 @@ G_EXTERN input_t inputfifo[MOVEFIFOSIZ][MAXPLAYERS];
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
G_EXTERN int32_t g_noEnemies;
|
G_EXTERN int32_t g_noEnemies;
|
||||||
G_EXTERN int32_t g_restorePalette;
|
G_EXTERN int32_t restorepalette;
|
||||||
G_EXTERN uint32_t everyothertime;
|
G_EXTERN uint32_t everyothertime;
|
||||||
G_EXTERN uint32_t g_moveThingsCount;
|
G_EXTERN uint32_t g_moveThingsCount;
|
||||||
G_EXTERN double g_gameUpdateTime;
|
G_EXTERN double g_gameUpdateTime;
|
||||||
|
|
|
@ -37,4 +37,256 @@ source as it is released.
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// setpal
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void setpal_(struct player_struct* p) // cannot be activated yet.
|
||||||
|
{
|
||||||
|
int palette;;
|
||||||
|
if (p->DrugMode) palette = DRUGPAL;
|
||||||
|
else if (p->heat_on || (sector[p->cursectnum].ceilingpicnum >= TILE_FLOORSLIME && sector[p->cursectnum].ceilingpicnum <= TILE_FLOORSLIME+2)) palette = SLIMEPAL;
|
||||||
|
else if (sector[p->cursectnum].lotag == 2) palette = WATERPAL;
|
||||||
|
else palette = BASEPAL;
|
||||||
|
videoSetPalette(palette, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void quickkill(struct player_struct* p)
|
||||||
|
{
|
||||||
|
SetPlayerPal(p, PalEntry(48, 48, 48, 48));
|
||||||
|
|
||||||
|
sprite[p->i].extra = 0;
|
||||||
|
sprite[p->i].cstat |= 32768;
|
||||||
|
if (ud.god == 0) fi.guts(&sprite[p->i], TILE_JIBS6, 8, myconnectindex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void forceplayerangle(struct player_struct* p)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
|
||||||
|
n = 128 - (krand() & 255);
|
||||||
|
|
||||||
|
p->q16horiz += 64 << FRACBITS;
|
||||||
|
p->return_to_center = 9;
|
||||||
|
p->look_ang = n >> 1;
|
||||||
|
p->rotscrnang = n >> 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void tracers(int x1, int y1, int z1, int x2, int y2, int z2, int n)
|
||||||
|
{
|
||||||
|
int i, xv, yv, zv;
|
||||||
|
short sect = -1;
|
||||||
|
|
||||||
|
i = n + 1;
|
||||||
|
xv = (x2 - x1) / i;
|
||||||
|
yv = (y2 - y1) / i;
|
||||||
|
zv = (z2 - z1) / i;
|
||||||
|
|
||||||
|
if ((abs(x1 - x2) + abs(y1 - y2)) < 3084)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = n; i > 0; i--)
|
||||||
|
{
|
||||||
|
x1 += xv;
|
||||||
|
y1 += yv;
|
||||||
|
z1 += zv;
|
||||||
|
updatesector(x1, y1, §);
|
||||||
|
if (sect >= 0)
|
||||||
|
{
|
||||||
|
if (sector[sect].lotag == 2)
|
||||||
|
EGS(sect, x1, y1, z1, TILE_WATERBUBBLE, -32, 4 + (krand() & 3), 4 + (krand() & 3), krand() & 2047, 0, 0, ps[0].i, 5);
|
||||||
|
else
|
||||||
|
EGS(sect, x1, y1, z1, TILE_SMALLSMOKE, -32, 14, 14, 0, 0, 0, ps[0].i, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int hits(int i)
|
||||||
|
{
|
||||||
|
auto sp = &sprite[i];
|
||||||
|
int sx, sy, sz;
|
||||||
|
short sect;
|
||||||
|
short hw, hs;
|
||||||
|
int zoff;
|
||||||
|
|
||||||
|
if (sp->picnum == TILE_APLAYER) zoff = (40 << 8);
|
||||||
|
else zoff = 0;
|
||||||
|
|
||||||
|
hitscan(sp->x, sp->y, sp->z - zoff, sp->sectnum, sintable[(sp->ang + 512) & 2047], sintable[sp->ang & 2047], 0, §, &hw, &hs, &sx, &sy, &sz, CLIPMASK1);
|
||||||
|
|
||||||
|
return (FindDistance2D(sx - sp->x, sy - sp->y));
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int hitasprite(int i, short* hitsp)
|
||||||
|
{
|
||||||
|
auto sp = &sprite[i];
|
||||||
|
int sx, sy, sz, zoff;
|
||||||
|
short sect, hw;
|
||||||
|
|
||||||
|
if (badguy(&sprite[i]))
|
||||||
|
zoff = (42 << 8);
|
||||||
|
else if (sp->picnum == TILE_APLAYER) zoff = (39 << 8);
|
||||||
|
else zoff = 0;
|
||||||
|
|
||||||
|
hitscan(sp->x, sp->y, sp->z - zoff, sp->sectnum, sintable[(sp->ang + 512) & 2047], sintable[sp->ang & 2047], 0, §, &hw, hitsp, &sx, &sy, &sz, CLIPMASK1);
|
||||||
|
|
||||||
|
if (hw >= 0 && (wall[hw].cstat & 16) && badguy(&sprite[i]))
|
||||||
|
return((1 << 30));
|
||||||
|
|
||||||
|
return (FindDistance2D(sx - sp->x, sy - sp->y));
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int hitawall(struct player_struct* p, int* hitw)
|
||||||
|
{
|
||||||
|
int sx, sy, sz;
|
||||||
|
short sect, hs, hitw1;
|
||||||
|
|
||||||
|
hitscan(p->posx, p->posy, p->posz, p->cursectnum,
|
||||||
|
sintable[(p->getang() + 512) & 2047], sintable[p->getang() & 2047], 0, §, &hitw1, &hs, &sx, &sy, &sz, CLIPMASK0);
|
||||||
|
*hitw = hitw1;
|
||||||
|
|
||||||
|
return (FindDistance2D(sx - p->posx, sy - p->posy));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int aim(spritetype* s, int aang)
|
||||||
|
{
|
||||||
|
char gotshrinker, gotfreezer;
|
||||||
|
int i, j, a, k, cans;
|
||||||
|
int aimstats[] = { 10,13,1,2 };
|
||||||
|
int dx1, dy1, dx2, dy2, dx3, dy3, smax, sdist;
|
||||||
|
int xv, yv;
|
||||||
|
|
||||||
|
a = s->ang;
|
||||||
|
|
||||||
|
// Autoaim from DukeGDX.
|
||||||
|
if (s->picnum == TILE_APLAYER && ps[s->yvel].auto_aim == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
j = -1;
|
||||||
|
// if(s->picnum == TILE_APLAYER && ps[s->yvel].aim_mode) return -1;
|
||||||
|
|
||||||
|
if (isRR())
|
||||||
|
{
|
||||||
|
gotshrinker = 0;
|
||||||
|
gotfreezer = 0;
|
||||||
|
}
|
||||||
|
else if (isWW2GI())
|
||||||
|
{
|
||||||
|
gotshrinker = s->picnum == TILE_APLAYER && aplWeaponWorksLike[ps[s->yvel].curr_weapon][s->yvel] == SHRINKER_WEAPON;
|
||||||
|
gotfreezer = s->picnum == TILE_APLAYER && aplWeaponWorksLike[ps[s->yvel].curr_weapon][s->yvel] == FREEZE_WEAPON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gotshrinker = s->picnum == TILE_APLAYER && ps[s->yvel].curr_weapon == SHRINKER_WEAPON;
|
||||||
|
gotfreezer = s->picnum == TILE_APLAYER && ps[s->yvel].curr_weapon == FREEZE_WEAPON;
|
||||||
|
}
|
||||||
|
|
||||||
|
smax = 0x7fffffff;
|
||||||
|
|
||||||
|
dx1 = sintable[(a + 512 - aang) & 2047];
|
||||||
|
dy1 = sintable[(a - aang) & 2047];
|
||||||
|
dx2 = sintable[(a + 512 + aang) & 2047];
|
||||||
|
dy2 = sintable[(a + aang) & 2047];
|
||||||
|
|
||||||
|
dx3 = sintable[(a + 512) & 2047];
|
||||||
|
dy3 = sintable[a & 2047];
|
||||||
|
|
||||||
|
for (k = 0; k < 4; k++)
|
||||||
|
{
|
||||||
|
if (j >= 0)
|
||||||
|
break;
|
||||||
|
for (i = headspritestat[aimstats[k]]; i >= 0; i = nextspritestat[i])
|
||||||
|
if (sprite[i].xrepeat > 0 && sprite[i].extra >= 0 && (sprite[i].cstat & (257 + 32768)) == 257)
|
||||||
|
if (badguy(&sprite[i]) || k < 2)
|
||||||
|
{
|
||||||
|
auto sp = &sprite[i];
|
||||||
|
if (badguy(&sprite[i]) || sp->picnum == TILE_APLAYER)
|
||||||
|
{
|
||||||
|
if (sp->picnum == TILE_APLAYER &&
|
||||||
|
(isRR() && ud.ffire == 0) &&
|
||||||
|
ud.coop == 1 &&
|
||||||
|
s->picnum == TILE_APLAYER &&
|
||||||
|
s != &sprite[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (gotshrinker && sprite[i].xrepeat < 30 && !(actorinfo[sp->picnum].flags & SFLAG_SHRINKAUTOAIM)) continue;
|
||||||
|
if (gotfreezer && sprite[i].pal == 1) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
xv = (sp->x - s->x);
|
||||||
|
yv = (sp->y - s->y);
|
||||||
|
|
||||||
|
if ((dy1 * xv) <= (dx1 * yv))
|
||||||
|
if ((dy2 * xv) >= (dx2 * yv))
|
||||||
|
{
|
||||||
|
sdist = mulscale(dx3, xv, 14) + mulscale(dy3, yv, 14);
|
||||||
|
if (sdist > 512 && sdist < smax)
|
||||||
|
{
|
||||||
|
if (s->picnum == TILE_APLAYER)
|
||||||
|
a = (abs(scale(sp->z - s->z, 10, sdist) - (ps[s->yvel].gethorizdiff() - 100)) < 100);
|
||||||
|
else a = 1;
|
||||||
|
|
||||||
|
cans = cansee(sp->x, sp->y, sp->z - (32 << 8) + actorinfo[sp->picnum].aimoffset, sp->sectnum, s->x, s->y, s->z - (32 << 8), s->sectnum);
|
||||||
|
|
||||||
|
if (a && cans)
|
||||||
|
{
|
||||||
|
smax = sdist;
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
|
@ -180,6 +180,7 @@ typedef struct player_struct {
|
||||||
void setoang(int v) { oq16ang = v << FRACBITS; }
|
void setoang(int v) { oq16ang = v << FRACBITS; }
|
||||||
void addhoriz(int v) { q16horiz += (v << FRACBITS); }
|
void addhoriz(int v) { q16horiz += (v << FRACBITS); }
|
||||||
int gethoriz() { return q16horiz >> FRACBITS; }
|
int gethoriz() { return q16horiz >> FRACBITS; }
|
||||||
|
int gethorizdiff() { return (q16horiz + q16horizoff) >> FRACBITS; }
|
||||||
|
|
||||||
int32_t truefz, truecz, player_par;
|
int32_t truefz, truecz, player_par;
|
||||||
int32_t randomflamex, exitx, exity;
|
int32_t randomflamex, exitx, exity;
|
||||||
|
@ -257,7 +258,7 @@ typedef struct player_struct {
|
||||||
int16_t moto_bump, moto_bump_target, moto_turb;
|
int16_t moto_bump, moto_bump_target, moto_turb;
|
||||||
int16_t drug_stat[3];
|
int16_t drug_stat[3];
|
||||||
int32_t drug_aspect;
|
int32_t drug_aspect;
|
||||||
uint8_t drug_mode, lotag800kill, sea_sick_stat;
|
uint8_t DrugMode, lotag800kill, sea_sick_stat;
|
||||||
int32_t drug_timer;
|
int32_t drug_timer;
|
||||||
int32_t sea_sick;
|
int32_t sea_sick;
|
||||||
uint8_t hurt_delay2, nocheat;
|
uint8_t hurt_delay2, nocheat;
|
||||||
|
@ -356,12 +357,6 @@ extern int32_t ticrandomseed;
|
||||||
|
|
||||||
#define SHOOT_HARDCODED_ZVEL INT32_MIN
|
#define SHOOT_HARDCODED_ZVEL INT32_MIN
|
||||||
|
|
||||||
int A_Shoot(int spriteNum, int projecTile);
|
|
||||||
inline int shoot(int s, int p)
|
|
||||||
{
|
|
||||||
return A_Shoot(s, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void P_PalFrom(DukePlayer_t *pPlayer, uint8_t f, uint8_t r, uint8_t g, uint8_t b)
|
static inline void P_PalFrom(DukePlayer_t *pPlayer, uint8_t f, uint8_t r, uint8_t g, uint8_t b)
|
||||||
{
|
{
|
||||||
pPlayer->pals.f = f;
|
pPlayer->pals.f = f;
|
||||||
|
@ -380,8 +375,7 @@ inline void SetPlayerPal(DukePlayer_t* pPlayer, PalEntry pe)
|
||||||
|
|
||||||
int hitawall(DukePlayer_t* pPlayer, int* hitWall);
|
int hitawall(DukePlayer_t* pPlayer, int* hitWall);
|
||||||
void P_AddKills(DukePlayer_t * pPlayer, uint16_t kills);
|
void P_AddKills(DukePlayer_t * pPlayer, uint16_t kills);
|
||||||
int32_t A_GetHitscanRange(int spriteNum);
|
int hits(int spriteNum);
|
||||||
inline int hits(int s) { return A_GetHitscanRange(s); }
|
|
||||||
void P_GetInput(int playerNum);
|
void P_GetInput(int playerNum);
|
||||||
void P_GetInputMotorcycle(int playerNum);
|
void P_GetInputMotorcycle(int playerNum);
|
||||||
void P_GetInputBoat(int playerNum);
|
void P_GetInputBoat(int playerNum);
|
||||||
|
@ -405,11 +399,7 @@ void getzsofslope_player(int sectNum, int playerX, int playerY, int32_t *pCeilZ,
|
||||||
void P_UpdatePosWhenViewingCam(DukePlayer_t *pPlayer);
|
void P_UpdatePosWhenViewingCam(DukePlayer_t *pPlayer);
|
||||||
void P_ProcessInput(int playerNum);
|
void P_ProcessInput(int playerNum);
|
||||||
void P_DHProcessInput(int playerNum);
|
void P_DHProcessInput(int playerNum);
|
||||||
void P_QuickKill(DukePlayer_t *pPlayer);
|
void quickkill(DukePlayer_t* pPlayer);
|
||||||
inline void quickkill(DukePlayer_t* pPlayer)
|
|
||||||
{
|
|
||||||
P_QuickKill(pPlayer);
|
|
||||||
}
|
|
||||||
void P_SelectNextInvItem(DukePlayer_t *pPlayer);
|
void P_SelectNextInvItem(DukePlayer_t *pPlayer);
|
||||||
void P_UpdateScreenPal(DukePlayer_t *pPlayer);
|
void P_UpdateScreenPal(DukePlayer_t *pPlayer);
|
||||||
inline void setpal(DukePlayer_t* pPlayer)
|
inline void setpal(DukePlayer_t* pPlayer)
|
||||||
|
@ -455,6 +445,11 @@ extern int16_t max_ammo_amount[MAX_WEAPONS];
|
||||||
|
|
||||||
void P_SetWeaponGamevars(int playerNum, const DukePlayer_t* const pPlayer);
|
void P_SetWeaponGamevars(int playerNum, const DukePlayer_t* const pPlayer);
|
||||||
|
|
||||||
|
void tracers(int x1, int y1, int z1, int x2, int y2, int z2, int n);
|
||||||
|
int hits(int i);
|
||||||
|
int hitasprite(int i, short* hitsp);
|
||||||
|
int aim(spritetype* s, int aang);
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -27,7 +27,917 @@ Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
|
||||||
|
|
||||||
#include "ns.h"
|
#include "ns.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "game.h"
|
||||||
|
#include "names_rr.h"
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void incur_damage_r(struct player_struct* p)
|
||||||
|
{
|
||||||
|
long damage = 0L, unk = 0L, shield_damage = 0L;
|
||||||
|
short gut = 0;
|
||||||
|
|
||||||
|
sprite[p->i].extra -= p->extra_extra8 >> 8;
|
||||||
|
|
||||||
|
damage = sprite[p->i].extra - p->last_extra;
|
||||||
|
if (damage < 0)
|
||||||
|
{
|
||||||
|
p->extra_extra8 = 0;
|
||||||
|
|
||||||
|
if (p->steroids_amount > 0 && p->steroids_amount < 400)
|
||||||
|
{
|
||||||
|
shield_damage = damage * (20 + (krand() % 30)) / 100;
|
||||||
|
damage -= shield_damage;
|
||||||
|
}
|
||||||
|
if (p->drink_amt > 31 && p->drink_amt < 65)
|
||||||
|
gut++;
|
||||||
|
if (p->eat > 31 && p->eat < 65)
|
||||||
|
gut++;
|
||||||
|
|
||||||
|
switch (gut)
|
||||||
|
{
|
||||||
|
double ddamage;
|
||||||
|
case 1:
|
||||||
|
ddamage = damage;
|
||||||
|
ddamage *= 0.75;
|
||||||
|
damage = ddamage;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ddamage = damage;
|
||||||
|
ddamage *= 0.25;
|
||||||
|
damage = ddamage;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite[p->i].extra = p->last_extra + damage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void shoot_r(int i, int atwith)
|
||||||
|
{
|
||||||
|
short sect, hitsect, hitspr, hitwall, l, sa, p, j, k, scount;
|
||||||
|
int sx, sy, sz, vel, zvel, hitx, hity, hitz, x, oldzvel, dal;
|
||||||
|
uint8_t sizx, sizy;
|
||||||
|
spritetype* s;
|
||||||
|
|
||||||
|
s = &sprite[i];
|
||||||
|
sect = s->sectnum;
|
||||||
|
zvel = 0;
|
||||||
|
|
||||||
|
if (s->picnum == TILE_APLAYER)
|
||||||
|
{
|
||||||
|
p = s->yvel;
|
||||||
|
|
||||||
|
sx = ps[p].posx;
|
||||||
|
sy = ps[p].posy;
|
||||||
|
sz = ps[p].posz + ps[p].pyoff + (4 << 8);
|
||||||
|
sa = ps[p].getang();
|
||||||
|
|
||||||
|
if (isRRRA()) ps[p].crack_time = 777;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = -1;
|
||||||
|
sa = s->ang;
|
||||||
|
sx = s->x;
|
||||||
|
sy = s->y;
|
||||||
|
sz = s->z - ((s->yrepeat * tilesiz[s->picnum].y) << 1) + (4 << 8);
|
||||||
|
sz -= (7 << 8);
|
||||||
|
if (badguy(s))
|
||||||
|
{
|
||||||
|
sx += (sintable[(sa + 1024 + 96) & 2047] >> 7);
|
||||||
|
sy += (sintable[(sa + 512 + 96) & 2047] >> 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (atwith)
|
||||||
|
{
|
||||||
|
case SLINGBLADE:
|
||||||
|
if (!isRRRA()) break;
|
||||||
|
goto rrra_slingblade;
|
||||||
|
|
||||||
|
case BLOODSPLAT1:
|
||||||
|
case BLOODSPLAT2:
|
||||||
|
case BLOODSPLAT3:
|
||||||
|
case BLOODSPLAT4:
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
sa += 64 - (krand() & 127);
|
||||||
|
else sa += 1024 + 64 - (krand() & 127);
|
||||||
|
zvel = 1024 - (krand() & 2047);
|
||||||
|
case KNEE:
|
||||||
|
case GROWSPARK:
|
||||||
|
rrra_slingblade:
|
||||||
|
if (atwith == KNEE || atwith == GROWSPARK || atwith == SLINGBLADE)
|
||||||
|
{
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
zvel = (100 - ps[p].gethorizdiff()) << 5;
|
||||||
|
sz += (6 << 8);
|
||||||
|
sa += 15;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = ps[findplayer(s, &x)].i;
|
||||||
|
zvel = ((sprite[j].z - sz) << 8) / (x + 1);
|
||||||
|
sa = getangle(sprite[j].x - sx, sprite[j].y - sy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hitscan(sx, sy, sz, sect,
|
||||||
|
sintable[(sa + 512) & 2047],
|
||||||
|
sintable[sa & 2047], zvel << 6,
|
||||||
|
&hitsect, &hitwall, &hitspr, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
|
|
||||||
|
if (isRRRA() && ((sector[hitsect].lotag == 160 && zvel > 0) || (sector[hitsect].lotag == 161 && zvel < 0))
|
||||||
|
&& hitspr == -1 && hitwall == -1)
|
||||||
|
{
|
||||||
|
short ii;
|
||||||
|
for (ii = 0; ii < MAXSPRITES; ii++)
|
||||||
|
{
|
||||||
|
if (sprite[ii].sectnum == hitsect && sprite[ii].picnum == SECTOREFFECTOR
|
||||||
|
&& sprite[ii].lotag == 7)
|
||||||
|
{
|
||||||
|
int nx, ny, nz;
|
||||||
|
nx = hitx + (sprite[sprite[ii].owner].x - sprite[ii].x);
|
||||||
|
ny = hity + (sprite[sprite[ii].owner].y - sprite[ii].y);
|
||||||
|
if (sector[hitsect].lotag == 161)
|
||||||
|
{
|
||||||
|
nz = sector[sprite[sprite[ii].owner].sectnum].floorz;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nz = sector[sprite[sprite[ii].owner].sectnum].ceilingz;
|
||||||
|
}
|
||||||
|
hitscan(nx, ny, nz, sprite[sprite[ii].owner].sectnum,
|
||||||
|
sintable[(sa + 512) & 2047],
|
||||||
|
sintable[sa & 2047], zvel << 6,
|
||||||
|
&hitsect, &hitwall, &hitspr, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (atwith == BLOODSPLAT1 ||
|
||||||
|
atwith == BLOODSPLAT2 ||
|
||||||
|
atwith == BLOODSPLAT3 ||
|
||||||
|
atwith == BLOODSPLAT4)
|
||||||
|
{
|
||||||
|
if (FindDistance2D(sx - hitx, sy - hity) < 1024)
|
||||||
|
if (hitwall >= 0 && wall[hitwall].overpicnum != BIGFORCE)
|
||||||
|
if ((wall[hitwall].nextsector >= 0 && hitsect >= 0 &&
|
||||||
|
sector[wall[hitwall].nextsector].lotag == 0 &&
|
||||||
|
sector[hitsect].lotag == 0 &&
|
||||||
|
sector[wall[hitwall].nextsector].lotag == 0 &&
|
||||||
|
(sector[hitsect].floorz - sector[wall[hitwall].nextsector].floorz) > (16 << 8)) ||
|
||||||
|
(wall[hitwall].nextsector == -1 && sector[hitsect].lotag == 0))
|
||||||
|
if ((wall[hitwall].cstat & 16) == 0)
|
||||||
|
{
|
||||||
|
if (wall[hitwall].nextsector >= 0)
|
||||||
|
{
|
||||||
|
k = headspritesect[wall[hitwall].nextsector];
|
||||||
|
while (k >= 0)
|
||||||
|
{
|
||||||
|
if (sprite[k].statnum == 3 && sprite[k].lotag == 13)
|
||||||
|
return;
|
||||||
|
k = nextspritesect[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wall[hitwall].nextwall >= 0 &&
|
||||||
|
wall[wall[hitwall].nextwall].hitag != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (wall[hitwall].hitag == 0)
|
||||||
|
{
|
||||||
|
k = fi.spawn(i, atwith);
|
||||||
|
sprite[k].xvel = -12;
|
||||||
|
sprite[k].ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
||||||
|
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
||||||
|
sprite[k].x = hitx;
|
||||||
|
sprite[k].y = hity;
|
||||||
|
sprite[k].z = hitz;
|
||||||
|
sprite[k].cstat |= (krand() & 4);
|
||||||
|
ssp(k, CLIPMASK0);
|
||||||
|
setsprite(k, sprite[k].x, sprite[k].y, sprite[k].z);
|
||||||
|
if (s->picnum == OOZFILTER)
|
||||||
|
sprite[k].pal = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hitsect < 0) break;
|
||||||
|
|
||||||
|
if ((abs(sx - hitx) + abs(sy - hity)) < 1024)
|
||||||
|
{
|
||||||
|
if (hitwall >= 0 || hitspr >= 0)
|
||||||
|
{
|
||||||
|
if (isRRRA() && atwith == SLINGBLADE)
|
||||||
|
{
|
||||||
|
j = EGS(hitsect, hitx, hity, hitz, SLINGBLADE, -15, 0, 0, sa, 32, 0, i, 4);
|
||||||
|
sprite[j].extra += 50;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = EGS(hitsect, hitx, hity, hitz, KNEE, -15, 0, 0, sa, 32, 0, i, 4);
|
||||||
|
sprite[j].extra += (krand() & 7);
|
||||||
|
}
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
k = fi.spawn(j, SMALLSMOKE);
|
||||||
|
sprite[k].z -= (8 << 8);
|
||||||
|
if (atwith == KNEE)
|
||||||
|
spritesound(KICK_HIT, j);
|
||||||
|
else if (isRRRA() && atwith == SLINGBLADE)
|
||||||
|
spritesound(260, j);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400)
|
||||||
|
sprite[j].extra += (max_player_health >> 2);
|
||||||
|
|
||||||
|
if (hitspr >= 0 && sprite[hitspr].picnum != ACCESSSWITCH && sprite[hitspr].picnum != ACCESSSWITCH2)
|
||||||
|
{
|
||||||
|
fi.checkhitsprite(hitspr, j);
|
||||||
|
if (p >= 0) fi.checkhitswitch(p, hitspr, 1);
|
||||||
|
}
|
||||||
|
else if (hitwall >= 0)
|
||||||
|
{
|
||||||
|
if (wall[hitwall].cstat & 2)
|
||||||
|
if (wall[hitwall].nextsector >= 0)
|
||||||
|
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
|
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
||||||
|
{
|
||||||
|
fi.checkhitwall(j, hitwall, hitx, hity, hitz, atwith);
|
||||||
|
if (p >= 0) fi.checkhitswitch(p, hitwall, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
||||||
|
{
|
||||||
|
j = fi.spawn(ps[p].i, WATERSPLASH2);
|
||||||
|
sprite[j].x = hitx;
|
||||||
|
sprite[j].y = hity;
|
||||||
|
sprite[j].ang = ps[p].getang(); // Total tweek
|
||||||
|
sprite[j].xvel = 32;
|
||||||
|
ssp(i, 0);
|
||||||
|
sprite[j].xvel = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOTSPARK1:
|
||||||
|
case SHOTGUN:
|
||||||
|
case CHAINGUN:
|
||||||
|
|
||||||
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
j = aim(s, AUTO_AIM_ANGLE);
|
||||||
|
if (j >= 0)
|
||||||
|
{
|
||||||
|
dal = ((sprite[j].xrepeat * tilesiz[sprite[j].picnum].y) << 1) + (5 << 8);
|
||||||
|
zvel = ((sprite[j].z - sz - dal) << 8) / ldist(&sprite[ps[p].i], &sprite[j]);
|
||||||
|
sa = getangle(sprite[j].x - sx, sprite[j].y - sy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (atwith == SHOTSPARK1)
|
||||||
|
{
|
||||||
|
if (j == -1)
|
||||||
|
{
|
||||||
|
sa += 16 - (krand() & 31);
|
||||||
|
zvel = (100 - ps[p].gethorizdiff()) << 5;
|
||||||
|
zvel += 128 - (krand() & 255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (atwith == SHOTGUN)
|
||||||
|
sa += 64 - (krand() & 127);
|
||||||
|
else
|
||||||
|
sa += 16 - (krand() & 31);
|
||||||
|
if (j == -1) zvel = (100 - ps[p].gethorizdiff()) << 5;
|
||||||
|
zvel += 128 - (krand() & 255);
|
||||||
|
}
|
||||||
|
sz -= (2 << 8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = findplayer(s, &x);
|
||||||
|
sz -= (4 << 8);
|
||||||
|
zvel = ((ps[j].posz - sz) << 8) / (ldist(&sprite[ps[j].i], s));
|
||||||
|
if (s->picnum != BOSS1)
|
||||||
|
{
|
||||||
|
zvel += 128 - (krand() & 255);
|
||||||
|
sa += 32 - (krand() & 63);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zvel += 128 - (krand() & 255);
|
||||||
|
sa = getangle(ps[j].posx - sx, ps[j].posy - sy) + 64 - (krand() & 127);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s->cstat &= ~257;
|
||||||
|
hitscan(sx, sy, sz, sect,
|
||||||
|
sintable[(sa + 512) & 2047],
|
||||||
|
sintable[sa & 2047],
|
||||||
|
zvel << 6, &hitsect, &hitwall, &hitspr, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
|
|
||||||
|
if (isRRRA() && (((sector[hitsect].lotag == 160 && zvel > 0) || (sector[hitsect].lotag == 161 && zvel < 0))
|
||||||
|
&& hitspr == -1 && hitwall == -1))
|
||||||
|
{
|
||||||
|
short ii;
|
||||||
|
for (ii = 0; ii < MAXSPRITES; ii++)
|
||||||
|
{
|
||||||
|
if (sprite[ii].sectnum == hitsect && sprite[ii].picnum == SECTOREFFECTOR
|
||||||
|
&& sprite[ii].lotag == 7)
|
||||||
|
{
|
||||||
|
int nx, ny, nz;
|
||||||
|
nx = hitx + (sprite[sprite[ii].owner].x - sprite[ii].x);
|
||||||
|
ny = hity + (sprite[sprite[ii].owner].y - sprite[ii].y);
|
||||||
|
if (sector[hitsect].lotag == 161)
|
||||||
|
{
|
||||||
|
nz = sector[sprite[sprite[ii].owner].sectnum].floorz;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nz = sector[sprite[sprite[ii].owner].sectnum].ceilingz;
|
||||||
|
}
|
||||||
|
hitscan(nx, ny, nz, sprite[sprite[ii].owner].sectnum,
|
||||||
|
sintable[(sa + 512) & 2047],
|
||||||
|
sintable[sa & 2047], zvel << 6,
|
||||||
|
&hitsect, &hitwall, &hitspr, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s->cstat |= 257;
|
||||||
|
|
||||||
|
if (hitsect < 0) return;
|
||||||
|
|
||||||
|
if (atwith == SHOTGUN)
|
||||||
|
if (sector[hitsect].lotag == 1)
|
||||||
|
if (krand() & 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((krand() & 15) == 0 && sector[hitsect].lotag == 2)
|
||||||
|
tracers(hitx, hity, hitz, sx, sy, sz, 8 - (ud.multimode >> 1));
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
k = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 10, 10, sa, 0, 0, i, 4);
|
||||||
|
sprite[k].extra = ScriptCode[actorinfo[atwith].scriptaddress];
|
||||||
|
sprite[k].extra += (krand() % 6);
|
||||||
|
|
||||||
|
if (hitwall == -1 && hitspr == -1)
|
||||||
|
{
|
||||||
|
if (zvel < 0)
|
||||||
|
{
|
||||||
|
if (sector[hitsect].ceilingstat & 1)
|
||||||
|
{
|
||||||
|
sprite[k].xrepeat = 0;
|
||||||
|
sprite[k].yrepeat = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fi.checkhitceiling(hitsect);
|
||||||
|
}
|
||||||
|
if (sector[hitsect].lotag != 1)
|
||||||
|
fi.spawn(k, SMALLSMOKE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hitspr >= 0)
|
||||||
|
{
|
||||||
|
if (sprite[hitspr].picnum == 1930)
|
||||||
|
return;
|
||||||
|
fi.checkhitsprite(hitspr, k);
|
||||||
|
if (sprite[hitspr].picnum == TILE_APLAYER && (ud.coop != 1 || ud.ffire == 1))
|
||||||
|
{
|
||||||
|
l = fi.spawn(k, JIBS6);
|
||||||
|
sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
||||||
|
sprite[l].z += (4 << 8);
|
||||||
|
sprite[l].xvel = 16;
|
||||||
|
sprite[l].xrepeat = sprite[l].yrepeat = 24;
|
||||||
|
sprite[l].ang += 64 - (krand() & 127);
|
||||||
|
}
|
||||||
|
else fi.spawn(k, SMALLSMOKE);
|
||||||
|
|
||||||
|
if (p >= 0 && (
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH ||
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH + 1 ||
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH2 ||
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH2 + 1 ||
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH3 ||
|
||||||
|
sprite[hitspr].picnum == DIPSWITCH3 + 1 ||
|
||||||
|
(isRRRA() && sprite[hitspr].picnum == RRTILE8660) ||
|
||||||
|
sprite[hitspr].picnum == HANDSWITCH ||
|
||||||
|
sprite[hitspr].picnum == HANDSWITCH + 1))
|
||||||
|
{
|
||||||
|
fi.checkhitswitch(p, hitspr, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (hitwall >= 0)
|
||||||
|
{
|
||||||
|
fi.spawn(k, SMALLSMOKE);
|
||||||
|
|
||||||
|
if (fi.isadoorwall(wall[hitwall].picnum) == 1)
|
||||||
|
goto SKIPBULLETHOLE;
|
||||||
|
if (isablockdoor(wall[hitwall].picnum) == 1)
|
||||||
|
goto SKIPBULLETHOLE;
|
||||||
|
if (p >= 0 && (
|
||||||
|
wall[hitwall].picnum == DIPSWITCH ||
|
||||||
|
wall[hitwall].picnum == DIPSWITCH + 1 ||
|
||||||
|
wall[hitwall].picnum == DIPSWITCH2 ||
|
||||||
|
wall[hitwall].picnum == DIPSWITCH2 + 1 ||
|
||||||
|
wall[hitwall].picnum == DIPSWITCH3 ||
|
||||||
|
wall[hitwall].picnum == DIPSWITCH3 + 1 ||
|
||||||
|
(isRRRA() && wall[hitwall].picnum == RRTILE8660) ||
|
||||||
|
wall[hitwall].picnum == HANDSWITCH ||
|
||||||
|
wall[hitwall].picnum == HANDSWITCH + 1))
|
||||||
|
{
|
||||||
|
fi.checkhitswitch(p, hitwall, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wall[hitwall].hitag != 0 || (wall[hitwall].nextwall >= 0 && wall[wall[hitwall].nextwall].hitag != 0))
|
||||||
|
goto SKIPBULLETHOLE;
|
||||||
|
|
||||||
|
if (hitsect >= 0 && sector[hitsect].lotag == 0)
|
||||||
|
if (wall[hitwall].overpicnum != BIGFORCE)
|
||||||
|
if ((wall[hitwall].nextsector >= 0 && sector[wall[hitwall].nextsector].lotag == 0) ||
|
||||||
|
(wall[hitwall].nextsector == -1 && sector[hitsect].lotag == 0))
|
||||||
|
if ((wall[hitwall].cstat & 16) == 0)
|
||||||
|
{
|
||||||
|
if (wall[hitwall].nextsector >= 0)
|
||||||
|
{
|
||||||
|
l = headspritesect[wall[hitwall].nextsector];
|
||||||
|
while (l >= 0)
|
||||||
|
{
|
||||||
|
if (sprite[l].statnum == 3 && sprite[l].lotag == 13)
|
||||||
|
goto SKIPBULLETHOLE;
|
||||||
|
l = nextspritesect[l];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
l = headspritestat[5];
|
||||||
|
while (l >= 0)
|
||||||
|
{
|
||||||
|
if (sprite[l].picnum == BULLETHOLE)
|
||||||
|
if (dist(&sprite[l], &sprite[k]) < (12 + (krand() & 7)))
|
||||||
|
goto SKIPBULLETHOLE;
|
||||||
|
l = nextspritestat[l];
|
||||||
|
}
|
||||||
|
l = fi.spawn(k, BULLETHOLE);
|
||||||
|
sprite[l].xvel = -1;
|
||||||
|
sprite[l].ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
||||||
|
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
||||||
|
ssp(l, CLIPMASK0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SKIPBULLETHOLE:
|
||||||
|
|
||||||
|
if (wall[hitwall].cstat & 2)
|
||||||
|
if (wall[hitwall].nextsector >= 0)
|
||||||
|
if (hitz >= (sector[wall[hitwall].nextsector].floorz))
|
||||||
|
hitwall = wall[hitwall].nextwall;
|
||||||
|
|
||||||
|
fi.checkhitwall(k, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
k = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 24, 24, sa, 0, 0, i, 4);
|
||||||
|
sprite[k].extra = ScriptCode[actorinfo[atwith].scriptaddress];
|
||||||
|
|
||||||
|
if (hitspr >= 0)
|
||||||
|
{
|
||||||
|
fi.checkhitsprite(hitspr, k);
|
||||||
|
if (sprite[hitspr].picnum != TILE_APLAYER)
|
||||||
|
fi.spawn(k, SMALLSMOKE);
|
||||||
|
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
|
||||||
|
}
|
||||||
|
else if (hitwall >= 0)
|
||||||
|
fi.checkhitwall(k, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((krand() & 255) < 10)
|
||||||
|
{
|
||||||
|
vec3_t v{ hitx, hity, hitz };
|
||||||
|
S_PlaySound3D(PISTOL_RICOCHET, k, &v);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
case TRIPBOMBSPRITE:
|
||||||
|
j = fi.spawn(i, atwith);
|
||||||
|
sprite[j].xvel = 32;
|
||||||
|
sprite[j].ang = sprite[i].ang;
|
||||||
|
sprite[j].z -= (5 << 8);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOWLINGBALL:
|
||||||
|
j = fi.spawn(i, atwith);
|
||||||
|
sprite[j].xvel = 250;
|
||||||
|
sprite[j].ang = sprite[i].ang;
|
||||||
|
sprite[j].z -= (15 << 8);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OWHIP:
|
||||||
|
case UWHIP:
|
||||||
|
|
||||||
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
scount = 1;
|
||||||
|
if (atwith == 3471)
|
||||||
|
{
|
||||||
|
vel = 300;
|
||||||
|
sz -= (15 << 8);
|
||||||
|
scount = 1;
|
||||||
|
}
|
||||||
|
else if (atwith == 3475)
|
||||||
|
{
|
||||||
|
vel = 300;
|
||||||
|
sz += (4 << 8);
|
||||||
|
scount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
j = aim(s, AUTO_AIM_ANGLE);
|
||||||
|
|
||||||
|
if (j >= 0)
|
||||||
|
{
|
||||||
|
dal = ((sprite[j].xrepeat * tilesiz[sprite[j].picnum].y) << 1) - (12 << 8);
|
||||||
|
zvel = ((sprite[j].z - sz - dal) * vel) / ldist(&sprite[ps[p].i], &sprite[j]);
|
||||||
|
sa = getangle(sprite[j].x - sx, sprite[j].y - sy);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
zvel = (100 - ps[p].gethorizdiff()) * 98;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = findplayer(s, &x);
|
||||||
|
// sa = getangle(ps[j].oposx-sx,ps[j].oposy-sy);
|
||||||
|
if (s->picnum == VIXEN)
|
||||||
|
sa -= (krand() & 16);
|
||||||
|
else
|
||||||
|
sa += 16 - (krand() & 31);
|
||||||
|
zvel = (((ps[j].oposz - sz + (3 << 8))) * vel) / ldist(&sprite[ps[j].i], s);
|
||||||
|
}
|
||||||
|
|
||||||
|
oldzvel = zvel;
|
||||||
|
sizx = 18; sizy = 18;
|
||||||
|
|
||||||
|
if (p >= 0) sizx = 7, sizy = 7;
|
||||||
|
else sizx = 8, sizy = 8;
|
||||||
|
|
||||||
|
while (scount > 0)
|
||||||
|
{
|
||||||
|
j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, i, 4);
|
||||||
|
sprite[j].extra += (krand() & 7);
|
||||||
|
|
||||||
|
sprite[j].cstat = 128;
|
||||||
|
sprite[j].clipdist = 4;
|
||||||
|
|
||||||
|
sa = s->ang + 32 - (krand() & 63);
|
||||||
|
zvel = oldzvel + 512 - (krand() & 1023);
|
||||||
|
|
||||||
|
scount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
case FIRELASER:
|
||||||
|
case SPIT:
|
||||||
|
case COOLEXPLOSION1:
|
||||||
|
|
||||||
|
if (isRRRA())
|
||||||
|
{
|
||||||
|
if (atwith != SPIT && s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
scount = 1;
|
||||||
|
if (atwith == SPIT)
|
||||||
|
{
|
||||||
|
if (s->picnum == 8705)
|
||||||
|
vel = 600;
|
||||||
|
else
|
||||||
|
vel = 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
scount = 1;
|
||||||
|
if (atwith == SPIT) vel = 400;
|
||||||
|
}
|
||||||
|
if (atwith != SPIT)
|
||||||
|
{
|
||||||
|
vel = 840;
|
||||||
|
sz -= (4 << 7);
|
||||||
|
if (s->picnum == 4649)
|
||||||
|
{
|
||||||
|
sx += sintable[(s->ang + 512 + 256) & 2047] >> 6;
|
||||||
|
sy += sintable[(s->ang + 256) & 2047] >> 6;
|
||||||
|
sz += (12 << 8);
|
||||||
|
}
|
||||||
|
if (s->picnum == VIXEN)
|
||||||
|
{
|
||||||
|
sz -= (12 << 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
j = aim(s, AUTO_AIM_ANGLE);
|
||||||
|
|
||||||
|
if (j >= 0)
|
||||||
|
{
|
||||||
|
sx += sintable[(s->ang + 512 + 160) & 2047] >> 7;
|
||||||
|
sy += sintable[(s->ang + 160) & 2047] >> 7;
|
||||||
|
dal = ((sprite[j].xrepeat * tilesiz[sprite[j].picnum].y) << 1) - (12 << 8);
|
||||||
|
zvel = ((sprite[j].z - sz - dal) * vel) / ldist(&sprite[ps[p].i], &sprite[j]);
|
||||||
|
sa = getangle(sprite[j].x - sx, sprite[j].y - sy);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sx += sintable[(s->ang + 512 + 160) & 2047] >> 7;
|
||||||
|
sy += sintable[(s->ang + 160) & 2047] >> 7;
|
||||||
|
zvel = (100 - ps[p].gethorizdiff()) * 98;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = findplayer(s, &x);
|
||||||
|
// sa = getangle(ps[j].oposx-sx,ps[j].oposy-sy);
|
||||||
|
if (s->picnum == HULK)
|
||||||
|
sa -= (krand() & 31);
|
||||||
|
else if (s->picnum == VIXEN)
|
||||||
|
sa -= (krand() & 16);
|
||||||
|
else if (s->picnum != UFOBEAM)
|
||||||
|
sa += 16 - (krand() & 31);
|
||||||
|
|
||||||
|
zvel = (((ps[j].oposz - sz + (3 << 8))) * vel) / ldist(&sprite[ps[j].i], s);
|
||||||
|
}
|
||||||
|
|
||||||
|
oldzvel = zvel;
|
||||||
|
|
||||||
|
if (atwith == SPIT)
|
||||||
|
{
|
||||||
|
sizx = 18; sizy = 18;
|
||||||
|
if (!isRRRA() || s->picnum != MAMA) sz -= (10 << 8); else sz -= (20 << 8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (atwith == COOLEXPLOSION1)
|
||||||
|
{
|
||||||
|
sizx = 8;
|
||||||
|
sizy = 8;
|
||||||
|
}
|
||||||
|
else if (atwith == FIRELASER)
|
||||||
|
{
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
sizx = 34;
|
||||||
|
sizy = 34;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sizx = 18;
|
||||||
|
sizy = 18;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sizx = 18;
|
||||||
|
sizy = 18;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p >= 0) sizx = 7, sizy = 7;
|
||||||
|
|
||||||
|
while (scount > 0)
|
||||||
|
{
|
||||||
|
j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, i, 4);
|
||||||
|
sprite[j].extra += (krand() & 7);
|
||||||
|
sprite[j].cstat = 128;
|
||||||
|
sprite[j].clipdist = 4;
|
||||||
|
|
||||||
|
sa = s->ang + 32 - (krand() & 63);
|
||||||
|
zvel = oldzvel + 512 - (krand() & 1023);
|
||||||
|
|
||||||
|
if (atwith == FIRELASER)
|
||||||
|
{
|
||||||
|
sprite[j].xrepeat = 8;
|
||||||
|
sprite[j].yrepeat = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
scount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
case RPG2:
|
||||||
|
case RRTILE1790:
|
||||||
|
if (isRRRA()) goto rrra_rpg2;
|
||||||
|
else break;
|
||||||
|
|
||||||
|
case FREEZEBLAST:
|
||||||
|
sz += (3 << 8);
|
||||||
|
case RPG:
|
||||||
|
case SHRINKSPARK:
|
||||||
|
rrra_rpg2:
|
||||||
|
{
|
||||||
|
short var90 = 0;
|
||||||
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
scount = 1;
|
||||||
|
vel = 644;
|
||||||
|
|
||||||
|
j = -1;
|
||||||
|
|
||||||
|
if (p >= 0)
|
||||||
|
{
|
||||||
|
j = aim(s, 48);
|
||||||
|
if (j >= 0)
|
||||||
|
{
|
||||||
|
if (isRRRA() && atwith == RPG2)
|
||||||
|
{
|
||||||
|
if (sprite[j].picnum == HEN || sprite[j].picnum == HENSTAYPUT)
|
||||||
|
var90 = ps[screenpeek].i;
|
||||||
|
else
|
||||||
|
var90 = j;
|
||||||
|
}
|
||||||
|
dal = ((sprite[j].xrepeat * tilesiz[sprite[j].picnum].y) << 1) + (8 << 8);
|
||||||
|
zvel = ((sprite[j].z - sz - dal) * vel) / ldist(&sprite[ps[p].i], &sprite[j]);
|
||||||
|
if (sprite[j].picnum != RECON)
|
||||||
|
sa = getangle(sprite[j].x - sx, sprite[j].y - sy);
|
||||||
|
}
|
||||||
|
else zvel = (100 - ps[p].gethorizdiff()) * 81;
|
||||||
|
if (atwith == RPG)
|
||||||
|
spritesound(RPG_SHOOT, i);
|
||||||
|
else if (isRRRA())
|
||||||
|
{
|
||||||
|
if (atwith == RPG2)
|
||||||
|
spritesound(244, i);
|
||||||
|
else if (atwith == RRTILE1790)
|
||||||
|
spritesound(94, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j = findplayer(s, &x);
|
||||||
|
sa = getangle(ps[j].oposx - sx, ps[j].oposy - sy);
|
||||||
|
if (s->picnum == BOSS3)
|
||||||
|
sz -= (32 << 8);
|
||||||
|
else if (s->picnum == BOSS2)
|
||||||
|
{
|
||||||
|
vel += 128;
|
||||||
|
sz += 24 << 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
l = ldist(&sprite[ps[j].i], s);
|
||||||
|
zvel = ((ps[j].oposz - sz) * vel) / l;
|
||||||
|
|
||||||
|
if (badguy(s) && (s->hitag & face_player_smart))
|
||||||
|
sa = s->ang + (krand() & 31) - 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p >= 0 && j >= 0)
|
||||||
|
l = j;
|
||||||
|
else l = -1;
|
||||||
|
|
||||||
|
if (isRRRA() && atwith == RRTILE1790)
|
||||||
|
{
|
||||||
|
zvel = -(10 << 8);
|
||||||
|
vel <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = EGS(sect,
|
||||||
|
sx + (sintable[(348 + sa + 512) & 2047] / 448),
|
||||||
|
sy + (sintable[(sa + 348) & 2047] / 448),
|
||||||
|
sz - (1 << 8), atwith, 0, 14, 14, sa, vel, zvel, i, 4);
|
||||||
|
|
||||||
|
if (isRRRA())
|
||||||
|
{
|
||||||
|
if (atwith == RRTILE1790)
|
||||||
|
{
|
||||||
|
sprite[j].extra = 10;
|
||||||
|
sprite[j].zvel = -(10 << 8);
|
||||||
|
}
|
||||||
|
else if (atwith == RPG2)
|
||||||
|
{
|
||||||
|
sprite[j].lotag = var90;
|
||||||
|
sprite[j].hitag = 0;
|
||||||
|
fi.lotsofmoney(&sprite[j], (krand() & 3) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite[j].extra += (krand() & 7);
|
||||||
|
if (atwith != FREEZEBLAST)
|
||||||
|
sprite[j].yvel = l;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite[j].yvel = numfreezebounces;
|
||||||
|
sprite[j].xrepeat >>= 1;
|
||||||
|
sprite[j].yrepeat >>= 1;
|
||||||
|
sprite[j].zvel -= (2 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p == -1)
|
||||||
|
{
|
||||||
|
if (s->picnum == HULK)
|
||||||
|
{
|
||||||
|
sprite[j].xrepeat = 8;
|
||||||
|
sprite[j].yrepeat = 8;
|
||||||
|
}
|
||||||
|
else if (atwith != FREEZEBLAST)
|
||||||
|
{
|
||||||
|
sprite[j].xrepeat = 30;
|
||||||
|
sprite[j].yrepeat = 30;
|
||||||
|
sprite[j].extra >>= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ps[p].curr_weapon == DEVISTATOR_WEAPON)
|
||||||
|
{
|
||||||
|
sprite[j].extra >>= 2;
|
||||||
|
sprite[j].ang += 16 - (krand() & 31);
|
||||||
|
sprite[j].zvel += 256 - (krand() & 511);
|
||||||
|
|
||||||
|
if (ps[p].hbomb_hold_delay)
|
||||||
|
{
|
||||||
|
sprite[j].x -= sintable[sa & 2047] / 644;
|
||||||
|
sprite[j].y -= sintable[(sa + 1024 + 512) & 2047] / 644;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite[j].x += sintable[sa & 2047] >> 8;
|
||||||
|
sprite[j].y += sintable[(sa + 1024 + 512) & 2047] >> 8;
|
||||||
|
}
|
||||||
|
sprite[j].xrepeat >>= 1;
|
||||||
|
sprite[j].yrepeat >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite[j].cstat = 128;
|
||||||
|
if (atwith == RPG || (atwith == RPG2 && isRRRA()))
|
||||||
|
sprite[j].clipdist = 4;
|
||||||
|
else
|
||||||
|
sprite[j].clipdist = 40;
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHEERBOMB:
|
||||||
|
if (!isRRRA()) break;
|
||||||
|
case MORTER:
|
||||||
|
|
||||||
|
if (s->extra >= 0) s->shade = -96;
|
||||||
|
|
||||||
|
j = ps[findplayer(s, &x)].i;
|
||||||
|
x = ldist(&sprite[j], s);
|
||||||
|
|
||||||
|
zvel = -x >> 1;
|
||||||
|
|
||||||
|
if (zvel < -4096)
|
||||||
|
zvel = -2048;
|
||||||
|
vel = x >> 4;
|
||||||
|
|
||||||
|
if (atwith == CHEERBOMB)
|
||||||
|
EGS(sect,
|
||||||
|
sx + (sintable[(512 + sa + 512) & 2047] >> 8),
|
||||||
|
sy + (sintable[(sa + 512) & 2047] >> 8),
|
||||||
|
sz + (6 << 8), atwith, -64, 16, 16, sa, vel, zvel, i, 1);
|
||||||
|
else
|
||||||
|
EGS(sect,
|
||||||
|
sx + (sintable[(512 + sa + 512) & 2047] >> 8),
|
||||||
|
sy + (sintable[(sa + 512) & 2047] >> 8),
|
||||||
|
sz + (6 << 8), atwith, -64, 32, 32, sa, vel, zvel, i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
|
@ -1215,7 +1215,7 @@ void checkhitsprite_d(int i, int sn)
|
||||||
case FETUSBROKE:
|
case FETUSBROKE:
|
||||||
for (j = 0; j < 48; j++)
|
for (j = 0; j < 48; j++)
|
||||||
{
|
{
|
||||||
shoot(i, BLOODSPLAT1);
|
fi.shoot(i, BLOODSPLAT1);
|
||||||
sprite[i].ang += 333;
|
sprite[i].ang += 333;
|
||||||
}
|
}
|
||||||
spritesound(GLASS_HEAVYBREAK, i);
|
spritesound(GLASS_HEAVYBREAK, i);
|
||||||
|
@ -1329,21 +1329,21 @@ void checkhitsprite_d(int i, int sn)
|
||||||
sprite[i].extra -= sprite[sn].extra;
|
sprite[i].extra -= sprite[sn].extra;
|
||||||
if (sprite[i].extra > 0) break;
|
if (sprite[i].extra > 0) break;
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT1);
|
fi.shoot(i, BLOODSPLAT1);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT2);
|
fi.shoot(i, BLOODSPLAT2);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT3);
|
fi.shoot(i, BLOODSPLAT3);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT4);
|
fi.shoot(i, BLOODSPLAT4);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT1);
|
fi.shoot(i, BLOODSPLAT1);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT2);
|
fi.shoot(i, BLOODSPLAT2);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT3);
|
fi.shoot(i, BLOODSPLAT3);
|
||||||
sprite[i].ang = krand() & 2047;
|
sprite[i].ang = krand() & 2047;
|
||||||
shoot(i, BLOODSPLAT4);
|
fi.shoot(i, BLOODSPLAT4);
|
||||||
fi.guts(&sprite[i], JIBS1, 1, myconnectindex);
|
fi.guts(&sprite[i], JIBS1, 1, myconnectindex);
|
||||||
fi.guts(&sprite[i], JIBS2, 2, myconnectindex);
|
fi.guts(&sprite[i], JIBS2, 2, myconnectindex);
|
||||||
fi.guts(&sprite[i], JIBS3, 3, myconnectindex);
|
fi.guts(&sprite[i], JIBS3, 3, myconnectindex);
|
||||||
|
@ -1403,10 +1403,10 @@ void checkhitsprite_d(int i, int sn)
|
||||||
if (j >= 0 && sprite[j].picnum == APLAYER && sprite[i].picnum != ROTATEGUN && sprite[i].picnum != DRONE)
|
if (j >= 0 && sprite[j].picnum == APLAYER && sprite[i].picnum != ROTATEGUN && sprite[i].picnum != DRONE)
|
||||||
if (ps[sprite[j].yvel].curr_weapon == SHOTGUN_WEAPON)
|
if (ps[sprite[j].yvel].curr_weapon == SHOTGUN_WEAPON)
|
||||||
{
|
{
|
||||||
shoot(i, BLOODSPLAT3);
|
fi.shoot(i, BLOODSPLAT3);
|
||||||
shoot(i, BLOODSPLAT1);
|
fi.shoot(i, BLOODSPLAT1);
|
||||||
shoot(i, BLOODSPLAT2);
|
fi.shoot(i, BLOODSPLAT2);
|
||||||
shoot(i, BLOODSPLAT4);
|
fi.shoot(i, BLOODSPLAT4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite[i].picnum != TANK && sprite[i].picnum != BOSS1 && sprite[i].picnum != BOSS4 && sprite[i].picnum != BOSS2 && sprite[i].picnum != BOSS3 && sprite[i].picnum != RECON && sprite[i].picnum != ROTATEGUN)
|
if (sprite[i].picnum != TANK && sprite[i].picnum != BOSS1 && sprite[i].picnum != BOSS4 && sprite[i].picnum != BOSS2 && sprite[i].picnum != BOSS3 && sprite[i].picnum != RECON && sprite[i].picnum != ROTATEGUN)
|
||||||
|
|
|
@ -2384,10 +2384,10 @@ void checkhitsprite_r(int i, int sn)
|
||||||
if (j >= 0 && sprite[j].picnum == APLAYER && sprite[i].picnum != DRONE)
|
if (j >= 0 && sprite[j].picnum == APLAYER && sprite[i].picnum != DRONE)
|
||||||
if (ps[sprite[j].yvel].curr_weapon == SHOTGUN_WEAPON)
|
if (ps[sprite[j].yvel].curr_weapon == SHOTGUN_WEAPON)
|
||||||
{
|
{
|
||||||
shoot(i, BLOODSPLAT3);
|
fi.shoot(i, BLOODSPLAT3);
|
||||||
shoot(i, BLOODSPLAT1);
|
fi.shoot(i, BLOODSPLAT1);
|
||||||
shoot(i, BLOODSPLAT2);
|
fi.shoot(i, BLOODSPLAT2);
|
||||||
shoot(i, BLOODSPLAT4);
|
fi.shoot(i, BLOODSPLAT4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite[i].statnum == 2)
|
if (sprite[i].statnum == 2)
|
||||||
|
|
|
@ -503,10 +503,10 @@ int32_t Anim_Play(const char *fn)
|
||||||
goto end_anim_restore_gl;
|
goto end_anim_restore_gl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_restorePalette == 1)
|
if (restorepalette == 1)
|
||||||
{
|
{
|
||||||
P_SetGamePalette(g_player[myconnectindex].ps, ANIMPAL, 0);
|
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0);
|
||||||
g_restorePalette = 0;
|
restorepalette = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
frametime = (int32_t)totalclock;
|
frametime = (int32_t)totalclock;
|
||||||
|
|
|
@ -767,7 +767,7 @@ void G_DoCheats(void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CHEAT_RAMRBILL:
|
case CHEAT_RAMRBILL:
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
P_DoQuote(127, pPlayer);
|
P_DoQuote(127, pPlayer);
|
||||||
end_cheat(pPlayer);
|
end_cheat(pPlayer);
|
||||||
inputState.keyFlushChars();
|
inputState.keyFlushChars();
|
||||||
|
@ -796,7 +796,7 @@ void G_DoCheats(void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CHEAT_RAAARON:
|
case CHEAT_RAAARON:
|
||||||
pPlayer->drug_mode = pPlayer->drug_mode ? 0 : 5;
|
pPlayer->DrugMode = pPlayer->DrugMode ? 0 : 5;
|
||||||
pPlayer->drug_timer = (int32_t) totalclock;
|
pPlayer->drug_timer = (int32_t) totalclock;
|
||||||
end_cheat(pPlayer);
|
end_cheat(pPlayer);
|
||||||
inputState.keyFlushChars();
|
inputState.keyFlushChars();
|
||||||
|
|
|
@ -882,7 +882,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
|
||||||
|
|
||||||
viewingRange = Blrintf(float(vr) * tanf(r_fov * (PI/360.f)));
|
viewingRange = Blrintf(float(vr) * tanf(r_fov * (PI/360.f)));
|
||||||
|
|
||||||
if (!RRRA || !pPlayer->drug_mode)
|
if (!RRRA || !pPlayer->DrugMode)
|
||||||
{
|
{
|
||||||
if (!r_usenewaspect)
|
if (!r_usenewaspect)
|
||||||
renderSetAspect(viewingRange, yxaspect);
|
renderSetAspect(viewingRange, yxaspect);
|
||||||
|
@ -906,7 +906,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
|
||||||
pPlayer->orotscrnang = pPlayer->rotscrnang;
|
pPlayer->orotscrnang = pPlayer->rotscrnang;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RRRA && pPlayer->drug_mode > 0)
|
if (RRRA && pPlayer->DrugMode > 0)
|
||||||
{
|
{
|
||||||
while (pPlayer->drug_timer < totalclock && !(pPlayer->gm & MODE_MENU) && !ud.pause_on && !System_WantGuiCapture())
|
while (pPlayer->drug_timer < totalclock && !(pPlayer->gm & MODE_MENU) && !ud.pause_on && !System_WantGuiCapture())
|
||||||
{
|
{
|
||||||
|
@ -932,7 +932,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
|
||||||
aspect = viewingRange + pPlayer->drug_stat[1] * 5000;
|
aspect = viewingRange + pPlayer->drug_stat[1] * 5000;
|
||||||
if (aspect < viewingRange)
|
if (aspect < viewingRange)
|
||||||
{
|
{
|
||||||
pPlayer->drug_mode = 0;
|
pPlayer->DrugMode = 0;
|
||||||
pPlayer->drug_stat[0] = 0;
|
pPlayer->drug_stat[0] = 0;
|
||||||
pPlayer->drug_stat[2] = 0;
|
pPlayer->drug_stat[2] = 0;
|
||||||
pPlayer->drug_stat[1] = 0;
|
pPlayer->drug_stat[1] = 0;
|
||||||
|
@ -963,8 +963,8 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
|
||||||
if (pPlayer->drug_stat[2] < 1)
|
if (pPlayer->drug_stat[2] < 1)
|
||||||
{
|
{
|
||||||
pPlayer->drug_stat[0] = 2;
|
pPlayer->drug_stat[0] = 2;
|
||||||
pPlayer->drug_mode--;
|
pPlayer->DrugMode--;
|
||||||
if (pPlayer->drug_mode == 1)
|
if (pPlayer->DrugMode == 1)
|
||||||
pPlayer->drug_stat[0] = 3;
|
pPlayer->drug_stat[0] = 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2483,7 +2483,7 @@ rrcoolexplosion1:
|
||||||
if (t->picnum == TILE_EXPLOSION2)
|
if (t->picnum == TILE_EXPLOSION2)
|
||||||
{
|
{
|
||||||
g_player[screenpeek].ps->visibility = -127;
|
g_player[screenpeek].ps->visibility = -127;
|
||||||
//g_restorePalette = 1; // JBF 20040101: why?
|
//restorepalette = 1; // JBF 20040101: why?
|
||||||
if (RR)
|
if (RR)
|
||||||
t->pal = 0;
|
t->pal = 0;
|
||||||
}
|
}
|
||||||
|
@ -2853,7 +2853,7 @@ void G_HandleLocalKeys(void)
|
||||||
buttonMap.ClearButton(gamefunc_See_Coop_View);
|
buttonMap.ClearButton(gamefunc_See_Coop_View);
|
||||||
screenpeek = connectpoint2[screenpeek];
|
screenpeek = connectpoint2[screenpeek];
|
||||||
if (screenpeek == -1) screenpeek = 0;
|
if (screenpeek == -1) screenpeek = 0;
|
||||||
g_restorePalette = -1;
|
restorepalette = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((g_netServer || ud.multimode > 1) && buttonMap.ButtonDown(gamefunc_Show_Opponents_Weapon))
|
if ((g_netServer || ud.multimode > 1) && buttonMap.ButtonDown(gamefunc_Show_Opponents_Weapon))
|
||||||
|
@ -3066,7 +3066,7 @@ void G_HandleLocalKeys(void)
|
||||||
ud.fola = g_player[screenpeek].ps->oang;
|
ud.fola = g_player[screenpeek].ps->oang;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
g_restorePalette = 1;
|
restorepalette = 1;
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4015,7 +4015,7 @@ int GameInterface::app_main()
|
||||||
videoInit();
|
videoInit();
|
||||||
InitFonts();
|
InitFonts();
|
||||||
V_LoadTranslations();
|
V_LoadTranslations();
|
||||||
videoSetPalette(0, g_player[myconnectindex].ps->palette, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
|
|
||||||
// check if the minifont will support lowercase letters (3136-3161)
|
// check if the minifont will support lowercase letters (3136-3161)
|
||||||
// there is room for them in tiles012.art between "[\]^_." and "{|}~"
|
// there is room for them in tiles012.art between "[\]^_." and "{|}~"
|
||||||
|
@ -4384,7 +4384,7 @@ int G_DoMoveThings(void)
|
||||||
if (g_gametypeFlags[ud.coop] & GAMETYPE_TDM)
|
if (g_gametypeFlags[ud.coop] & GAMETYPE_TDM)
|
||||||
{
|
{
|
||||||
actor[g_player[i].ps->i].picnum = TILE_APLAYERTOP;
|
actor[g_player[i].ps->i].picnum = TILE_APLAYERTOP;
|
||||||
P_QuickKill(g_player[i].ps);
|
quickkill(g_player[i].ps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (g_gametypeFlags[ud.coop] & GAMETYPE_TDM)
|
if (g_gametypeFlags[ud.coop] & GAMETYPE_TDM)
|
||||||
|
|
|
@ -60,7 +60,7 @@ void P_UpdateScreenPal(DukePlayer_t * const pPlayer)
|
||||||
int inWater = 0;
|
int inWater = 0;
|
||||||
int const playerSectnum = pPlayer->cursectnum;
|
int const playerSectnum = pPlayer->cursectnum;
|
||||||
|
|
||||||
if (pPlayer->drug_mode)
|
if (pPlayer->DrugMode)
|
||||||
pPlayer->palette = DRUGPAL;
|
pPlayer->palette = DRUGPAL;
|
||||||
else if (pPlayer->heat_on)
|
else if (pPlayer->heat_on)
|
||||||
pPlayer->palette = SLIMEPAL;
|
pPlayer->palette = SLIMEPAL;
|
||||||
|
@ -77,7 +77,7 @@ void P_UpdateScreenPal(DukePlayer_t * const pPlayer)
|
||||||
inWater = 1;
|
inWater = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_restorePalette = 1+inWater;
|
restorepalette = 1+inWater;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void P_IncurDamage(DukePlayer_t * const pPlayer)
|
static void P_IncurDamage(DukePlayer_t * const pPlayer)
|
||||||
|
@ -130,17 +130,6 @@ static void P_IncurDamage(DukePlayer_t * const pPlayer)
|
||||||
sprite[pPlayer->i].extra = pPlayer->last_extra + playerDamage;
|
sprite[pPlayer->i].extra = pPlayer->last_extra + playerDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void P_QuickKill(DukePlayer_t * const pPlayer)
|
|
||||||
{
|
|
||||||
P_PalFrom(pPlayer, 48, 48,48,48);
|
|
||||||
|
|
||||||
sprite[pPlayer->i].extra = 0;
|
|
||||||
sprite[pPlayer->i].cstat |= 32768;
|
|
||||||
|
|
||||||
if (ud.god == 0)
|
|
||||||
A_DoGuts(pPlayer->i,TILE_JIBS6,8);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Proj_DoWaterTracers(vec3_t startPos, vec3_t const *endPos, int n, int16_t sectNum)
|
static void Proj_DoWaterTracers(vec3_t startPos, vec3_t const *endPos, int n, int16_t sectNum)
|
||||||
{
|
{
|
||||||
if ((klabs(startPos.x - endPos->x) + klabs(startPos.y - endPos->y)) < 3084)
|
if ((klabs(startPos.x - endPos->x) + klabs(startPos.y - endPos->y)) < 3084)
|
||||||
|
@ -165,19 +154,6 @@ static void Proj_DoWaterTracers(vec3_t startPos, vec3_t const *endPos, int n, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t A_GetHitscanRange(int spriteNum)
|
|
||||||
{
|
|
||||||
int const zOffset = (PN(spriteNum) == TILE_APLAYER) ? (40<<8) : 0;
|
|
||||||
hitdata_t hitData;
|
|
||||||
|
|
||||||
SZ(spriteNum) -= zOffset;
|
|
||||||
hitscan((const vec3_t *)&sprite[spriteNum], SECT(spriteNum), sintable[(SA(spriteNum) + 512) & 2047],
|
|
||||||
sintable[SA(spriteNum) & 2047], 0, &hitData, CLIPMASK1);
|
|
||||||
SZ(spriteNum) += zOffset;
|
|
||||||
|
|
||||||
return (FindDistance2D(hitData.pos.x - SX(spriteNum), hitData.pos.y - SY(spriteNum)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int A_FindTargetSprite(const spritetype *pSprite, int projAng, int projecTile)
|
static int A_FindTargetSprite(const spritetype *pSprite, int projAng, int projecTile)
|
||||||
{
|
{
|
||||||
static int const aimstats[] = {
|
static int const aimstats[] = {
|
||||||
|
@ -1667,11 +1643,11 @@ static void P_FireWeapon(int playerNum)
|
||||||
|
|
||||||
P_SetWeaponGamevars(playerNum, pPlayer);
|
P_SetWeaponGamevars(playerNum, pPlayer);
|
||||||
// Printf("doing %d %d %d\n",PWEAPON(snum, p->curr_weapon, Shoots),p->curr_weapon,snum);
|
// Printf("doing %d %d %d\n",PWEAPON(snum, p->curr_weapon, Shoots),p->curr_weapon,snum);
|
||||||
A_Shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
fi.shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
||||||
|
|
||||||
for (bssize_t burstFire = PWEAPON(playerNum, pPlayer->curr_weapon, ShotsPerBurst) - 1; burstFire > 0; --burstFire)
|
for (bssize_t burstFire = PWEAPON(playerNum, pPlayer->curr_weapon, ShotsPerBurst) - 1; burstFire > 0; --burstFire)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
fi.shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
||||||
|
|
||||||
if (PWEAPON(playerNum, pPlayer->curr_weapon, Flags) & WEAPON_AMMOPERSHOT)
|
if (PWEAPON(playerNum, pPlayer->curr_weapon, Flags) & WEAPON_AMMOPERSHOT)
|
||||||
{
|
{
|
||||||
|
@ -4425,7 +4401,7 @@ static int32_t P_DoCounters(int playerNum)
|
||||||
pPlayer->last_quick_kick = pPlayer->quick_kick + 1;
|
pPlayer->last_quick_kick = pPlayer->quick_kick + 1;
|
||||||
|
|
||||||
if (--pPlayer->quick_kick == 8)
|
if (--pPlayer->quick_kick == 8)
|
||||||
A_Shoot(pPlayer->i, TILE_KNEE);
|
fi.shoot(pPlayer->i, TILE_KNEE);
|
||||||
}
|
}
|
||||||
else if (pPlayer->last_quick_kick > 0)
|
else if (pPlayer->last_quick_kick > 0)
|
||||||
--pPlayer->last_quick_kick;
|
--pPlayer->last_quick_kick;
|
||||||
|
@ -4961,7 +4937,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
else if (pPlayer->hbomb_time <= 0 && (*weaponFrame) < 5)
|
else if (pPlayer->hbomb_time <= 0 && (*weaponFrame) < 5)
|
||||||
{
|
{
|
||||||
S_PlaySound(PIPEBOMB_EXPLODE);
|
S_PlaySound(PIPEBOMB_EXPLODE);
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5323,7 +5299,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
sprite[pipeSpriteNum].z += ZOFFSET3;
|
sprite[pipeSpriteNum].z += ZOFFSET3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (A_GetHitscanRange(pPlayer->i) < 512)
|
if (hits(pPlayer->i) < 512)
|
||||||
{
|
{
|
||||||
sprite[pipeSpriteNum].ang += 1024;
|
sprite[pipeSpriteNum].ang += 1024;
|
||||||
sprite[pipeSpriteNum].zvel /= 3;
|
sprite[pipeSpriteNum].zvel /= 3;
|
||||||
|
@ -5356,7 +5332,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
case PISTOL_WEAPON__STATIC:
|
case PISTOL_WEAPON__STATIC:
|
||||||
if ((*weaponFrame) == 1)
|
if ((*weaponFrame) == 1)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTSPARK1);
|
fi.shoot(pPlayer->i, TILE_SHOTSPARK1);
|
||||||
A_PlaySound(PISTOL_FIRE, pPlayer->i);
|
A_PlaySound(PISTOL_FIRE, pPlayer->i);
|
||||||
pPlayer->noise_radius = 8192;
|
pPlayer->noise_radius = 8192;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
|
@ -5413,16 +5389,16 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
pPlayer->shotgun_state[1] = 1;
|
pPlayer->shotgun_state[1] = 1;
|
||||||
if ((*weaponFrame) == 4)
|
if ((*weaponFrame) == 4)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
|
|
||||||
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
||||||
|
|
||||||
|
@ -5440,16 +5416,16 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
{
|
{
|
||||||
if (pPlayer->shotgun_state[1])
|
if (pPlayer->shotgun_state[1])
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
|
|
||||||
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
||||||
|
|
||||||
|
@ -5536,7 +5512,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
||||||
A_Shoot(pPlayer->i, TILE_CHAINGUN);
|
fi.shoot(pPlayer->i, TILE_CHAINGUN);
|
||||||
pPlayer->noise_radius = 8192;
|
pPlayer->noise_radius = 8192;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
|
@ -5579,7 +5555,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
pus = 1;
|
pus = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
A_Shoot(pPlayer->i, TILE_GROWSPARK);
|
fi.shoot(pPlayer->i, TILE_GROWSPARK);
|
||||||
|
|
||||||
pPlayer->noise_radius = 1024;
|
pPlayer->noise_radius = 1024;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
|
@ -5596,7 +5572,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
{
|
{
|
||||||
pPlayer->ammo_amount[SHRINKER_WEAPON]--;
|
pPlayer->ammo_amount[SHRINKER_WEAPON]--;
|
||||||
|
|
||||||
A_Shoot(pPlayer->i, TILE_SHRINKSPARK);
|
fi.shoot(pPlayer->i, TILE_SHRINKSPARK);
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
}
|
}
|
||||||
if (++(*weaponFrame) > 20)
|
if (++(*weaponFrame) > 20)
|
||||||
|
@ -5611,7 +5587,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
flashColor = 255 + (95 << 8);
|
flashColor = 255 + (95 << 8);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTSPARK1);
|
fi.shoot(pPlayer->i, TILE_SHOTSPARK1);
|
||||||
pPlayer->noise_radius = 16384;
|
pPlayer->noise_radius = 16384;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
pPlayer->ammo_amount[DEVISTATOR_WEAPON]--;
|
pPlayer->ammo_amount[DEVISTATOR_WEAPON]--;
|
||||||
|
@ -5640,7 +5616,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
flashColor = 255 + (95 << 8);
|
flashColor = 255 + (95 << 8);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
||||||
A_Shoot(pPlayer->i, TILE_CHAINGUN);
|
fi.shoot(pPlayer->i, TILE_CHAINGUN);
|
||||||
pPlayer->noise_radius = 16384;
|
pPlayer->noise_radius = 16384;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
pPlayer->ammo_amount[MOTORCYCLE_WEAPON]--;
|
pPlayer->ammo_amount[MOTORCYCLE_WEAPON]--;
|
||||||
|
@ -5669,7 +5645,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
{
|
{
|
||||||
pPlayer->MotoSpeed -= 20;
|
pPlayer->MotoSpeed -= 20;
|
||||||
pPlayer->ammo_amount[BOAT_WEAPON]--;
|
pPlayer->ammo_amount[BOAT_WEAPON]--;
|
||||||
A_Shoot(pPlayer->i, TILE_RRTILE1790);
|
fi.shoot(pPlayer->i, TILE_RRTILE1790);
|
||||||
}
|
}
|
||||||
(*weaponFrame)++;
|
(*weaponFrame)++;
|
||||||
if ((*weaponFrame) > 20)
|
if ((*weaponFrame) > 20)
|
||||||
|
@ -5686,7 +5662,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
case FREEZE_WEAPON__STATIC:
|
case FREEZE_WEAPON__STATIC:
|
||||||
(*weaponFrame)++;
|
(*weaponFrame)++;
|
||||||
if ((*weaponFrame) >= 7 && (*weaponFrame) <= 11)
|
if ((*weaponFrame) >= 7 && (*weaponFrame) <= 11)
|
||||||
A_Shoot(pPlayer->i, TILE_FIRELASER);
|
fi.shoot(pPlayer->i, TILE_FIRELASER);
|
||||||
|
|
||||||
if ((*weaponFrame) == 5)
|
if ((*weaponFrame) == 5)
|
||||||
{
|
{
|
||||||
|
@ -5753,7 +5729,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
{
|
{
|
||||||
pPlayer->ammo_amount[BOWLING_WEAPON]--;
|
pPlayer->ammo_amount[BOWLING_WEAPON]--;
|
||||||
A_PlaySound(354, pPlayer->i);
|
A_PlaySound(354, pPlayer->i);
|
||||||
A_Shoot(pPlayer->i, TILE_BOWLINGBALL);
|
fi.shoot(pPlayer->i, TILE_BOWLINGBALL);
|
||||||
pPlayer->noise_radius = 1024;
|
pPlayer->noise_radius = 1024;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
}
|
}
|
||||||
|
@ -5774,7 +5750,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
|
|
||||||
if ((*weaponFrame) == 12)
|
if ((*weaponFrame) == 12)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_KNEE);
|
fi.shoot(pPlayer->i, TILE_KNEE);
|
||||||
pPlayer->noise_radius = 1024;
|
pPlayer->noise_radius = 1024;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
}
|
}
|
||||||
|
@ -5792,7 +5768,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
|
|
||||||
if ((*weaponFrame) == 8)
|
if ((*weaponFrame) == 8)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SLINGBLADE);
|
fi.shoot(pPlayer->i, TILE_SLINGBLADE);
|
||||||
pPlayer->noise_radius = 1024;
|
pPlayer->noise_radius = 1024;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
}
|
}
|
||||||
|
@ -5812,7 +5788,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 255+(95<<8);
|
flashColor = 255+(95<<8);
|
||||||
A_Shoot(pPlayer->i, TILE_RPG);
|
fi.shoot(pPlayer->i, TILE_RPG);
|
||||||
pPlayer->noise_radius = 32768;
|
pPlayer->noise_radius = 32768;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
|
@ -5831,7 +5807,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 255+(95<<8);
|
flashColor = 255+(95<<8);
|
||||||
A_Shoot(pPlayer->i, TILE_RPG2);
|
fi.shoot(pPlayer->i, TILE_RPG2);
|
||||||
pPlayer->noise_radius = 32768;
|
pPlayer->noise_radius = 32768;
|
||||||
P_MadeNoise(playerNum);
|
P_MadeNoise(playerNum);
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
|
@ -5890,7 +5866,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
sprite[pipeSpriteNum].z += ZOFFSET3;
|
sprite[pipeSpriteNum].z += ZOFFSET3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (A_GetHitscanRange(pPlayer->i) < 512)
|
if (hits(pPlayer->i) < 512)
|
||||||
{
|
{
|
||||||
sprite[pipeSpriteNum].ang += 1024;
|
sprite[pipeSpriteNum].ang += 1024;
|
||||||
sprite[pipeSpriteNum].zvel /= 3;
|
sprite[pipeSpriteNum].zvel /= 3;
|
||||||
|
@ -5923,7 +5899,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
P_SetWeaponGamevars(playerNum, pPlayer);
|
P_SetWeaponGamevars(playerNum, pPlayer);
|
||||||
A_Shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
fi.shoot(pPlayer->i, PWEAPON(playerNum, pPlayer->curr_weapon, Shoots));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6069,7 +6045,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
sprite[pipeSpriteNum].z += ZOFFSET3;
|
sprite[pipeSpriteNum].z += ZOFFSET3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (A_GetHitscanRange(pPlayer->i) < 512)
|
if (hits(pPlayer->i) < 512)
|
||||||
{
|
{
|
||||||
sprite[pipeSpriteNum].ang += 1024;
|
sprite[pipeSpriteNum].ang += 1024;
|
||||||
sprite[pipeSpriteNum].zvel /= 3;
|
sprite[pipeSpriteNum].zvel /= 3;
|
||||||
|
@ -6123,7 +6099,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
case PISTOL_WEAPON__STATIC:
|
case PISTOL_WEAPON__STATIC:
|
||||||
if ((*weaponFrame) == 1)
|
if ((*weaponFrame) == 1)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTSPARK1);
|
fi.shoot(pPlayer->i, TILE_SHOTSPARK1);
|
||||||
A_PlaySound(PISTOL_FIRE, pPlayer->i);
|
A_PlaySound(PISTOL_FIRE, pPlayer->i);
|
||||||
lastvisinc = (int32_t) totalclock+32;
|
lastvisinc = (int32_t) totalclock+32;
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
|
@ -6165,13 +6141,13 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
case SHOTGUN_WEAPON__STATIC:
|
case SHOTGUN_WEAPON__STATIC:
|
||||||
if (++(*weaponFrame) == 4)
|
if (++(*weaponFrame) == 4)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
A_Shoot(pPlayer->i, TILE_SHOTGUN);
|
fi.shoot(pPlayer->i, TILE_SHOTGUN);
|
||||||
|
|
||||||
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
pPlayer->ammo_amount[SHOTGUN_WEAPON]--;
|
||||||
|
|
||||||
|
@ -6226,7 +6202,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
A_PlaySound(CHAINGUN_FIRE, pPlayer->i);
|
||||||
A_Shoot(pPlayer->i, TILE_CHAINGUN);
|
fi.shoot(pPlayer->i, TILE_CHAINGUN);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 255+(95<<8);
|
flashColor = 255+(95<<8);
|
||||||
|
@ -6271,7 +6247,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
|
|
||||||
pPlayer->ammo_amount[GROW_WEAPON]--;
|
pPlayer->ammo_amount[GROW_WEAPON]--;
|
||||||
|
|
||||||
A_Shoot(pPlayer->i, TILE_GROWSPARK);
|
fi.shoot(pPlayer->i, TILE_GROWSPARK);
|
||||||
|
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 216+(52<<8)+(20<<16);
|
flashColor = 216+(52<<8)+(20<<16);
|
||||||
|
@ -6308,7 +6284,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
|
|
||||||
pPlayer->ammo_amount[SHRINKER_WEAPON]--;
|
pPlayer->ammo_amount[SHRINKER_WEAPON]--;
|
||||||
|
|
||||||
A_Shoot(pPlayer->i, TILE_SHRINKER);
|
fi.shoot(pPlayer->i, TILE_SHRINKER);
|
||||||
|
|
||||||
if (!NAM)
|
if (!NAM)
|
||||||
{
|
{
|
||||||
|
@ -6340,7 +6316,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 255+(95<<8);
|
flashColor = 255+(95<<8);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
A_Shoot(pPlayer->i, TILE_RPG);
|
fi.shoot(pPlayer->i, TILE_RPG);
|
||||||
pPlayer->ammo_amount[DEVISTATOR_WEAPON]--;
|
pPlayer->ammo_amount[DEVISTATOR_WEAPON]--;
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
}
|
}
|
||||||
|
@ -6360,7 +6336,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 72+(88<<8)+(140<<16);
|
flashColor = 72+(88<<8)+(140<<16);
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
A_Shoot(pPlayer->i, TILE_FREEZEBLAST);
|
fi.shoot(pPlayer->i, TILE_FREEZEBLAST);
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
}
|
}
|
||||||
if (sprite[pPlayer->i].xrepeat < 32)
|
if (sprite[pPlayer->i].xrepeat < 32)
|
||||||
|
@ -6389,7 +6365,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
pPlayer->vel.z = 0;
|
pPlayer->vel.z = 0;
|
||||||
if ((*weaponFrame) == 3)
|
if ((*weaponFrame) == 3)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_HANDHOLDINGLASER);
|
fi.shoot(pPlayer->i, TILE_HANDHOLDINGLASER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((*weaponFrame) == 16)
|
if ((*weaponFrame) == 16)
|
||||||
|
@ -6407,7 +6383,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
case KNEE_WEAPON__STATIC:
|
case KNEE_WEAPON__STATIC:
|
||||||
if (++(*weaponFrame) == 7)
|
if (++(*weaponFrame) == 7)
|
||||||
{
|
{
|
||||||
A_Shoot(pPlayer->i, TILE_KNEE);
|
fi.shoot(pPlayer->i, TILE_KNEE);
|
||||||
}
|
}
|
||||||
else if ((*weaponFrame) == 14)
|
else if ((*weaponFrame) == 14)
|
||||||
{
|
{
|
||||||
|
@ -6434,7 +6410,7 @@ static void P_ProcessWeapon(int playerNum)
|
||||||
lastvisinc = (int32_t) totalclock + 32;
|
lastvisinc = (int32_t) totalclock + 32;
|
||||||
pPlayer->visibility = 0;
|
pPlayer->visibility = 0;
|
||||||
flashColor = 255+(95<<8);
|
flashColor = 255+(95<<8);
|
||||||
A_Shoot(pPlayer->i, TILE_RPG);
|
fi.shoot(pPlayer->i, TILE_RPG);
|
||||||
P_CheckWeapon(pPlayer);
|
P_CheckWeapon(pPlayer);
|
||||||
}
|
}
|
||||||
else if ((*weaponFrame) == 20)
|
else if ((*weaponFrame) == 20)
|
||||||
|
@ -7310,7 +7286,7 @@ void P_ProcessInput(int playerNum)
|
||||||
{
|
{
|
||||||
if (pSprite->extra > 0 && ud.clipping == 0)
|
if (pSprite->extra > 0 && ud.clipping == 0)
|
||||||
{
|
{
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
A_PlaySound(SQUISHED, pPlayer->i);
|
A_PlaySound(SQUISHED, pPlayer->i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7815,7 +7791,7 @@ check_enemy_sprite:
|
||||||
if (RRRA)
|
if (RRRA)
|
||||||
pPlayer->moto_on_ground = 1;
|
pPlayer->moto_on_ground = 1;
|
||||||
if (pPlayer->falling_counter > 62 || (RRRA && pPlayer->falling_counter > 2 && sector[pPlayer->cursectnum].lotag == 802))
|
if (pPlayer->falling_counter > 62 || (RRRA && pPlayer->falling_counter > 2 && sector[pPlayer->cursectnum].lotag == 802))
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
else if (pPlayer->falling_counter > 9)
|
else if (pPlayer->falling_counter > 9)
|
||||||
{
|
{
|
||||||
// Falling damage.
|
// Falling damage.
|
||||||
|
@ -8410,13 +8386,13 @@ HORIZONLY:;
|
||||||
}
|
}
|
||||||
if (sprite[spriteNum].picnum == TILE_RRTILE3410)
|
if (sprite[spriteNum].picnum == TILE_RRTILE3410)
|
||||||
{
|
{
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
A_PlaySound(446, pPlayer->i);
|
A_PlaySound(446, pPlayer->i);
|
||||||
}
|
}
|
||||||
else if (RRRA && sprite[spriteNum].picnum == TILE_RRTILE2443 && sprite[spriteNum].pal == 19)
|
else if (RRRA && sprite[spriteNum].picnum == TILE_RRTILE2443 && sprite[spriteNum].pal == 19)
|
||||||
{
|
{
|
||||||
sprite[spriteNum].pal = 0;
|
sprite[spriteNum].pal = 0;
|
||||||
pPlayer->drug_mode = 5;
|
pPlayer->DrugMode = 5;
|
||||||
pPlayer->drug_timer = (int32_t) totalclock;
|
pPlayer->drug_timer = (int32_t) totalclock;
|
||||||
sprite[pPlayer->i].extra = max_player_health;
|
sprite[pPlayer->i].extra = max_player_health;
|
||||||
}
|
}
|
||||||
|
@ -8449,7 +8425,7 @@ HORIZONLY:;
|
||||||
{
|
{
|
||||||
if (RRRA)
|
if (RRRA)
|
||||||
pPlayer->lotag800kill = 1;
|
pPlayer->lotag800kill = 1;
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8463,7 +8439,7 @@ HORIZONLY:;
|
||||||
if ((!ud.clipping && pSector->lotag == ST_31_TWO_WAY_TRAIN) &&
|
if ((!ud.clipping && pSector->lotag == ST_31_TWO_WAY_TRAIN) &&
|
||||||
((unsigned)pSector->hitag < MAXSPRITES && sprite[pSector->hitag].xvel && actor[pSector->hitag].t_data[0] == 0))
|
((unsigned)pSector->hitag < MAXSPRITES && sprite[pSector->hitag].xvel && actor[pSector->hitag].t_data[0] == 0))
|
||||||
{
|
{
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8489,7 +8465,7 @@ HORIZONLY:;
|
||||||
|
|
||||||
if (squishPlayer)
|
if (squishPlayer)
|
||||||
{
|
{
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8498,7 +8474,7 @@ HORIZONLY:;
|
||||||
|
|
||||||
if (RR && sector[pPlayer->cursectnum].ceilingz > (sector[pPlayer->cursectnum].floorz-ZOFFSET4))
|
if (RR && sector[pPlayer->cursectnum].ceilingz > (sector[pPlayer->cursectnum].floorz-ZOFFSET4))
|
||||||
{
|
{
|
||||||
P_QuickKill(pPlayer);
|
quickkill(pPlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8625,7 +8601,7 @@ HORIZONLY:;
|
||||||
case APLAYER__STATIC:
|
case APLAYER__STATIC:
|
||||||
{
|
{
|
||||||
int playerSquished = P_Get(pPlayer->actorsqu);
|
int playerSquished = P_Get(pPlayer->actorsqu);
|
||||||
P_QuickKill(g_player[playerSquished].ps);
|
quickkill(g_player[playerSquished].ps);
|
||||||
g_player[playerSquished].ps->frag_ps = playerNum;
|
g_player[playerSquished].ps->frag_ps = playerNum;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -9220,15 +9196,5 @@ int P_HasKey(int sectNum, int playerNum)
|
||||||
|
|
||||||
int16_t max_ammo_amount[MAX_WEAPONS];
|
int16_t max_ammo_amount[MAX_WEAPONS];
|
||||||
|
|
||||||
void forceplayerangle(DukePlayer_t* pPlayer)
|
|
||||||
{
|
|
||||||
int const nAngle = 128 - (krand2() & 255);
|
|
||||||
|
|
||||||
pPlayer->q16horiz += F16(64);
|
|
||||||
pPlayer->return_to_center = 9;
|
|
||||||
pPlayer->rotscrnang = nAngle >> 1;
|
|
||||||
pPlayer->look_ang = pPlayer->rotscrnang;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
|
@ -990,7 +990,7 @@ void P_ResetStatus(int playerNum)
|
||||||
pPlayer->not_on_water = 0;
|
pPlayer->not_on_water = 0;
|
||||||
pPlayer->sea_sick = 0;
|
pPlayer->sea_sick = 0;
|
||||||
pPlayer->nocheat = 0;
|
pPlayer->nocheat = 0;
|
||||||
pPlayer->drug_mode = 0;
|
pPlayer->DrugMode = 0;
|
||||||
pPlayer->drug_stat[0] = 0;
|
pPlayer->drug_stat[0] = 0;
|
||||||
pPlayer->drug_stat[1] = 0;
|
pPlayer->drug_stat[1] = 0;
|
||||||
pPlayer->drug_stat[2] = 0;
|
pPlayer->drug_stat[2] = 0;
|
||||||
|
@ -1833,7 +1833,7 @@ static void prelevel(char g)
|
||||||
|
|
||||||
if (RR && !g_thunderOn)
|
if (RR && !g_thunderOn)
|
||||||
{
|
{
|
||||||
videoSetPalette(0,BASEPAL,0);
|
videoSetPalette(BASEPAL,0);
|
||||||
g_visibility = g_player[screenpeek].ps->visibility;
|
g_visibility = g_player[screenpeek].ps->visibility;
|
||||||
}
|
}
|
||||||
if (RR)
|
if (RR)
|
||||||
|
@ -2449,7 +2449,7 @@ int G_EnterLevel(int gameMode)
|
||||||
mapList[mii].DisplayName());
|
mapList[mii].DisplayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
g_restorePalette = -1;
|
restorepalette = -1;
|
||||||
|
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
videoClearViewableArea(0L);
|
videoClearViewableArea(0L);
|
||||||
|
|
|
@ -1439,7 +1439,7 @@ static void postloadplayer(int32_t savegamep)
|
||||||
|
|
||||||
//3
|
//3
|
||||||
P_UpdateScreenPal(g_player[myconnectindex].ps);
|
P_UpdateScreenPal(g_player[myconnectindex].ps);
|
||||||
g_restorePalette = -1;
|
restorepalette = -1;
|
||||||
|
|
||||||
//3.5
|
//3.5
|
||||||
if (savegamep)
|
if (savegamep)
|
||||||
|
|
|
@ -90,7 +90,7 @@ void P_SetGamePalette(DukePlayer_t *player, uint32_t palid, ESetPalFlags set)
|
||||||
if (player != g_player[screenpeek].ps)
|
if (player != g_player[screenpeek].ps)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
videoSetPalette(0, palid, set);
|
videoSetPalette(palid, set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -695,18 +695,18 @@ void G_DisplayRest(int32_t smoothratio)
|
||||||
palaccum_add(&tint, &loogiepal, pp->loogcnt>>1);
|
palaccum_add(&tint, &loogiepal, pp->loogcnt>>1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_restorePalette)
|
if (restorepalette)
|
||||||
{
|
{
|
||||||
// reset a normal palette
|
// reset a normal palette
|
||||||
static uint32_t omovethingscnt;
|
static uint32_t omovethingscnt;
|
||||||
|
|
||||||
if (g_restorePalette < 2 || omovethingscnt+1 == g_moveThingsCount)
|
if (restorepalette < 2 || omovethingscnt+1 == g_moveThingsCount)
|
||||||
{
|
{
|
||||||
int32_t pal = pp->palette;
|
int32_t pal = pp->palette;
|
||||||
|
|
||||||
// g_restorePalette < 0: reset tinting, too (e.g. when loading new game)
|
// restorepalette < 0: reset tinting, too (e.g. when loading new game)
|
||||||
P_SetGamePalette(pp, pal, (g_restorePalette > 0) ? Pal_DontResetFade : ESetPalFlags::FromInt(0));
|
P_SetGamePalette(pp, pal, (restorepalette > 0) ? Pal_DontResetFade : ESetPalFlags::FromInt(0));
|
||||||
g_restorePalette = 0;
|
restorepalette = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1118,10 +1118,10 @@ void G_DisplayLogo(void)
|
||||||
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7106, 0, 0, 2 + 8 + 64 + BGSTRETCH);
|
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7106, 0, 0, 2 + 8 + 64 + BGSTRETCH);
|
||||||
G_HandleAsync();
|
G_HandleAsync();
|
||||||
|
|
||||||
if (g_restorePalette)
|
if (restorepalette)
|
||||||
{
|
{
|
||||||
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
|
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
|
||||||
g_restorePalette = 0;
|
restorepalette = 0;
|
||||||
}
|
}
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
}
|
}
|
||||||
|
@ -1163,10 +1163,10 @@ void G_DisplayLogo(void)
|
||||||
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7107, 0, 0, 2 + 8 + 64 + BGSTRETCH);
|
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7107, 0, 0, 2 + 8 + 64 + BGSTRETCH);
|
||||||
G_HandleAsync();
|
G_HandleAsync();
|
||||||
|
|
||||||
if (g_restorePalette)
|
if (restorepalette)
|
||||||
{
|
{
|
||||||
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
|
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
|
||||||
g_restorePalette = 0;
|
restorepalette = 0;
|
||||||
}
|
}
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
}
|
}
|
||||||
|
|
|
@ -806,44 +806,5 @@ rrtripbomb_case:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int hitasprite(int spriteNum, int16_t *hitSprite)
|
|
||||||
{
|
|
||||||
hitdata_t hitData;
|
|
||||||
int32_t zOffset = 0;
|
|
||||||
|
|
||||||
if (A_CheckEnemySprite(&sprite[spriteNum]))
|
|
||||||
zOffset = (42 << 8);
|
|
||||||
else if (PN(spriteNum) == TILE_APLAYER)
|
|
||||||
zOffset = (39 << 8);
|
|
||||||
|
|
||||||
SZ(spriteNum) -= zOffset;
|
|
||||||
hitscan((const vec3_t *)&sprite[spriteNum], SECT(spriteNum), sintable[(SA(spriteNum) + 512) & 2047],
|
|
||||||
sintable[SA(spriteNum) & 2047], 0, &hitData, CLIPMASK1);
|
|
||||||
SZ(spriteNum) += zOffset;
|
|
||||||
|
|
||||||
if (hitSprite)
|
|
||||||
*hitSprite = hitData.sprite;
|
|
||||||
|
|
||||||
if (hitData.wall >= 0 && (wall[hitData.wall].cstat&16) && A_CheckEnemySprite( &sprite[spriteNum]))
|
|
||||||
return 1<<30;
|
|
||||||
|
|
||||||
return FindDistance2D(hitData.pos.x-SX(spriteNum),hitData.pos.y-SY(spriteNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
int hitawall(DukePlayer_t *pPlayer, int *hitWall)
|
|
||||||
{
|
|
||||||
hitdata_t hitData;
|
|
||||||
|
|
||||||
hitscan((const vec3_t *)pPlayer, pPlayer->cursectnum, sintable[(fix16_to_int(pPlayer->q16ang) + 512) & 2047],
|
|
||||||
sintable[fix16_to_int(pPlayer->q16ang) & 2047], 0, &hitData, CLIPMASK0);
|
|
||||||
|
|
||||||
*hitWall = hitData.wall;
|
|
||||||
|
|
||||||
if (hitData.wall < 0)
|
|
||||||
return INT32_MAX;
|
|
||||||
|
|
||||||
return FindDistance2D(hitData.pos.x - pPlayer->pos.x, hitData.pos.y - pPlayer->pos.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
|
@ -505,7 +505,7 @@ int32_t Anim_Play(const char *fn)
|
||||||
|
|
||||||
if (g_restorePalette == 1)
|
if (g_restorePalette == 1)
|
||||||
{
|
{
|
||||||
P_SetGamePalette(g_player[myconnectindex].ps, ANIMPAL, 0);
|
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0);
|
||||||
g_restorePalette = 0;
|
g_restorePalette = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7166,7 +7166,7 @@ int GameInterface::app_main()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
videoInit();
|
videoInit();
|
||||||
videoSetPalette(0, g_player[myconnectindex].ps->palette, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
|
|
||||||
// check if the minifont will support lowercase letters (3136-3161)
|
// check if the minifont will support lowercase letters (3136-3161)
|
||||||
// there is room for them in tiles012.art between "[\]^_." and "{|}~"
|
// there is room for them in tiles012.art between "[\]^_." and "{|}~"
|
||||||
|
|
|
@ -1874,7 +1874,7 @@ static void prelevel(char g)
|
||||||
|
|
||||||
if (RR && !g_thunderOn)
|
if (RR && !g_thunderOn)
|
||||||
{
|
{
|
||||||
videoSetPalette(0,BASEPAL,0);
|
videoSetPalette(BASEPAL,0);
|
||||||
g_visibility = g_player[screenpeek].ps->visibility;
|
g_visibility = g_player[screenpeek].ps->visibility;
|
||||||
}
|
}
|
||||||
if (RR)
|
if (RR)
|
||||||
|
|
|
@ -90,7 +90,7 @@ void P_SetGamePalette(DukePlayer_t *player, uint32_t palid, ESetPalFlags set)
|
||||||
if (player != g_player[screenpeek].ps)
|
if (player != g_player[screenpeek].ps)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
videoSetPalette(0, palid, set);
|
videoSetPalette(palid, set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1421,7 +1421,7 @@ void LogoLevel(void)
|
||||||
|
|
||||||
twod->ClearScreen();
|
twod->ClearScreen();
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
videoSetPalette(0, BASEPAL, 0);
|
videoSetPalette(BASEPAL, 0);
|
||||||
|
|
||||||
// put up a blank screen while loading
|
// put up a blank screen while loading
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue