mirror of
https://github.com/ZDoom/Raze.git
synced 2025-01-31 12:30:40 +00:00
- shared SE24 code.
This commit is contained in:
parent
02813802d4
commit
00f5a08390
4 changed files with 90 additions and 159 deletions
|
@ -4531,6 +4531,88 @@ void handle_se27(DDukeActor* actor)
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void handle_se24(DDukeActor *actor, int16_t *list1, int16_t *list2, int TRIPBOMB, int LASERLINE, int CRANE, int shift)
|
||||||
|
{
|
||||||
|
int* t = &actor->temp_data[0];
|
||||||
|
|
||||||
|
auto testlist = [](int16_t* list, int val) { for (int i = 0; list[i] > 0; i++) if (list[i] == val) return true; return false; };
|
||||||
|
|
||||||
|
if (t[4]) return;
|
||||||
|
|
||||||
|
int x = (actor->s.yvel * sintable[(actor->s.ang + 512) & 2047]) >> 18;
|
||||||
|
int l = (actor->s.yvel * sintable[actor->s.ang & 2047]) >> 18;
|
||||||
|
|
||||||
|
DukeSectIterator it(actor->s.sectnum);
|
||||||
|
while (auto a2 = it.Next())
|
||||||
|
{
|
||||||
|
auto s2 = &a2->s;
|
||||||
|
if (s2->zvel >= 0)
|
||||||
|
{
|
||||||
|
switch (s2->statnum)
|
||||||
|
{
|
||||||
|
case 5:
|
||||||
|
if (testlist(list1, s2->picnum))
|
||||||
|
{
|
||||||
|
s2->xrepeat = s2->yrepeat = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (s2->picnum == LASERLINE)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//[[fallthrough]]
|
||||||
|
case 6:
|
||||||
|
if (s2->picnum == TRIPBOMB) break;
|
||||||
|
//[[fallthrough]]
|
||||||
|
case 1:
|
||||||
|
case 0:
|
||||||
|
if (testlist(list2, s2->picnum) ||
|
||||||
|
wallswitchcheck(a2))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!(s2->picnum >= CRANE && s2->picnum <= (CRANE + 3)))
|
||||||
|
{
|
||||||
|
if (s2->z > (a2->floorz - (16 << 8)))
|
||||||
|
{
|
||||||
|
a2->bposx = s2->x;
|
||||||
|
a2->bposy = s2->y;
|
||||||
|
|
||||||
|
s2->x += x >> shift;
|
||||||
|
s2->y += l >> shift;
|
||||||
|
|
||||||
|
setsprite(a2, s2->pos);
|
||||||
|
|
||||||
|
if (sector[s2->sectnum].floorstat & 2)
|
||||||
|
if (s2->statnum == 2)
|
||||||
|
makeitfall(a2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto p = connecthead; p >= 0; p = connectpoint2[p])
|
||||||
|
{
|
||||||
|
if (ps[p].cursectnum == actor->s.sectnum && ps[p].on_ground)
|
||||||
|
{
|
||||||
|
if (abs(ps[p].pos.z - ps[p].truefz) < PHEIGHT + (9 << 8))
|
||||||
|
{
|
||||||
|
ps[p].fric.x += x << 3;
|
||||||
|
ps[p].fric.y += l << 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sector[actor->s.sectnum].floorxpanning += actor->s.yvel >> 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void handle_se32(DDukeActor *actor)
|
void handle_se32(DDukeActor *actor)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = &actor->s;
|
||||||
|
|
|
@ -3675,91 +3675,9 @@ void moveeffectors_d(void) //STATNUM 3
|
||||||
case SE_24_CONVEYOR:
|
case SE_24_CONVEYOR:
|
||||||
case 34:
|
case 34:
|
||||||
{
|
{
|
||||||
if (t[4]) break;
|
static int16_t list1[] = { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3, FOOTPRINTS4, BULLETHOLE, BLOODSPLAT1, BLOODSPLAT2, BLOODSPLAT3, BLOODSPLAT4, -1 };
|
||||||
|
static int16_t list2[] = { BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, SIDEBOLT1, SIDEBOLT1 + 1, SIDEBOLT1 + 2, SIDEBOLT1 + 3, -1 };
|
||||||
x = (sprite[i].yvel * sintable[(s->ang + 512) & 2047]) >> 18;
|
handle_se24(&hittype[i], list1, list2, TRIPBOMB, LASERLINE, CRANE, 2);
|
||||||
l = (sprite[i].yvel * sintable[s->ang & 2047]) >> 18;
|
|
||||||
|
|
||||||
k = 0;
|
|
||||||
|
|
||||||
SectIterator it(s->sectnum);
|
|
||||||
while ((j = it.NextIndex()) >= 0)
|
|
||||||
{
|
|
||||||
auto sprj = &sprite[j];
|
|
||||||
if (sprj->zvel >= 0)
|
|
||||||
switch (sprj->statnum)
|
|
||||||
{
|
|
||||||
case 5:
|
|
||||||
switch (sprj->picnum)
|
|
||||||
{
|
|
||||||
case BLOODPOOL:
|
|
||||||
case PUKE:
|
|
||||||
case FOOTPRINTS:
|
|
||||||
case FOOTPRINTS2:
|
|
||||||
case FOOTPRINTS3:
|
|
||||||
case FOOTPRINTS4:
|
|
||||||
case BULLETHOLE:
|
|
||||||
case BLOODSPLAT1:
|
|
||||||
case BLOODSPLAT2:
|
|
||||||
case BLOODSPLAT3:
|
|
||||||
case BLOODSPLAT4:
|
|
||||||
sprj->xrepeat = sprj->yrepeat = 0;
|
|
||||||
continue;
|
|
||||||
case LASERLINE:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
case 6:
|
|
||||||
if (sprj->picnum == TRIPBOMB) break;
|
|
||||||
case 1:
|
|
||||||
case 0:
|
|
||||||
if (
|
|
||||||
sprj->picnum == BOLT1 ||
|
|
||||||
sprj->picnum == BOLT1 + 1 ||
|
|
||||||
sprj->picnum == BOLT1 + 2 ||
|
|
||||||
sprj->picnum == BOLT1 + 3 ||
|
|
||||||
sprj->picnum == SIDEBOLT1 ||
|
|
||||||
sprj->picnum == SIDEBOLT1 + 1 ||
|
|
||||||
sprj->picnum == SIDEBOLT1 + 2 ||
|
|
||||||
sprj->picnum == SIDEBOLT1 + 3 ||
|
|
||||||
wallswitchcheck(j)
|
|
||||||
)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!(sprj->picnum >= CRANE && sprj->picnum <= (CRANE + 3)))
|
|
||||||
{
|
|
||||||
if (sprj->z > (hittype[j].floorz - (16 << 8)))
|
|
||||||
{
|
|
||||||
hittype[j].bposx = sprj->x;
|
|
||||||
hittype[j].bposy = sprj->y;
|
|
||||||
|
|
||||||
sprj->x += x >> 2;
|
|
||||||
sprj->y += l >> 2;
|
|
||||||
|
|
||||||
setsprite(j, sprj->x, sprj->y, sprj->z);
|
|
||||||
|
|
||||||
if (sector[sprj->sectnum].floorstat & 2)
|
|
||||||
if (sprj->statnum == 2)
|
|
||||||
makeitfall(j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (p = connecthead; p >= 0; p = connectpoint2[p])
|
|
||||||
{
|
|
||||||
if (ps[p].cursectnum == s->sectnum && ps[p].on_ground)
|
|
||||||
{
|
|
||||||
if (abs(ps[p].pos.z - ps[p].truefz) < PHEIGHT + (9 << 8))
|
|
||||||
{
|
|
||||||
ps[p].fric.x += x << 3;
|
|
||||||
ps[p].fric.y += l << 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sc->floorxpanning += sprite[i].yvel >> 7;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 35:
|
case 35:
|
||||||
|
|
|
@ -3648,82 +3648,12 @@ void moveeffectors_r(void) //STATNUM 3
|
||||||
case SE_24_CONVEYOR:
|
case SE_24_CONVEYOR:
|
||||||
case 34:
|
case 34:
|
||||||
{
|
{
|
||||||
if (t[4]) break;
|
static int16_t list1[] = { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3, -1 };
|
||||||
|
static int16_t list2[] = { BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, -1 };
|
||||||
x = (sprite[i].yvel * sintable[(s->ang + 512) & 2047]) >> 18;
|
handle_se24(&hittype[i], list1, list2, BULLETHOLE, -1, CRANE, 1);
|
||||||
l = (sprite[i].yvel * sintable[s->ang & 2047]) >> 18;
|
|
||||||
|
|
||||||
k = 0;
|
|
||||||
|
|
||||||
SectIterator it(s->sectnum);
|
|
||||||
while ((j = it.NextIndex()) >= 0)
|
|
||||||
{
|
|
||||||
auto sj = &sprite[j];
|
|
||||||
if (sj->zvel >= 0)
|
|
||||||
switch (sj->statnum)
|
|
||||||
{
|
|
||||||
case 5:
|
|
||||||
switch (sj->picnum)
|
|
||||||
{
|
|
||||||
case BLOODPOOL:
|
|
||||||
case FOOTPRINTS:
|
|
||||||
case FOOTPRINTS2:
|
|
||||||
case FOOTPRINTS3:
|
|
||||||
sj->xrepeat = sj->yrepeat = 0;
|
|
||||||
k = 1;
|
|
||||||
break;
|
|
||||||
case BULLETHOLE:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
case 6:
|
|
||||||
case 1:
|
|
||||||
case 0:
|
|
||||||
if (
|
|
||||||
sj->picnum == BOLT1 ||
|
|
||||||
sj->picnum == BOLT1 + 1 ||
|
|
||||||
sj->picnum == BOLT1 + 2 ||
|
|
||||||
sj->picnum == BOLT1 + 3 ||
|
|
||||||
wallswitchcheck(j)
|
|
||||||
)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!(sj->picnum >= CRANE && sj->picnum <= (CRANE + 3)))
|
|
||||||
{
|
|
||||||
if (sj->z > (hittype[j].floorz - (16 << 8)))
|
|
||||||
{
|
|
||||||
hittype[j].bposx = sj->x;
|
|
||||||
hittype[j].bposy = sj->y;
|
|
||||||
|
|
||||||
sj->x += x >> 1;
|
|
||||||
sj->y += l >> 1;
|
|
||||||
|
|
||||||
setsprite(j, sj->x, sj->y, sj->z);
|
|
||||||
|
|
||||||
if (sector[sj->sectnum].floorstat & 2)
|
|
||||||
if (sj->statnum == 2)
|
|
||||||
makeitfall(j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (p = connecthead; p >= 0; p = connectpoint2[p])
|
|
||||||
{
|
|
||||||
if (ps[p].cursectnum == s->sectnum && ps[p].on_ground)
|
|
||||||
{
|
|
||||||
if (abs(ps[p].pos.z - ps[p].truefz) < PHEIGHT + (9 << 8))
|
|
||||||
{
|
|
||||||
ps[p].fric.x += x << 3;
|
|
||||||
ps[p].fric.y += l << 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sc->floorxpanning += sprite[i].yvel >> 7;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 35:
|
case 35:
|
||||||
handle_se35(&hittype[i], SMALLSMOKE, EXPLOSION2);
|
handle_se35(&hittype[i], SMALLSMOKE, EXPLOSION2);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -84,6 +84,7 @@ void handle_se19(DDukeActor* i, int BIGFORCE);
|
||||||
void handle_se20(DDukeActor* i);
|
void handle_se20(DDukeActor* i);
|
||||||
void handle_se21(DDukeActor* i);
|
void handle_se21(DDukeActor* i);
|
||||||
void handle_se22(DDukeActor* i);
|
void handle_se22(DDukeActor* i);
|
||||||
|
void handle_se24(DDukeActor* actor, int16_t* list1, int16_t* list2, int TRIPBOMB, int LASERLINE, int CRANE, int shift);
|
||||||
void handle_se26(DDukeActor* i);
|
void handle_se26(DDukeActor* i);
|
||||||
void handle_se27(DDukeActor* i);
|
void handle_se27(DDukeActor* i);
|
||||||
void handle_se32(DDukeActor* i);
|
void handle_se32(DDukeActor* i);
|
||||||
|
|
Loading…
Reference in a new issue