Pass bare object &
to thief stealing routines
Use `object &` instead of `vmobjptr_t`. This should generate equivalent code, but produce smaller debug information and may require less inlining by the compiler.
This commit is contained in:
parent
1c2e1c6946
commit
a610a7b32d
|
@ -191,7 +191,7 @@ void attempt_to_resume_path(vmobjptridx_t objp);
|
|||
// When a robot and a player collide, some robots attack!
|
||||
void do_ai_robot_hit_attack(vmobjptridx_t robot, vmobjptridx_t player, const vms_vector &collision_point);
|
||||
int ai_door_is_openable(
|
||||
object &,
|
||||
const object &,
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
player_flags,
|
||||
#endif
|
||||
|
@ -252,11 +252,11 @@ imobjptridx_t boss_spew_robot(const object_base &objp, const vms_vector &pos);
|
|||
void init_ai_frame(player_flags, const control_info &Controls);
|
||||
|
||||
[[nodiscard]]
|
||||
std::size_t create_bfs_list(vmobjptr_t robot, vcsegidx_t start_seg, player_flags, segnum_t *bfs_list, std::size_t max_segs);
|
||||
std::size_t create_bfs_list(const object &robot, vcsegidx_t start_seg, player_flags, segnum_t *bfs_list, std::size_t max_segs);
|
||||
|
||||
template <std::size_t N>
|
||||
[[nodiscard]]
|
||||
std::size_t create_bfs_list(const vmobjptr_t &robot, const vcsegidx_t &start_seg, const player_flags powerup_flags, std::array<segnum_t, N> &bfs_list)
|
||||
std::size_t create_bfs_list(const object &robot, const vcsegidx_t &start_seg, const player_flags powerup_flags, std::array<segnum_t, N> &bfs_list)
|
||||
{
|
||||
return create_bfs_list(robot, start_seg, powerup_flags, bfs_list.data(), N);
|
||||
}
|
||||
|
|
|
@ -205,7 +205,7 @@ int pick_up_vulcan_ammo(player_info &player_info, uint_fast32_t ammo_count, bool
|
|||
imobjptridx_t spit_powerup(const d_vclip_array &Vclip, const object_base &spitter, unsigned id, unsigned seed);
|
||||
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
int attempt_to_steal_item(vmobjptridx_t objp, vmobjptr_t playerobjp);
|
||||
int attempt_to_steal_item(vmobjptridx_t objp, object &playerobjp);
|
||||
|
||||
#define SMEGA_ID 40
|
||||
|
||||
|
|
|
@ -193,10 +193,12 @@ void init_buddy_for_level(void)
|
|||
BuddyState.Buddy_objnum = find_escort(vmobjptridx, Robot_info);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// See if segment from curseg through sidenum is reachable.
|
||||
// Return true if it is reachable, else return false.
|
||||
static int segment_is_reachable(const vmobjptr_t robot, const shared_segment &segp, const sidenum_t sidenum, const player_flags powerup_flags)
|
||||
static int segment_is_reachable(const object &robot, const shared_segment &segp, const sidenum_t sidenum, const player_flags powerup_flags)
|
||||
{
|
||||
const auto wall_num = segp.sides[sidenum].wall_num;
|
||||
|
||||
|
@ -234,6 +236,7 @@ static int segment_is_reachable(const vmobjptr_t robot, const shared_segment &se
|
|||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Create a breadth-first list of segments reachable from current segment.
|
||||
|
@ -244,7 +247,7 @@ static int segment_is_reachable(const vmobjptr_t robot, const shared_segment &se
|
|||
// Output:
|
||||
// bfs_list: array of shorts, each reachable segment. Includes start segment.
|
||||
// length: number of elements in bfs_list
|
||||
std::size_t create_bfs_list(const vmobjptr_t robot, const vcsegidx_t start_seg, const player_flags powerup_flags, segnum_t *const bfs_list, std::size_t max_segs)
|
||||
std::size_t create_bfs_list(const object &robot, const vcsegidx_t start_seg, const player_flags powerup_flags, segnum_t *const bfs_list, std::size_t max_segs)
|
||||
{
|
||||
std::size_t head = 0, tail = 0;
|
||||
visited_segment_bitarray_t visited;
|
||||
|
@ -270,6 +273,8 @@ std::size_t create_bfs_list(const vmobjptr_t robot, const vcsegidx_t start_seg,
|
|||
return head;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Return true if ok for buddy to talk, else return false.
|
||||
// Buddy is allowed to talk if the segment he is in does not contain a blastable wall that has not been blasted
|
||||
|
@ -341,6 +346,8 @@ static void record_escort_goal_accomplished()
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
void detect_escort_goal_fuelcen_accomplished()
|
||||
{
|
||||
|
@ -414,6 +421,8 @@ void change_guidebot_name()
|
|||
(void)menu;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
static uint8_t show_buddy_message()
|
||||
{
|
||||
|
@ -464,6 +473,8 @@ static void buddy_message_ignore_time(const char *const fmt, ...)
|
|||
va_end(args);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void (buddy_message)(const char * format, ... )
|
||||
{
|
||||
if (!show_buddy_message())
|
||||
|
@ -483,6 +494,8 @@ void buddy_message_str(const char *str)
|
|||
buddy_message_force_str(str);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
static void thief_message_str(const char * str) __attribute_nonnull();
|
||||
static void thief_message_str(const char * str)
|
||||
|
@ -519,6 +532,8 @@ static int marker_exists_in_mine(const game_marker_index id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
void set_escort_special_goal(d_unique_buddy_state &BuddyState, const int raw_special_key)
|
||||
{
|
||||
|
@ -1561,12 +1576,14 @@ void do_thief_frame(const vmobjptridx_t objp, const fix dist_to_player, const pl
|
|||
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Return true if this item (whose presence is indicated by Players[player_num].flags) gets stolen.
|
||||
static int maybe_steal_flag_item(const vmobjptr_t playerobjp, const PLAYER_FLAG flagval)
|
||||
static int maybe_steal_flag_item(object &playerobj, const PLAYER_FLAG flagval)
|
||||
{
|
||||
auto &ThiefUniqueState = LevelUniqueObjectState.ThiefState;
|
||||
auto &plr_flags = playerobjp->ctype.player_info.powerup_flags;
|
||||
auto &plr_flags = playerobj.ctype.player_info.powerup_flags;
|
||||
if (plr_flags & flagval)
|
||||
{
|
||||
if (d_rand() < THIEF_PROBABILITY) {
|
||||
|
@ -1617,10 +1634,10 @@ static int maybe_steal_flag_item(const vmobjptr_t playerobjp, const PLAYER_FLAG
|
|||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
static int maybe_steal_secondary_weapon(const vmobjptr_t playerobjp, const secondary_weapon_index_t weapon_num)
|
||||
static int maybe_steal_secondary_weapon(object &playerobj, const secondary_weapon_index_t weapon_num)
|
||||
{
|
||||
auto &ThiefUniqueState = LevelUniqueObjectState.ThiefState;
|
||||
auto &player_info = playerobjp->ctype.player_info;
|
||||
auto &player_info = playerobj.ctype.player_info;
|
||||
if (auto &secondary_ammo = player_info.secondary_ammo[weapon_num])
|
||||
if (d_rand() < THIEF_PROBABILITY) {
|
||||
if (weapon_index_is_player_bomb(weapon_num))
|
||||
|
@ -1643,10 +1660,10 @@ static int maybe_steal_secondary_weapon(const vmobjptr_t playerobjp, const secon
|
|||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
static int maybe_steal_primary_weapon(const vmobjptr_t playerobjp, const primary_weapon_index_t weapon_num)
|
||||
static int maybe_steal_primary_weapon(object &playerobj, const primary_weapon_index_t weapon_num)
|
||||
{
|
||||
auto &ThiefUniqueState = LevelUniqueObjectState.ThiefState;
|
||||
auto &player_info = playerobjp->ctype.player_info;
|
||||
auto &player_info = playerobj.ctype.player_info;
|
||||
bool is_energy_weapon = true;
|
||||
switch (static_cast<primary_weapon_index_t>(weapon_num))
|
||||
{
|
||||
|
@ -1707,17 +1724,14 @@ static int maybe_steal_primary_weapon(const vmobjptr_t playerobjp, const primary
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Called for a thief-type robot.
|
||||
// If a item successfully stolen, returns true, else returns false.
|
||||
// If a wapon successfully stolen, do everything, removing it from player,
|
||||
// updating Stolen_items information, deselecting, etc.
|
||||
static int attempt_to_steal_item_3(const vmobjptr_t objp, const vmobjptr_t player_num)
|
||||
static int attempt_to_steal_item_3(object &thief, object &player_num)
|
||||
{
|
||||
ai_local *ailp = &objp->ctype.ai_info.ail;
|
||||
if (ailp->mode != ai_mode::AIM_THIEF_ATTACK)
|
||||
if (thief.ctype.ai_info.ail.mode != ai_mode::AIM_THIEF_ATTACK)
|
||||
return 0;
|
||||
|
||||
// First, try to steal equipped items.
|
||||
|
@ -1726,7 +1740,7 @@ static int attempt_to_steal_item_3(const vmobjptr_t objp, const vmobjptr_t playe
|
|||
return r;
|
||||
|
||||
// If primary weapon = laser, first try to rip away those nasty quad lasers!
|
||||
const auto Primary_weapon = player_num->ctype.player_info.Primary_weapon;
|
||||
const auto Primary_weapon = player_num.ctype.player_info.Primary_weapon;
|
||||
if (Primary_weapon == primary_weapon_index_t::LASER_INDEX)
|
||||
if (auto r = maybe_steal_flag_item(player_num, PLAYER_FLAGS_QUAD_LASERS))
|
||||
return r;
|
||||
|
@ -1739,7 +1753,7 @@ static int attempt_to_steal_item_3(const vmobjptr_t objp, const vmobjptr_t playe
|
|||
return r;
|
||||
}
|
||||
|
||||
if (auto r = maybe_steal_secondary_weapon(player_num, player_num->ctype.player_info.Secondary_weapon))
|
||||
if (auto r = maybe_steal_secondary_weapon(player_num, player_num.ctype.player_info.Secondary_weapon))
|
||||
return r;
|
||||
|
||||
// See what the player has and try to snag something.
|
||||
|
@ -1772,10 +1786,10 @@ static int attempt_to_steal_item_3(const vmobjptr_t objp, const vmobjptr_t playe
|
|||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
static int attempt_to_steal_item_2(const vmobjptr_t objp, const vmobjptr_t player_num)
|
||||
static int attempt_to_steal_item_2(object &thief, object &player_num)
|
||||
{
|
||||
auto &ThiefUniqueState = LevelUniqueObjectState.ThiefState;
|
||||
const auto rval = attempt_to_steal_item_3(objp, player_num);
|
||||
const auto rval = attempt_to_steal_item_3(thief, player_num);
|
||||
if (rval) {
|
||||
digi_play_sample_once(SOUND_WEAPON_STOLEN, F1_0);
|
||||
auto i = ThiefUniqueState.Stolen_item_index;
|
||||
|
@ -1789,12 +1803,14 @@ static int attempt_to_steal_item_2(const vmobjptr_t objp, const vmobjptr_t playe
|
|||
return rval;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Called for a thief-type robot.
|
||||
// If a item successfully stolen, returns true, else returns false.
|
||||
// If a wapon successfully stolen, do everything, removing it from player,
|
||||
// updating Stolen_items information, deselecting, etc.
|
||||
int attempt_to_steal_item(const vmobjptridx_t objp, const vmobjptr_t player_num)
|
||||
int attempt_to_steal_item(const vmobjptridx_t objp, object &player_num)
|
||||
{
|
||||
int rval = 0;
|
||||
|
||||
|
|
|
@ -1860,7 +1860,7 @@ void move_towards_segment_center(const d_level_shared_segment_state &LevelShared
|
|||
// Brains, avoid robots, companions can open doors.
|
||||
// objp == NULL means treat as buddy.
|
||||
int ai_door_is_openable(
|
||||
object &obj,
|
||||
const object &obj,
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
const player_flags powerup_flags,
|
||||
#endif
|
||||
|
@ -3056,7 +3056,7 @@ namespace {
|
|||
// ----------------------------------------------------------------------------
|
||||
// Make a robot near the player snipe.
|
||||
#define MNRS_SEG_MAX 70
|
||||
static void make_nearby_robot_snipe(fvmsegptr &vmsegptr, const vmobjptr_t robot, const player_flags powerup_flags)
|
||||
static void make_nearby_robot_snipe(fvmsegptr &vmsegptr, const object &robot, const player_flags powerup_flags)
|
||||
{
|
||||
auto &Objects = LevelUniqueObjectState.Objects;
|
||||
auto &vmobjptridx = Objects.vmptridx;
|
||||
|
|
Loading…
Reference in a new issue