diff --git a/common/main/ai.h b/common/main/ai.h index fd6c81acf..bd29430ff 100644 --- a/common/main/ai.h +++ b/common/main/ai.h @@ -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 [[nodiscard]] -std::size_t create_bfs_list(const vmobjptr_t &robot, const vcsegidx_t &start_seg, const player_flags powerup_flags, std::array &bfs_list) +std::size_t create_bfs_list(const object &robot, const vcsegidx_t &start_seg, const player_flags powerup_flags, std::array &bfs_list) { return create_bfs_list(robot, start_seg, powerup_flags, bfs_list.data(), N); } diff --git a/common/main/fwd-weapon.h b/common/main/fwd-weapon.h index 8174c6c08..7278f1a55 100644 --- a/common/main/fwd-weapon.h +++ b/common/main/fwd-weapon.h @@ -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 diff --git a/d2x-rebirth/main/escort.cpp b/d2x-rebirth/main/escort.cpp index 69254ed4e..e6a62e60c 100644 --- a/d2x-rebirth/main/escort.cpp +++ b/d2x-rebirth/main/escort.cpp @@ -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(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; diff --git a/similar/main/ai.cpp b/similar/main/ai.cpp index 3abb18558..26a431c58 100644 --- a/similar/main/ai.cpp +++ b/similar/main/ai.cpp @@ -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;