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

View file

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

View file

@ -38,12 +38,12 @@ void movemasterswitch(DDukeActor* i, int spectype1, int spectype2);
void movetrash(DDukeActor* i); void movetrash(DDukeActor* i);
void movewaterdrip(DDukeActor* i, int drip); void movewaterdrip(DDukeActor* i, int drip);
void movedoorshock(DDukeActor* i); void movedoorshock(DDukeActor* i);
void movetouchplate(int i, int plate); void movetouchplate(DDukeActor* i, int plate);
void movecanwithsomething(int i); void movecanwithsomething(DDukeActor* i);
void bounce(int i); void bounce(int i);
void movetongue(int i, int tongue, int jaw); 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 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); void lotsofstuff(DDukeActor* s, int n, int spawntype);
bool respawnmarker(int i, int yellow, int green); bool respawnmarker(int i, int yellow, int green);
bool rat(int i, bool makesound); bool rat(int i, bool makesound);