diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 66e7ff329d6..13428c7574a 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1824,7 +1824,7 @@ void movetransports_d(void) } else if (!(sectlotag == 1 && ps[p].on_ground == 1)) break; - if (onfloorz == 0 && abs(act->int_pos().Z - ps[p].player_int_pos().Z) < 6144) + if (onfloorz == 0 && abs(act->spr.pos.Z - ps[p].pos.Z) < 24) if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP))) || (ps[p].jetpack_on && PlayerInput(p, SB_CROUCH))) { @@ -1848,7 +1848,7 @@ void movetransports_d(void) int k = 0; - if (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground && ps[p].player_int_pos().Z > (sectp->int_floorz() - (16 << 8)) && (PlayerInput(p, SB_CROUCH) || ps[p].vel.Z > 2048)) + if (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground && ps[p].pos.Z > (sectp->floorz - 16) && (PlayerInput(p, SB_CROUCH) || ps[p].vel.Z > 2048)) // if( onfloorz && sectlotag == 1 && ps[p].pos.z > (sectp->floorz-(6<<8)) ) { k = 1; @@ -1866,7 +1866,7 @@ void movetransports_d(void) } - if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8))) + if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].pos.Z < (sectp->ceilingz + 6)) { k = 1; // if( act2->spr.extra <= 0) break; @@ -2126,7 +2126,7 @@ static void greenslime(DDukeActor *actor) } else if (x < 1024 && ps[p].quick_kick == 0) { - j = getincangle(ps[p].angle.ang.asbuild(), getangle(actor->int_pos().X - ps[p].player_int_pos().X, actor->int_pos().Y - ps[p].player_int_pos().Y)); + j = getincangle(ps[p].angle.ang.asbuild(), getangle(actor->spr.pos.XY() - ps[p].pos.XY())); if (j > -128 && j < 128) ps[p].quick_kick = 14; } @@ -2174,7 +2174,7 @@ static void greenslime(DDukeActor *actor) return; } - actor->set_int_z(ps[p].player_int_pos().Z + ps[p].pyoff - actor->temp_data[2] + (8 << 8) - (ps[p].horizon.horiz.asq16() >> 12)); + actor->spr.pos.Z = ps[p].pos.Z + 8 + (ps[p].pyoff - actor->temp_data[2] - (ps[p].horizon.horiz.asq16() >> 12)) * zinttoworld; if (actor->temp_data[2] > 512) actor->temp_data[2] -= 128; @@ -2188,7 +2188,7 @@ static void greenslime(DDukeActor *actor) ps[p].restorexyz(); ps[p].angle.restore(); - updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &ps[p].cursector); + updatesector(ps[p].pos, &ps[p].cursector); DukeStatIterator it(STAT_ACTOR); while (auto ac = it.Next()) @@ -2223,7 +2223,8 @@ static void greenslime(DDukeActor *actor) actor->spr.xrepeat = 20 + bsin(actor->temp_data[1], -13); actor->spr.yrepeat = 15 + bsin(actor->temp_data[1], -13); - actor->set_int_xy(ps[p].player_int_pos().X + ps[p].angle.ang.bcos(-7), ps[p].player_int_pos().Y + ps[p].angle.ang.bsin(-7)); + actor->spr.pos.X = ps[p].pos.X + ps[p].angle.ang.fcos() * 8; + actor->spr.pos.Y = ps[p].pos.Y + ps[p].angle.ang.fsin() * 8; return; } @@ -2382,7 +2383,7 @@ static void greenslime(DDukeActor *actor) actor->spr.xvel = 64 - bcos(actor->temp_data[1], -9); actor->spr.ang += getincangle(actor->spr.ang, - getangle(ps[p].player_int_pos().X - actor->int_pos().X, ps[p].player_int_pos().Y - actor->int_pos().Y)) >> 3; + getangle(ps[p].pos.XY() - actor->spr.pos.XY())) >> 3; // TJR } @@ -2711,7 +2712,7 @@ static void heavyhbomb(DDukeActor *actor) } } else if (actor->spr.picnum == HEAVYHBOMB && x < 788 && actor->temp_data[0] > 7 && actor->spr.xvel == 0) - if (cansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - (8 << 8), actor->sector(), ps[p].player_int_pos().X, ps[p].player_int_pos().Y, ps[p].player_int_pos().Z, ps[p].cursector)) + if (cansee(actor->spr.pos.plusZ(-8), actor->sector(), ps[p].pos, ps[p].cursector)) if (ps[p].ammo_amount[HANDBOMB_WEAPON] < gs.max_ammo_amount[HANDBOMB_WEAPON]) { if (ud.coop >= 1 && Owner == actor) @@ -2871,7 +2872,7 @@ void moveactors_d(void) continue; case RECON: - recon(act, EXPLOSION2, FIRELASER, RECO_ATTACK, RECO_PAIN, RECO_ROAM, 10, [](DDukeActor* i)->int { return PIGCOP; }); + recon(act, EXPLOSION2, FIRELASER, RECO_ATTACK, RECO_PAIN, RECO_ROAM, 4, [](DDukeActor* i)->int { return PIGCOP; }); continue; case OOZ: @@ -3257,7 +3258,7 @@ static void handle_se28(DDukeActor* actor) } else if (actor->temp_data[2] > (actor->temp_data[1] >> 3) && actor->temp_data[2] < (actor->temp_data[1] >> 2)) { - int j = !!cansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), ps[screenpeek].player_int_pos().X, ps[screenpeek].player_int_pos().Y, ps[screenpeek].player_int_pos().Z, ps[screenpeek].cursector); + int j = !!cansee(actor->spr.pos, actor->sector(), ps[screenpeek].pos, ps[screenpeek].cursector); if (rnd(192) && (actor->temp_data[2] & 1)) { @@ -3508,8 +3509,8 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (a & face_player) { if (ps[playernum].newOwner != nullptr) - goalang = getangle(ps[playernum].player_int_opos().X - actor->int_pos().X, ps[playernum].player_int_opos().Y - actor->int_pos().Y); - else goalang = getangle(ps[playernum].player_int_pos().X - actor->int_pos().X, ps[playernum].player_int_pos().Y - actor->int_pos().Y); + goalang = getangle(ps[playernum].opos.XY() - actor->spr.pos.XY()); + else goalang = getangle(ps[playernum].pos.XY() - actor->spr.pos.XY()); angdif = getincangle(actor->spr.ang, goalang) >> 2; if (angdif > -8 && angdif < 0) angdif = 0; actor->spr.ang += angdif; @@ -3521,8 +3522,8 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (a & face_player_slow) { if (ps[playernum].newOwner != nullptr) - goalang = getangle(ps[playernum].player_int_opos().X - actor->int_pos().X, ps[playernum].player_int_opos().Y - actor->int_pos().Y); - else goalang = getangle(ps[playernum].player_int_pos().X - actor->int_pos().X, ps[playernum].player_int_pos().Y - actor->int_pos().Y); + goalang = getangle(ps[playernum].opos.XY() - actor->spr.pos.XY()); + else goalang = getangle(ps[playernum].pos.XY() - actor->spr.pos.XY()); angdif = Sgn(getincangle(actor->spr.ang, goalang)) << 5; if (angdif > -32 && angdif < 0) { @@ -3541,11 +3542,9 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (a & face_player_smart) { - int newx, newy; - - newx = ps[playernum].player_int_pos().X + (ps[playernum].vel.X / 768); - newy = ps[playernum].player_int_pos().Y + (ps[playernum].vel.Y / 768); - goalang = getangle(newx - actor->int_pos().X, newy - actor->int_pos().Y); + double newx = ps[playernum].pos.X + (ps[playernum].vel.X / 768) * inttoworld; + double newy = ps[playernum].pos.Y + (ps[playernum].vel.Y / 768) * inttoworld; + goalang = getangle(newx - actor->spr.pos.X, newy - actor->spr.pos.Y); angdif = getincangle(actor->spr.ang, goalang) >> 2; if (angdif > -8 && angdif < 0) angdif = 0; actor->spr.ang += angdif; @@ -3650,7 +3649,7 @@ void move_d(DDukeActor *actor, int playernum, int xvel) { daxvel = -(1024 - xvel); - angdif = getangle(ps[playernum].player_int_pos().X - actor->int_pos().X, ps[playernum].player_int_pos().Y - actor->int_pos().Y); + angdif = getangle(ps[playernum].pos.XY() - actor->spr.pos.XY()); if (xvel < 512) {