- movetouchplate, moveooz, movecanwithsomething.

# Conflicts:
#	source/games/duke/src/funct.h
This commit is contained in:
Christoph Oelckers 2020-10-21 22:22:12 +02:00
parent b7f26c064d
commit e001b3117f
4 changed files with 38 additions and 42 deletions

View file

@ -1109,10 +1109,10 @@ void movedoorshock(DDukeActor* actor)
//
//---------------------------------------------------------------------------
void movetouchplate(int i, int plate)
void movetouchplate(DDukeActor* actor, int plate)
{
auto s = &sprite[i];
auto t = &hittype[i].temp_data[0];
auto s = &actor->s;
int* t = &actor->temp_data[0];
int sect = s->sectnum;
int x;
int p;
@ -1176,14 +1176,13 @@ void movetouchplate(int i, int plate)
if (t[1] == 1)
{
StatIterator it(STAT_STANDABLE);
int j;
while ((j = it.NextIndex()) >= 0)
DukeStatIterator it(STAT_STANDABLE);
while (auto act2 = it.Next())
{
if (j != i && sprite[j].picnum == plate && sprite[j].lotag == s->lotag)
if (act2 != actor && act2->s.picnum == plate && act2->s.lotag == s->lotag)
{
hittype[j].temp_data[1] = 1;
hittype[j].temp_data[3] = t[3];
act2->temp_data[1] = 1;
act2->temp_data[3] = t[3];
}
}
}
@ -1195,15 +1194,15 @@ void movetouchplate(int i, int plate)
//
//---------------------------------------------------------------------------
void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion)
void moveooz(DDukeActor* actor, int seenine, int seeninedead, int ooz, int explosion)
{
auto s = &sprite[i];
auto t = &hittype[i].temp_data[0];
auto s = &actor->s;
int* t = &actor->temp_data[0];
int j;
if (s->shade != -32 && s->shade != -33)
{
if (s->xrepeat)
j = (fi.ifhitbyweapon(&hittype[i]) >= 0);
j = (fi.ifhitbyweapon(actor) >= 0);
else
j = 0;
@ -1213,11 +1212,10 @@ void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion)
t[3] = 1;
StatIterator it(STAT_STANDABLE);
int j;
while ((j = it.NextIndex()) >= 0)
DukeStatIterator it(STAT_STANDABLE);
while (auto act2 = it.Next())
{
auto ss = &sprite[j];
auto ss = &act2->s;
if (s->hitag == ss->hitag && (ss->picnum == seenine || ss->picnum == ooz))
ss->shade = -32;
}
@ -1239,18 +1237,18 @@ void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion)
{
if (s->xrepeat > 0)
{
hittype[i].temp_data[2]++;
if (hittype[i].temp_data[2] == 3)
actor->temp_data[2]++;
if (actor->temp_data[2] == 3)
{
if (s->picnum == ooz)
{
hittype[i].temp_data[2] = 0;
detonate(i, explosion);
actor->temp_data[2] = 0;
detonate(actor, explosion);
return;
}
if (s->picnum != (seeninedead + 1))
{
hittype[i].temp_data[2] = 0;
actor->temp_data[2] = 0;
if (s->picnum == seeninedead) s->picnum++;
else if (s->picnum == seenine)
@ -1258,13 +1256,13 @@ void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion)
}
else
{
detonate(i, explosion);
detonate(actor, explosion);
return;
}
}
return;
}
detonate(i, explosion);
detonate(actor, explosion);
return;
}
}
@ -1276,20 +1274,18 @@ void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion)
//
//---------------------------------------------------------------------------
void movecanwithsomething(int i)
void movecanwithsomething(DDukeActor* actor)
{
auto s = &sprite[i];
makeitfall(i);
int j = fi.ifhitbyweapon(&hittype[i]);
makeitfall(actor);
int j = fi.ifhitbyweapon(actor);
if (j >= 0)
{
S_PlayActorSound(VENT_BUST, i);
S_PlayActorSound(VENT_BUST, actor);
for (j = 0; j < 10; j++)
RANDOMSCRAP(s, i);
RANDOMSCRAP(actor);
if (s->lotag) fi.spawn(i, s->lotag);
deletesprite(i);
if (actor->s.lotag) spawn(actor, actor->s.lotag);
deletesprite(actor);
}
}

View file

@ -1530,7 +1530,7 @@ void movestandables_d(void)
else if (picnum == OOZFILTER || picnum == SEENINE || picnum == SEENINEDEAD || picnum == (SEENINEDEAD + 1))
{
moveooz(i, SEENINE, SEENINEDEAD, OOZFILTER, EXPLOSION2);
moveooz(&hittype[i], SEENINE, SEENINEDEAD, OOZFILTER, EXPLOSION2);
}
else if (picnum == MASTERSWITCH)
@ -1570,12 +1570,12 @@ void movestandables_d(void)
else if (picnum == TOUCHPLATE)
{
movetouchplate(i, TOUCHPLATE);
movetouchplate(&hittype[i], TOUCHPLATE);
}
else if (isIn(picnum, CANWITHSOMETHING, CANWITHSOMETHING2, CANWITHSOMETHING3, CANWITHSOMETHING4))
{
movecanwithsomething(i);
movecanwithsomething(&hittype[i]);
}
else if (isIn(picnum,

View file

@ -1079,7 +1079,7 @@ void movestandables_r(void)
else if (picnum == OOZFILTER || picnum == SEENINE || picnum == SEENINEDEAD || picnum == (SEENINEDEAD + 1))
{
moveooz(i, SEENINE, SEENINEDEAD, OOZFILTER, EXPLOSION2);
moveooz(&hittype[i], SEENINE, SEENINEDEAD, OOZFILTER, EXPLOSION2);
}
else if (picnum == MASTERSWITCH)
@ -1109,12 +1109,12 @@ void movestandables_r(void)
else if (picnum == TOUCHPLATE)
{
movetouchplate(i, TOUCHPLATE);
movetouchplate(&hittype[i], TOUCHPLATE);
}
else if (picnum == CANWITHSOMETHING)
{
movecanwithsomething(i);
movecanwithsomething(&hittype[i]);
}
else if (isIn(picnum,

View file

@ -38,12 +38,12 @@ void movemasterswitch(DDukeActor* i, int spectype1, int spectype2);
void movetrash(DDukeActor* i);
void movewaterdrip(DDukeActor* i, int drip);
void movedoorshock(DDukeActor* i);
void movetouchplate(int i, int plate);
void movecanwithsomething(int i);
void movetouchplate(DDukeActor* i, int plate);
void movecanwithsomething(DDukeActor* i);
void bounce(int i);
void movetongue(int i, int tongue, int jaw);
void rpgexplode(int i, int j, const vec3_t& pos, int EXPLOSION2, int EXPLOSION2BOT, int newextra, int playsound);
void moveooz(int i, int seenine, int seeninedead, int ooz, int explosion);
void moveooz(DDukeActor* i, int seenine, int seeninedead, int ooz, int explosion);
void lotsofstuff(DDukeActor* s, int n, int spawntype);
bool respawnmarker(int i, int yellow, int green);
bool rat(int i, bool makesound);