diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 0a489ad27..79cdef3e6 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -1063,6 +1063,238 @@ int movesprite_ex(DDukeActor* actor, const DVector3& change, unsigned int clipty return result.type; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +void move(DDukeActor* actor, int pnum, double pdist) +{ + DAngle goalang, angdif; + double daxvel; + + int a = actor->spr.hitag; + + if (a == -1) a = 0; + + actor->counter++; + + if (a & face_player) + { + if (ps[pnum].newOwner != nullptr) + goalang = (ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); + else goalang = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); + angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; + if (angdif > -DAngle22_5 / 16 && angdif < nullAngle) angdif = nullAngle; + actor->spr.Angles.Yaw += angdif; + } + + if (a & spin) + actor->spr.Angles.Yaw += DAngle45 * BobVal(actor->counter << 3); + + if (a & face_player_slow) + { + if (ps[pnum].newOwner != nullptr) + goalang = (ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); + else goalang = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); + angdif = DAngle22_5 * 0.25 * Sgn(deltaangle(actor->spr.Angles.Yaw, goalang).Degrees()); // this looks very wrong... + actor->spr.Angles.Yaw += angdif; + } + + if (a & antifaceplayerslow) + { + if (ps[pnum].newOwner != nullptr) + goalang = ((ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle() + DAngle180); + else goalang = ((ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle() + DAngle180); + angdif = DAngle22_5 * 0.25 * Sgn(deltaangle(actor->spr.Angles.Yaw, goalang).Degrees()); // this looks very wrong... + actor->spr.Angles.Yaw += angdif; + } + + if ((a & jumptoplayer) == jumptoplayer) + { + if (actor->counter < 16) + actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_jumptoplayer_factor); + } + else if (a & justjump1) + { + if (actor->counter < 8) + actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_justjump1_factor); + } + if (a & justjump2) + { + if (actor->counter < 8) + actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_justjump2_factor); + } + if (a & windang) + { + if (actor->counter < 8) + actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_windang_factor); + } + + + if (a & face_player_smart) + { + DVector2 newpos = ps[pnum].GetActor()->spr.pos.XY() + (ps[pnum].vel.XY() * (4. / 3.)); + goalang = (newpos - actor->spr.pos.XY()).Angle(); + angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; + if (angdif > -DAngle22_5 / 16 && angdif < nullAngle) angdif = nullAngle; + actor->spr.Angles.Yaw += angdif; + } + + if (actor->curMove->name == NAME_None || a == 0) + { + if ((badguy(actor) && actor->spr.extra <= 0) || (actor->opos.X != actor->spr.pos.X) || (actor->opos.Y != actor->spr.pos.Y)) + { + if (!actor->isPlayer()) actor->backupvec2(); + SetActor(actor, actor->spr.pos); + } + if (badguy(actor) && actor->spr.extra <= 0) + { + if (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY) + { + if (actor->sector()->shadedsector == 1) + { + actor->spr.shade += (16 - actor->spr.shade) >> 1; + } + else + { + actor->spr.shade += (actor->sector()->ceilingshade - actor->spr.shade) >> 1; + } + } + else + { + actor->spr.shade += (actor->sector()->floorshade - actor->spr.shade) >> 1; + } + } + return; + } + + if (a & geth) actor->vel.X += (actor->curMove->movex - actor->vel.X) * 0.5; + if (a & getv) actor->vel.Z += (actor->curMove->movez - actor->vel.Z) * 0.5; + + if (a & dodgebullet) + dodge(actor); + + if (!actor->isPlayer()) + alterang(a, actor, pnum); + + if (abs(actor->vel.X) < 6 / 16.) actor->vel.X = 0; + + a = badguy(actor); + + if (actor->vel.X != 0 || actor->vel.Z != 0) + { + if (a && !(actor->flags3 & SFLAG3_NOVERTICALMOVE)) + { + if ((actor->flags2 & SFLAG2_FLOATING) && actor->spr.extra > 0) + { + double fdist = actor->FloatVar(NAME_floating_floordist); + double cdist = actor->FloatVar(NAME_floating_ceilingdist); + double c, f; + calcSlope(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &c, &f); + actor->floorz = f; + actor->ceilingz = c; + + if (actor->spr.pos.Z > f - fdist) + { + actor->spr.pos.Z = f - fdist; + actor->vel.Z = 0; + } + + if (actor->spr.pos.Z < c + cdist) + { + actor->spr.pos.Z = c + cdist; + actor->vel.Z = 0; + } + } + else + { + if (actor->vel.Z > 0 && actor->floorz < actor->spr.pos.Z) + actor->spr.pos.Z = actor->floorz; + if (actor->vel.Z < 0) + { + double c = getceilzofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y); + if (actor->spr.pos.Z < c + 66) + { + actor->spr.pos.Z = c + 66; + actor->vel.Z *= 0.5; + } + } + } + } + + daxvel = actor->vel.X; + angdif = actor->spr.Angles.Yaw; + + if (a && !(actor->flags3 & SFLAG3_MOVE_NOPLAYERINTERACT)) + { + if (pdist < 60 && actor->spr.scale.X > 0.25) + { + + daxvel = -(64 - pdist); + angdif = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); + + if (pdist < 32) + { + ps[pnum].vel.X = 0; + ps[pnum].vel.Y = 0; + } + else + { + ps[pnum].vel.XY() *= gs.playerfriction - 0.125; + } + } + else if (!(actor->flags2 & SFLAG2_FLOATING)) + { + if (actor->curMove->movez == 0) + { + if (actor->opos.Z != actor->spr.pos.Z || (ud.multimode < 2 && ud.player_skill < 2)) + { + if ((actor->counter & 1) || ps[pnum].actorsqu == actor) return; + else daxvel *= 2; + } + else + { + if ((actor->counter & 3) || ps[pnum].actorsqu == actor) return; + else daxvel *= 4; + } + } + } + } + if (actor->sector()->lotag != ST_1_ABOVE_WATER) + { + daxvel *= actor->FloatVar(NAME_landmovefactor); + } + else + { + daxvel *= actor->FloatVar(NAME_watermovefactor); + } + + Collision coll; + actor->movflag = movesprite_ex(actor, DVector3(angdif.ToVector() * daxvel, actor->vel.Z), CLIPMASK0, coll); + } + + if (a) + { + if (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY) + { + if (actor->sector()->shadedsector == 1) + { + actor->spr.shade += (16 - actor->spr.shade) >> 1; + } + else + { + actor->spr.shade += (actor->sector()->ceilingshade - actor->spr.shade) >> 1; + } + } + else actor->spr.shade += (actor->sector()->floorshade - actor->spr.shade) >> 1; + + if (actor->sector()->floortexture == mirrortex) + actor->Destroy(); + } +} + //--------------------------------------------------------------------------- // // Rotating sector diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index bf16230a8..dc03f2120 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -864,180 +864,6 @@ void moveeffectors_d(void) //STATNUM 3 } } -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- - -void move_d(DDukeActor *actor, int playernum, int xvel) -{ - DAngle goalang, angdif; - double daxvel; - - int a = actor->spr.hitag; - - if (a == -1) a = 0; - - actor->counter++; - - if (a & face_player) - { - if (ps[playernum].newOwner != nullptr) - goalang = (ps[playernum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); - else goalang = (ps[playernum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; - if (angdif > -DAngle22_5 / 16 && angdif < nullAngle) angdif = nullAngle; - actor->spr.Angles.Yaw += angdif; - } - - if (a & spin) - actor->spr.Angles.Yaw += DAngle45 * BobVal(actor->counter << 3); - - if (a & face_player_slow) - { - if (ps[playernum].newOwner != nullptr) - goalang = (ps[playernum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); - else goalang = (ps[playernum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - angdif = DAngle22_5 * 0.25 * Sgn(deltaangle(actor->spr.Angles.Yaw, goalang).Degrees()); // this looks very wrong... - actor->spr.Angles.Yaw += angdif; - } - - - if ((a & jumptoplayer) == jumptoplayer) - { - if (actor->counter < 16) - actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * 2; - } - - if (a & face_player_smart) - { - DVector2 newpos = ps[playernum].GetActor()->spr.pos.XY() + (ps[playernum].vel.XY() * (4. / 3.)); - goalang = (newpos - actor->spr.pos.XY()).Angle(); - angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; - if (angdif > -DAngle22_5/16 && angdif < nullAngle) angdif = nullAngle; - actor->spr.Angles.Yaw += angdif; - } - - if (actor->curMove->name == NAME_None || a == 0) - { - if ((badguy(actor) && actor->spr.extra <= 0) || (actor->opos.X != actor->spr.pos.X) || (actor->opos.Y != actor->spr.pos.Y)) - { - if (!actor->isPlayer()) actor->backupvec2(); - SetActor(actor, actor->spr.pos); - } - return; - } - - if (a & geth) actor->vel.X += (actor->curMove->movex - actor->vel.X) * 0.5; - if (a & getv) actor->vel.Z += (actor->curMove->movez - actor->vel.Z) * 0.5; - - if (a & dodgebullet) - dodge(actor); - - if (!actor->isPlayer()) - alterang(a, actor, playernum); - - if (abs(actor->vel.X) < 6 / 16.) actor->vel.X = 0; - - a = badguy(actor); - - if (actor->vel.X != 0 || actor->vel.Z != 0) - { - if (a && !(actor->flags3 & SFLAG3_NOVERTICALMOVE)) - { - if ((actor->flags2 & SFLAG2_FLOATING) && actor->spr.extra > 0) - { - double fdist = actor->FloatVar(NAME_floating_floordist); - double cdist = actor->FloatVar(NAME_floating_ceilingdist); - double c, f; - calcSlope(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &c, &f); - actor->floorz = f; - actor->ceilingz = c; - - if (actor->spr.pos.Z > f - fdist) - { - actor->spr.pos.Z = f - fdist; - actor->vel.Z = 0; - } - - if (actor->spr.pos.Z < c + cdist) - { - actor->spr.pos.Z = c + cdist; - actor->vel.Z = 0; - } - } - else - { - if (actor->vel.Z > 0 && actor->floorz < actor->spr.pos.Z) - actor->spr.pos.Z = actor->floorz; - if (actor->vel.Z < 0) - { - double c = getceilzofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y); - if (actor->spr.pos.Z < c + 66) - { - actor->spr.pos.Z = c + 66; - actor->vel.Z *= 0.5; - } - } - } - } - - daxvel = actor->vel.X; - angdif = actor->spr.Angles.Yaw; - - if (a && !(actor->flags3 & SFLAG3_MOVE_NOPLAYERINTERACT)) - { - if (xvel < 960 && actor->spr.scale.X > 0.25 ) - { - - daxvel = -(1024 - xvel) * maptoworld; - angdif = (ps[playernum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - - if (xvel < 512) - { - ps[playernum].vel.X = 0; - ps[playernum].vel.Y = 0; - } - else - { - ps[playernum].vel.XY() *= gs.playerfriction - 0.125; - } - } - else if (!(actor->flags2 & SFLAG2_FLOATING)) - { - if (actor->curMove->movez == 0) - { - if (actor->opos.Z != actor->spr.pos.Z || (ud.multimode < 2 && ud.player_skill < 2)) - { - if ((actor->counter & 1) || ps[playernum].actorsqu == actor) return; - else daxvel *= 2; - } - else - { - if ((actor->counter & 3) || ps[playernum].actorsqu == actor) return; - else daxvel *= 4; - } - } - } - } - - Collision coll; - actor->movflag = movesprite_ex(actor, DVector3(angdif.ToVector() * daxvel, actor->vel.Z), CLIPMASK0, coll); - } - - if (a) - { - if (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY) - actor->spr.shade += (actor->sector()->ceilingshade - actor->spr.shade) >> 1; - else actor->spr.shade += (actor->sector()->floorshade - actor->spr.shade) >> 1; - - if (actor->sector()->floortexture == mirrortex) - actor->Destroy(); - } -} - - //--------------------------------------------------------------------------- // // diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 282e3e17f..143f7fb71 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1002,233 +1002,6 @@ double adjustfall(DDukeActor *actor, double c) // //--------------------------------------------------------------------------- -void move_r(DDukeActor *actor, int pnum, int xvel) -{ - DAngle goalang, angdif; - double daxvel; - - int a = actor->spr.hitag; - - if (a == -1) a = 0; - - actor->counter++; - - if (a & face_player) - { - if (ps[pnum].newOwner != nullptr) - goalang = (ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); - else goalang = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; - if (angdif > -DAngle22_5 / 16 && angdif < nullAngle) angdif = nullAngle; - actor->spr.Angles.Yaw += angdif; - } - - if (a & spin) - actor->spr.Angles.Yaw += DAngle45 * BobVal(actor->counter << 3); - - if (a & face_player_slow) - { - if (ps[pnum].newOwner != nullptr) - goalang = (ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle(); - else goalang = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - angdif = DAngle22_5 * 0.25 * Sgn(deltaangle(actor->spr.Angles.Yaw, goalang).Degrees()); // this looks very wrong... - actor->spr.Angles.Yaw += angdif; - } - - if (a & antifaceplayerslow) - { - if (ps[pnum].newOwner != nullptr) - goalang = ((ps[pnum].GetActor()->opos.XY() - actor->spr.pos.XY()).Angle() + DAngle180); - else goalang = ((ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle() + DAngle180); - angdif = DAngle22_5 * 0.25 * Sgn(deltaangle(actor->spr.Angles.Yaw, goalang).Degrees()); // this looks very wrong... - actor->spr.Angles.Yaw += angdif; - } - - if ((a & jumptoplayer) == jumptoplayer) - { - if (actor->counter < 16) - actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_jumptoplayer_factor); - } - else if (a & justjump1) - { - if (actor->counter < 8) - actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_justjump1_factor); - } - if (a & justjump2) - { - if (actor->counter < 8) - actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_justjump2_factor); - } - if (a & windang) - { - if (actor->counter < 8) - actor->vel.Z -= BobVal(512 + (actor->counter << 4)) * actor->FloatVar(NAME_windang_factor); - actor->vel.Z -= BobVal(512 + (actor->counter << 4) * 2.667); - } - - - if (a & face_player_smart) - { - DVector2 newpos = ps[pnum].GetActor()->spr.pos.XY() + (ps[pnum].vel.XY() * (4. / 3.)); - goalang = (newpos - actor->spr.pos.XY()).Angle(); - angdif = deltaangle(actor->spr.Angles.Yaw, goalang) * 0.25; - if (angdif > -DAngle22_5 / 16 && angdif < nullAngle) angdif = nullAngle; - actor->spr.Angles.Yaw += angdif; - } - - if (actor->curMove->name == NAME_None || a == 0) - { - if ((badguy(actor) && actor->spr.extra <= 0) || (actor->opos.X != actor->spr.pos.X) || (actor->opos.Y != actor->spr.pos.Y)) - { - if (!actor->isPlayer()) actor->backupvec2(); - SetActor(actor, actor->spr.pos); - } - if (badguy(actor) && actor->spr.extra <= 0) - { - if (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY) - { - if (actor->sector()->shadedsector == 1) - { - actor->spr.shade += (16 - actor->spr.shade) >> 1; - } - else - { - actor->spr.shade += (actor->sector()->ceilingshade - actor->spr.shade) >> 1; - } - } - else - { - actor->spr.shade += (actor->sector()->floorshade - actor->spr.shade) >> 1; - } - } - return; - } - - if (a & geth) actor->vel.X += (actor->curMove->movex - actor->vel.X) * 0.5; - if (a & getv) actor->vel.Z += (actor->curMove->movez - actor->vel.Z) * 0.5; - - if (a & dodgebullet) - dodge(actor); - - if (!actor->isPlayer()) - alterang(a, actor, pnum); - - if (abs(actor->vel.X) < 6 / 16.) actor->vel.X = 0; - - a = badguy(actor); - - if (actor->vel.X != 0 || actor->vel.Z != 0) - { - if (a) - { - if ((actor->flags2 & SFLAG2_FLOATING) && actor->spr.extra > 0) - { - double fdist = actor->FloatVar(NAME_floating_floordist); - double cdist = actor->FloatVar(NAME_floating_ceilingdist); - double c, f; - calcSlope(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &c, &f); - actor->floorz = f; - actor->ceilingz = c; - - if (actor->spr.pos.Z > f - fdist) - { - actor->spr.pos.Z = f - fdist; - actor->vel.Z = 0; - } - - if (actor->spr.pos.Z < c + cdist) - { - actor->spr.pos.Z = c + cdist; - actor->vel.Z = 0; - } - } - else - { - if (actor->vel.Z > 0 && actor->floorz < actor->spr.pos.Z) - actor->spr.pos.Z = actor->floorz; - if (actor->vel.Z < 0) - { - double c = getceilzofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y); - if (actor->spr.pos.Z < c + 66) - { - actor->spr.pos.Z = c + 66; - actor->vel.Z *= 0.5; - } - } - } - } - - daxvel = actor->vel.X; - angdif = actor->spr.Angles.Yaw; - - if (a) - { - if (xvel < 960 && actor->spr.scale.X > 0.25 ) - { - - daxvel = -(1024 - xvel) * maptoworld; - angdif = (ps[pnum].GetActor()->spr.pos.XY() - actor->spr.pos.XY()).Angle(); - - if (xvel < 512) - { - ps[pnum].vel.X = 0; - ps[pnum].vel.Y = 0; - } - else - { - ps[pnum].vel.XY() *= gs.playerfriction - 0.125; - } - } - else if (!(actor->flags2 & SFLAG2_FLOATING)) - { - if (actor->curMove->movez == 0) - { - if (actor->opos.Z != actor->spr.pos.Z || (ud.multimode < 2 && ud.player_skill < 2)) - { - if ((actor->counter & 1) || ps[pnum].actorsqu == actor) return; - else daxvel *= 2; - } - else - { - if ((actor->counter & 3) || ps[pnum].actorsqu == actor) return; - else daxvel *= 4; - } - } - } - } - if (actor->sector()->lotag != ST_1_ABOVE_WATER) - { - daxvel *= actor->FloatVar(NAME_landmovefactor); - } - else - { - daxvel *= actor->FloatVar(NAME_watermovefactor); - } - - Collision coll; - actor->movflag = movesprite_ex(actor, DVector3(angdif.ToVector() * daxvel, actor->vel.Z), CLIPMASK0, coll); - } - - if (a) - { - if (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY) - { - if (actor->sector()->shadedsector == 1) - { - actor->spr.shade += (16 - actor->spr.shade) >> 1; - } - else - { - actor->spr.shade += (actor->sector()->ceilingshade - actor->spr.shade) >> 1; - } - } - else actor->spr.shade += (actor->sector()->floorshade - actor->spr.shade) >> 1; - - if (actor->sector()->floortexture == mirrortex) - actor->Destroy(); - } -} - void fakebubbaspawn(DDukeActor *actor, player_struct* p) { fakebubba_spawn++; diff --git a/source/games/duke/src/dispatch.cpp b/source/games/duke/src/dispatch.cpp index cb51d1dd4..4676f26d7 100644 --- a/source/games/duke/src/dispatch.cpp +++ b/source/games/duke/src/dispatch.cpp @@ -50,8 +50,6 @@ int ifhitbyweapon_r(DDukeActor* sn); int ifhitbyweapon_d(DDukeActor* sn); void fall_d(DDukeActor* i, int g_p); void fall_r(DDukeActor* i, int g_p); -void move_d(DDukeActor* i, int g_p, int g_x); -void move_r(DDukeActor* i, int g_p, int g_x); void incur_damage_d(player_struct* p); void incur_damage_r(player_struct* p); void selectweapon_d(int snum, int j); @@ -91,7 +89,6 @@ void SetDispatcher() addweapon_d, ifhitbyweapon_d, fall_d, - move_d, incur_damage_d, selectweapon_d, @@ -117,7 +114,6 @@ void SetDispatcher() addweapon_r, ifhitbyweapon_r, fall_r, - move_r, incur_damage_r, selectweapon_r, diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index f9bb393dd..d3f08626a 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -83,7 +83,6 @@ struct Dispatcher void (*addweapon)(player_struct *p, int weapon, bool wswitch); int (*ifhitbyweapon)(DDukeActor* sectnum); void (*fall)(DDukeActor* actor, int g_p); - void (*move)(DDukeActor* i, int g_p, int g_x); // player void (*incur_damage)(player_struct* p); diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index b17e67194..759a6383b 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -42,6 +42,7 @@ void RANDOMSCRAP(DDukeActor* i); void detonate(DDukeActor* i, PClassActor* explosion); void hitradius(DDukeActor* i, int r, int hp1, int hp2, int hp3, int hp4); int movesprite_ex(DDukeActor* actor, const DVector3& change, unsigned int cliptype, Collision& result); +void move(DDukeActor* actor, int pnum, double xvel); void lotsofstuff(DDukeActor* s, int n, PClassActor* spawntype); void watersplash2(DDukeActor* i); bool money(DDukeActor* i, int BLOODPOOL); diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index a3dbfe08f..921d6a69e 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -3221,34 +3221,8 @@ void LoadActor(DDukeActor *actor, int p, int x) if (s.killit_flag == 1) { - // if player was set to squish, first stop that.. - if (p >= 0) - { - if (ps[p].actorsqu == actor) - ps[p].actorsqu = nullptr; - } actor->Destroy(); } - else - { - fi.move(actor, p, x); - - if (actor->spr.statnum == STAT_ACTOR) - { - if (badguy(actor)) - { - if (actor->spr.scale.X > 0.9375 ) return; - if (ud.respawn_monsters == 1 && actor->spr.extra <= 0) return; - } - else if (ud.respawn_items == 1 && (actor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) return; - - if (actor->timetosleep > 1) - actor->timetosleep--; - else if (actor->timetosleep == 1) - ChangeActorStat(actor, STAT_ZOMBIEACTOR); - } - } - } //--------------------------------------------------------------------------- @@ -3257,7 +3231,7 @@ void LoadActor(DDukeActor *actor, int p, int x) // //--------------------------------------------------------------------------- -bool execute(DDukeActor *actor,int p,double xx) +bool execute(DDukeActor *actor,int p,double pdist) { auto coninf = actor->conInfo(); if (coninf == nullptr) @@ -3265,7 +3239,7 @@ bool execute(DDukeActor *actor,int p,double xx) ParseState s; s.g_p = p; // Player ID - s.g_x = int(xx / maptoworld); // ?? + s.g_x = int(pdist / maptoworld); // ?? s.g_ac = actor; s.insptr = &ScriptCode[4 + (gs.actorinfo[actor->spr.picnum].scriptaddress)]; auto insptr = coninf? &ScriptCode[4 + coninf->scriptaddress] : nullptr; @@ -3287,7 +3261,7 @@ bool execute(DDukeActor *actor,int p,double xx) } else { - fi.move(actor, p, int(xx / maptoworld)); + move(actor, p, pdist); if (actor->spr.statnum == STAT_ACTOR) {