diff --git a/common/main/automap.h b/common/main/automap.h index 59030a832..23fdd7827 100644 --- a/common/main/automap.h +++ b/common/main/automap.h @@ -60,10 +60,13 @@ window_event_result MarkerInputMessage(int key); constexpr std::integral_constant NUM_MARKERS{}; constexpr std::integral_constant MARKER_MESSAGE_LEN{}; struct marker_message_text_t : ntstring {}; -struct marker_messages_array_t : public array {}; +struct d_marker_state +{ + array message; +}; extern marker_message_text_t Marker_input; -extern marker_messages_array_t MarkerMessage; +extern d_marker_state MarkerState; extern array MarkerObject; extern ubyte DefiningMarkerMessage; } diff --git a/d2x-rebirth/main/escort.cpp b/d2x-rebirth/main/escort.cpp index ace3b4f38..b47851887 100644 --- a/d2x-rebirth/main/escort.cpp +++ b/d2x-rebirth/main/escort.cpp @@ -615,7 +615,7 @@ static imsegidx_t find_exit_segment() } // ----------------------------------------------------------------------------- -static void say_escort_goal(escort_goal_t goal_num) +static void say_escort_goal(const escort_goal_t goal_num) { if (Player_dead_state != player_dead_state::no) return; @@ -676,7 +676,10 @@ static void say_escort_goal(escort_goal_t goal_num) case ESCORT_GOAL_MARKER7: case ESCORT_GOAL_MARKER8: case ESCORT_GOAL_MARKER9: - buddy_message("Finding marker %i: '%.24s'", goal_num-ESCORT_GOAL_MARKER1+1, &MarkerMessage[goal_num-ESCORT_GOAL_MARKER1][0]); + { + const unsigned zero_based_goal_num = goal_num - ESCORT_GOAL_MARKER1; + buddy_message("Finding marker %i: '%.24s'", zero_based_goal_num + 1, &MarkerState.message[zero_based_goal_num][0]); + } return; } buddy_message_str(str); diff --git a/similar/main/automap.cpp b/similar/main/automap.cpp index 9ea96100a..206a32943 100644 --- a/similar/main/automap.cpp +++ b/similar/main/automap.cpp @@ -239,7 +239,6 @@ static void automap_build_edge_list(automap *am, int add_all_edges); namespace dsx { int HighlightMarker=-1; marker_message_text_t Marker_input; -marker_messages_array_t MarkerMessage; static float MarkerScale=2.0; template @@ -249,6 +248,7 @@ static inline constexpr array init_MarkerObject(index_se } array MarkerObject = init_MarkerObject(make_tree_index_sequence()); +d_marker_state MarkerState; } #endif @@ -368,20 +368,18 @@ static void DropMarker(fvmobjptridx &vmobjptridx, fvmsegptridx &vmsegptridx, con MarkerObject[marker_num] = drop_marker_object(plrobj.pos, vmsegptridx(plrobj.segnum), plrobj.orient, marker_num); if (Game_mode & GM_MULTI) - multi_send_drop_marker(Player_num, plrobj.pos, player_marker_num, MarkerMessage[marker_num]); + multi_send_drop_marker(Player_num, plrobj.pos, player_marker_num, MarkerState.message[marker_num]); } void DropBuddyMarker(const vmobjptr_t objp) { int marker_num; - // Find spare marker slot. "if" code below should be an assert, but what if someone changes NUM_MARKERS or MAX_CROP_SINGLE and it never gets hit? static_assert(MAX_DROP_SINGLE + 1 <= NUM_MARKERS - 1, "not enough markers"); marker_num = MAX_DROP_SINGLE+1; - if (marker_num > NUM_MARKERS-1) - marker_num = NUM_MARKERS-1; - snprintf(&MarkerMessage[marker_num][0], MarkerMessage[marker_num].size(), "RIP: %s", static_cast(PlayerCfg.GuidebotName)); + auto &MarkerMessage = MarkerState.message[marker_num]; + snprintf(&MarkerMessage[0], MarkerMessage.size(), "RIP: %s", static_cast(PlayerCfg.GuidebotName)); if (MarkerObject[marker_num] != object_none) obj_delete(vmobjptridx(MarkerObject[marker_num])); @@ -443,8 +441,8 @@ static void ClearMarkers() { int i; + MarkerState.message = {}; for (i=0;i-1 && MarkerMessage[HighlightMarker][0]!=0) + if (HighlightMarker > -1) { - gr_printf(canvas, (SWIDTH/64),(SHEIGHT/18), "Marker %d: %s",HighlightMarker+1,&MarkerMessage[(Player_num*2)+HighlightMarker][0]); + auto &m = MarkerState.message[(Player_num * 2) + HighlightMarker]; + if (m[0]) + { + gr_printf(canvas, (SWIDTH/64), (SHEIGHT/18), "Marker %d: %s", HighlightMarker + 1, &m[0]); + } } #endif @@ -890,7 +892,7 @@ static window_event_result automap_key_command(window *, const d_event &event, a * so that they remove the marker. */ obj_delete(vmobjptridx(exchange(MarkerObject[HighlightMarker], object_none))); - MarkerMessage[HighlightMarker][0]=0; + MarkerState.message[HighlightMarker] = {}; HighlightMarker = -1; } set_screen_mode(SCREEN_GAME); @@ -1541,7 +1543,7 @@ window_event_result MarkerInputMessage(int key) Marker_input[Marker_index] = 0; break; case KEY_ENTER: - MarkerMessage[(Player_num*2)+MarkerBeingDefined] = Marker_input; + MarkerState.message[(Player_num*2)+MarkerBeingDefined] = Marker_input; DropMarker(vmobjptridx, vmsegptridx, get_local_plrobj(), MarkerBeingDefined); LastMarkerDropped = MarkerBeingDefined; /* fallthrough */ diff --git a/similar/main/collide.cpp b/similar/main/collide.cpp index 0d5de9819..f6e4b446c 100644 --- a/similar/main/collide.cpp +++ b/similar/main/collide.cpp @@ -1150,7 +1150,7 @@ static void collide_player_and_marker(const object_base &playerobj, const vmobjp int drawn; const unsigned marker_id = get_marker_id(marker); - auto &msg = MarkerMessage[marker_id]; + auto &msg = MarkerState.message[marker_id]; if (Game_mode & GM_MULTI) { drawn = HUD_init_message(HM_DEFAULT|HM_MAYDUPL, "MARKER %s: %s", static_cast(vcplayerptr(marker_id / 2)->callsign), &msg[0]); diff --git a/similar/main/multi.cpp b/similar/main/multi.cpp index 47524c727..81b36731a 100644 --- a/similar/main/multi.cpp +++ b/similar/main/multi.cpp @@ -2315,7 +2315,7 @@ static void multi_do_drop_marker(object_array &objects, fvmsegptridx &vmsegptrid const unsigned mnum = (pnum * 2) + mesnum; for (i=0;i<40;i++) - MarkerMessage[mnum][i]=buf[15+i]; + MarkerState.message[mnum][i] = buf[15 + i]; auto &mo = MarkerObject[mnum]; if (mo != object_none) @@ -2563,10 +2563,10 @@ void multi_send_markers() objnum_t mo; mo = MarkerObject[(i*2)]; if (mo!=object_none) - multi_send_drop_marker (i, vcobjptr(mo)->pos, 0, MarkerMessage[i*2]); + multi_send_drop_marker(i, vcobjptr(mo)->pos, 0, MarkerState.message[i * 2]); mo = MarkerObject[(i*2)+1]; if (mo!=object_none) - multi_send_drop_marker (i, vcobjptr(mo)->pos, 1, MarkerMessage[(i*2)+1]); + multi_send_drop_marker(i, vcobjptr(mo)->pos, 1, MarkerState.message[(i * 2) + 1]); } } #endif diff --git a/similar/main/state.cpp b/similar/main/state.cpp index 32a5961a2..51fe8a47e 100644 --- a/similar/main/state.cpp +++ b/similar/main/state.cpp @@ -1221,7 +1221,7 @@ int state_save_all_sub(const char *filename, const char *desc) PHYSFS_write(fp, &m, sizeof(m), 1); } PHYSFS_seek(fp, PHYSFS_tell(fp) + (NUM_MARKERS)*(CALLSIGN_LEN+1)); // PHYSFS_write(fp, MarkerOwner, sizeof(MarkerOwner), 1); MarkerOwner is obsolete - range_for (const auto &m, MarkerMessage) + range_for (const auto &m, MarkerState.message) PHYSFS_write(fp, m.data(), m.size(), 1); PHYSFS_write(fp, &Afterburner_charge, sizeof(fix), 1); @@ -1822,7 +1822,7 @@ int state_restore_all_sub(const char *filename, const secret_restore secret) range_for (auto &i, MarkerObject) i = PHYSFSX_readSXE32(fp, swap); PHYSFS_seek(fp, PHYSFS_tell(fp) + (NUM_MARKERS)*(CALLSIGN_LEN+1)); // PHYSFS_read(fp, MarkerOwner, sizeof(MarkerOwner), 1); // skip obsolete MarkerOwner - range_for (auto &i, MarkerMessage) + range_for (auto &i, MarkerState.message) { array a; PHYSFS_read(fp, a.data(), a.size(), 1);