mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 17:01:28 +00:00
- handle the clipmove result in processinput.
This commit is contained in:
parent
419cf9af5e
commit
87e8801531
7 changed files with 48 additions and 56 deletions
|
@ -49,8 +49,6 @@ void activatebysector_d(int sect, int j);
|
|||
void activatebysector_r(int sect, int j);
|
||||
void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
||||
void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
||||
void checkplayerhurt_d(struct player_struct* p, int j);
|
||||
void checkplayerhurt_r(struct player_struct* p, int j);
|
||||
bool checkhitceiling_d(int sn);
|
||||
bool checkhitceiling_r(int sn);
|
||||
void checkhitsprite_d(DDukeActor* i, DDukeActor* sn);
|
||||
|
@ -137,7 +135,6 @@ void SetDispatcher()
|
|||
checkhitswitch_d,
|
||||
activatebysector_d,
|
||||
checkhitwall_d,
|
||||
checkplayerhurt_d,
|
||||
checkhitceiling_d,
|
||||
checkhitsprite_d,
|
||||
checksectors_d,
|
||||
|
@ -187,7 +184,6 @@ void SetDispatcher()
|
|||
checkhitswitch_r,
|
||||
activatebysector_r,
|
||||
checkhitwall_r,
|
||||
checkplayerhurt_r,
|
||||
checkhitceiling_r,
|
||||
checkhitsprite_r,
|
||||
checksectors_r,
|
||||
|
|
|
@ -79,7 +79,6 @@ struct Dispatcher
|
|||
bool (*checkhitswitch)(int snum, int w, int switchtype);
|
||||
void (*activatebysector)(int sect, int j);
|
||||
void (*checkhitwall)(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
||||
void (*checkplayerhurt)(struct player_struct* p, int j);
|
||||
bool (*checkhitceiling)(int sn);
|
||||
void (*checkhitsprite)(DDukeActor* i, DDukeActor* sn);
|
||||
void (*checksectors)(int low);
|
||||
|
|
|
@ -180,6 +180,8 @@ void ceilingglass(int snum, int sectnum, int cnt);
|
|||
void spriteglass(DDukeActor* snum, int cnt);
|
||||
void lotsofcolourglass(int snum, int wallNum, int cnt);
|
||||
void lotsofglass(int snum, int wallnum, int cnt);
|
||||
void checkplayerhurt_d(struct player_struct* p, const Collision& coll);
|
||||
void checkplayerhurt_r(struct player_struct* p, const Collision& coll);
|
||||
|
||||
void addspritetodelete(int spnum=0);
|
||||
void checkavailinven(struct player_struct* p);
|
||||
|
|
|
@ -3024,24 +3024,24 @@ HORIZONLY:
|
|||
if (sector[p->cursectnum].lotag == 2) k = 0;
|
||||
else k = 1;
|
||||
|
||||
Collision clip{};
|
||||
if (ud.clipping)
|
||||
{
|
||||
j = 0;
|
||||
p->posx += p->posxv >> 14;
|
||||
p->posy += p->posyv >> 14;
|
||||
updatesector(p->posx, p->posy, &p->cursectnum);
|
||||
changespritesect(pi, p->cursectnum);
|
||||
}
|
||||
else
|
||||
j = clipmove(&p->posx, &p->posy,
|
||||
clipmove_ex(&p->posx, &p->posy,
|
||||
&p->posz, &p->cursectnum,
|
||||
p->posxv, p->posyv, 164L, (4L << 8), i, CLIPMASK0);
|
||||
p->posxv, p->posyv, 164L, (4L << 8), i, CLIPMASK0, clip);
|
||||
|
||||
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
|
||||
p->posz += 32 << 8;
|
||||
|
||||
if (j)
|
||||
fi.checkplayerhurt(p, j);
|
||||
if (clip.type != kHitNone)
|
||||
checkplayerhurt_d(p, clip);
|
||||
|
||||
if (p->jetpack_on == 0)
|
||||
{
|
||||
|
@ -3077,8 +3077,8 @@ HORIZONLY:
|
|||
}
|
||||
|
||||
if (truefdist < PHEIGHT && p->on_ground && psectlotag != 1 && shrunk == 0 && sector[p->cursectnum].lotag == 1)
|
||||
if (!S_CheckActorSoundPlaying(pi, DUKE_ONWATER))
|
||||
S_PlayActorSound(DUKE_ONWATER, pi);
|
||||
if (!S_CheckActorSoundPlaying(pact, DUKE_ONWATER))
|
||||
S_PlayActorSound(DUKE_ONWATER, pact);
|
||||
|
||||
if (p->cursectnum != s->sectnum)
|
||||
changespritesect(pi, p->cursectnum);
|
||||
|
|
|
@ -3915,7 +3915,6 @@ HORIZONLY:
|
|||
else k = 1;
|
||||
|
||||
Collision clip{};
|
||||
int j;
|
||||
if (ud.clipping)
|
||||
{
|
||||
p->posx += p->posxv >> 14;
|
||||
|
@ -3924,38 +3923,38 @@ HORIZONLY:
|
|||
changespritesect(pact, p->cursectnum);
|
||||
}
|
||||
else
|
||||
clipmove(&p->posx, &p->posy,
|
||||
clipmove_ex(&p->posx, &p->posy,
|
||||
&p->posz, &p->cursectnum,
|
||||
p->posxv, p->posyv, 164L, (4L << 8), i, CLIPMASK0);//, clip);
|
||||
p->posxv, p->posyv, 164L, (4L << 8), i, CLIPMASK0, clip);
|
||||
|
||||
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
|
||||
p->posz += 32 << 8;
|
||||
|
||||
if (j)
|
||||
fi.checkplayerhurt(p, j);
|
||||
if (clip.type != kHitNone)
|
||||
checkplayerhurt_r(p, clip);
|
||||
else if (isRRRA() && p->hurt_delay2 > 0)
|
||||
p->hurt_delay2--;
|
||||
|
||||
|
||||
if ((j & 49152) == 32768)
|
||||
if (clip.type == kHitWall)
|
||||
{
|
||||
int var60 = wall[j & (MAXWALLS - 1)].lotag;
|
||||
int var60 = wall[clip.index].lotag;
|
||||
|
||||
if (p->OnMotorcycle)
|
||||
{
|
||||
onMotorcycleMove(snum, psect, j & (MAXWALLS-1));
|
||||
onMotorcycleMove(snum, psect, clip.index);
|
||||
}
|
||||
else if (p->OnBoat)
|
||||
{
|
||||
onBoatMove(snum, psect, j& (MAXWALLS - 1));
|
||||
onBoatMove(snum, psect, clip.index);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wall[j & (MAXWALLS - 1)].lotag >= 40 && wall[j & (MAXWALLS - 1)].lotag <= 44)
|
||||
if (wall[clip.index].lotag >= 40 && wall[clip.index].lotag <= 44)
|
||||
{
|
||||
if (wall[j & (MAXWALLS - 1)].lotag < 44)
|
||||
if (wall[clip.index].lotag < 44)
|
||||
{
|
||||
dofurniture(j & (MAXWALLS - 1), p->cursectnum, snum);
|
||||
dofurniture(clip.index, p->cursectnum, snum);
|
||||
pushmove(&p->posx, &p->posy, &p->posz, &p->cursectnum, 172L, (4L << 8), (4L << 8), CLIPMASK0);
|
||||
}
|
||||
else
|
||||
|
@ -3964,41 +3963,40 @@ HORIZONLY:
|
|||
}
|
||||
}
|
||||
|
||||
if ((j & 49152) == 49152)
|
||||
if (clip.type == kHitSprite)
|
||||
{
|
||||
int var60 = j & (MAXSPRITES - 1);
|
||||
if (p->OnMotorcycle)
|
||||
{
|
||||
onMotorcycleHit(snum, &hittype[var60]);
|
||||
onMotorcycleHit(snum, clip.actor);
|
||||
}
|
||||
else if (p->OnBoat)
|
||||
{
|
||||
onBoatHit(snum, &hittype[var60]);
|
||||
onBoatHit(snum, clip.actor);
|
||||
}
|
||||
else
|
||||
if (badguy(&sprite[var60]))
|
||||
if (badguy(clip.actor))
|
||||
{
|
||||
if (sprite[var60].statnum != 1)
|
||||
if (clip.actor->s.statnum != 1)
|
||||
{
|
||||
hittype[var60].timetosleep = 0;
|
||||
if (sprite[var60].picnum == BILLYRAY)
|
||||
S_PlayActorSound(404, var60);
|
||||
clip.actor->timetosleep = 0;
|
||||
if (clip.actor->s.picnum == BILLYRAY)
|
||||
S_PlayActorSound(404, clip.actor);
|
||||
else
|
||||
check_fta_sounds_r(&hittype[var60]);
|
||||
changespritestat(var60, 1);
|
||||
check_fta_sounds_r(clip.actor);
|
||||
changespritestat(clip.actor, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (sprite[var60].picnum == RRTILE3410)
|
||||
if (clip.actor->s.picnum == RRTILE3410)
|
||||
{
|
||||
quickkill(p);
|
||||
S_PlayActorSound(446, pact);
|
||||
}
|
||||
else if (isRRRA() && sprite[var60].picnum == RRTILE2443 && sprite[var60].pal == 19)
|
||||
else if (isRRRA() && clip.actor->s.picnum == RRTILE2443 && clip.actor->s.pal == 19)
|
||||
{
|
||||
sprite[var60].pal = 0;
|
||||
clip.actor->s.pal = 0;
|
||||
p->DrugMode = 5;
|
||||
sprite[ps[snum].i].extra = max_player_health;
|
||||
ps[snum].GetActor()->s.extra = max_player_health;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4050,6 +4048,7 @@ HORIZONLY:
|
|||
if (p->cursectnum != s->sectnum)
|
||||
changespritesect(pact, p->cursectnum);
|
||||
|
||||
int j;
|
||||
if (ud.clipping == 0)
|
||||
{
|
||||
if (s->clipdist == 64)
|
||||
|
|
|
@ -887,13 +887,11 @@ void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkplayerhurt_d(struct player_struct* p, int j)
|
||||
void checkplayerhurt_d(struct player_struct* p, const Collision& coll)
|
||||
{
|
||||
if ((j & 49152) == 49152)
|
||||
if (coll.type == kHitSprite)
|
||||
{
|
||||
j &= (MAXSPRITES - 1);
|
||||
|
||||
switch (sprite[j].picnum)
|
||||
switch (coll.actor->s.picnum)
|
||||
{
|
||||
case CACTUS:
|
||||
if (p->hurt_delay < 8)
|
||||
|
@ -901,15 +899,15 @@ void checkplayerhurt_d(struct player_struct* p, int j)
|
|||
p->GetActor()->s.extra -= 5;
|
||||
p->hurt_delay = 16;
|
||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->i);
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ((j & 49152) != 32768) return;
|
||||
j &= (MAXWALLS - 1);
|
||||
if (coll.type != kHitWall) return;
|
||||
int j = coll.index;
|
||||
|
||||
if (p->hurt_delay > 0) p->hurt_delay--;
|
||||
else if (wall[j].cstat & 85) switch (wall[j].overpicnum)
|
||||
|
@ -924,7 +922,7 @@ void checkplayerhurt_d(struct player_struct* p, int j)
|
|||
|
||||
p->posxv = -(sintable[(p->angle.ang.asbuild() + 512) & 2047] << 8);
|
||||
p->posyv = -(sintable[(p->angle.ang.asbuild()) & 2047] << 8);
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->i);
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||
|
||||
fi.checkhitwall(p->GetActor(), j,
|
||||
p->posx + (sintable[(p->angle.ang.asbuild() + 512) & 2047] >> 9),
|
||||
|
|
|
@ -1371,13 +1371,11 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkplayerhurt_r(struct player_struct* p, int j)
|
||||
void checkplayerhurt_r(struct player_struct* p, const Collision &coll)
|
||||
{
|
||||
if ((j & 49152) == 49152)
|
||||
if (coll.type == kHitSprite)
|
||||
{
|
||||
j &= (MAXSPRITES - 1);
|
||||
|
||||
switch (sprite[j].picnum)
|
||||
switch (coll.actor->s.picnum)
|
||||
{
|
||||
case RRTILE2430:
|
||||
case RRTILE2431:
|
||||
|
@ -1391,7 +1389,7 @@ void checkplayerhurt_r(struct player_struct* p, int j)
|
|||
p->GetActor()->s.extra -= 2;
|
||||
p->hurt_delay2 = 16;
|
||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->i);
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||
}
|
||||
break;
|
||||
case CACTUS:
|
||||
|
@ -1407,8 +1405,8 @@ void checkplayerhurt_r(struct player_struct* p, int j)
|
|||
return;
|
||||
}
|
||||
|
||||
if ((j & 49152) != 32768) return;
|
||||
j &= (MAXWALLS - 1);
|
||||
if (coll.type != kHitWall) return;
|
||||
int j = coll.index;
|
||||
|
||||
if (p->hurt_delay > 0) p->hurt_delay--;
|
||||
else if (wall[j].cstat & 85) switch (wall[j].overpicnum)
|
||||
|
|
Loading…
Reference in a new issue