Skip to content

Commit 772c639

Browse files
committed
Updated online_initialize
Updated `c_gui_roster_data::get_integer_value` Updated `c_gui_roster_data::get_text_value` Updated `c_gui_roster_list_widget::update` Added static asserts for `c_network_session_membership` member offsets
1 parent 4847136 commit 772c639

File tree

5 files changed

+62
-33
lines changed

5 files changed

+62
-33
lines changed

game/source/interface/c_controller.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ void c_controller_interface::update_controller_properties()
181181

182182
e_controller_index controller_index = get_controller_index();
183183
bool is_signed_in = online_local_user_is_signed_in(controller_index);
184-
bool has_gamepad = true;// input_has_gamepad(controller_index);
184+
bool has_gamepad = input_has_gamepad(controller_index);
185185
bool attached = is_attached();
186186
bool is_user_signed_in = false;
187187

game/source/interface/gui_roster_data.cpp

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ bool __thiscall c_gui_roster_data::_get_integer_value(long element_handle, long
5252
case STRING_ID(gui, base_color):
5353
case STRING_ID(gui, base_color_hilite):
5454
{
55-
if (player_data)
56-
*value = player_data->host.armor.loadouts[player_data->host.armor.loadout_index].colors[_color_type_primary].value;
55+
if (player_row->player_row_type == _player_row_type_player)
56+
{
57+
if (player_data)
58+
*value = player_data->host.armor.loadouts[player_data->host.armor.loadout_index].colors[_color_type_primary].value;
59+
}
5760

5861
return true;
5962
}
@@ -108,34 +111,40 @@ bool __thiscall c_gui_roster_data::_get_integer_value(long element_handle, long
108111
break;
109112
case STRING_ID(gui, experience):
110113
{
111-
*value = (element_handle % 4) + 1;
112-
113-
// $TODO: pull this from an api?
114-
if (player_data && player_data->host.weapon.loadouts[0].bungienet_user.test(_bungienet_user_bungie))
115-
*value = 42;
114+
if (player_row->player_row_type == _player_row_type_player)
115+
{
116+
*value = (element_handle % 4) + 1;
116117

118+
// $TODO: pull this from an api?
119+
if (player_data && player_data->host.weapon.loadouts[0].bungienet_user.test(_bungienet_user_bungie))
120+
*value = 42;
121+
}
117122
return true;
118123
}
119124
break;
120125
case STRING_ID(gui, skill_level):
121126
{
122-
*value = (element_handle % 4) + 1;
123-
124-
// $TODO: pull this from an api?
125-
if (player_data && player_data->host.weapon.loadouts[0].bungienet_user.test(_bungienet_user_bungie))
126-
*value = 50;
127+
if (player_row->player_row_type == _player_row_type_player)
128+
{
129+
*value = (element_handle % 4) + 1;
127130

131+
// $TODO: pull this from an api?
132+
if (player_data && player_data->host.weapon.loadouts[0].bungienet_user.test(_bungienet_user_bungie))
133+
*value = 50;
134+
}
128135
return true;
129136
}
130137
break;
131138
case STRING_ID(gui, bungienet_user):
132139
{
133-
// Look At Me. I'm The Bungie Now.
134-
*value |= FLAG(_bungienet_user_default);
135-
136-
if (player_data)
137-
*value = player_data->host.weapon.loadouts[0].bungienet_user;
140+
if (player_row->player_row_type == _player_row_type_player)
141+
{
142+
// Look At Me. I'm The Bungie Now.
143+
*value |= FLAG(_bungienet_user_default);
138144

145+
if (player_data)
146+
*value = player_data->host.weapon.loadouts[0].bungienet_user;
147+
}
139148
return true;
140149
}
141150
break;
@@ -166,35 +175,35 @@ bool __thiscall c_gui_roster_data::_get_text_value(long element_handle, long val
166175
if (player_row->player_row_type == _player_row_type_player)
167176
{
168177
value->set(player_row->player_configuration.host.name.get_string());
169-
return true;
170178
}
179+
return true;
171180
}
172181
break;
173182
case STRING_ID(global, press_a_to_join):
174183
{
175184
if (player_row->player_row_type == _player_row_type_press_a_to_join)
176185
{
177186
user_interface_global_string_get(STRING_ID(global, press_a_to_join), value);
178-
return true;
179187
}
188+
return true;
180189
}
181190
break;
182191
case STRING_ID(gui, looking_for_player):
183192
{
184193
if (player_row->player_row_type == _player_row_type_searching)
185194
{
186195
user_interface_global_string_get(STRING_ID(gui, looking_for_player), value);
187-
return true;
188196
}
197+
return true;
189198
}
190199
break;
191200
case STRING_ID(gui, player_found):
192201
{
193202
if (player_row->player_row_type == _player_row_type_found)
194203
{
195204
user_interface_global_string_get(STRING_ID(gui, player_found), value);
196-
return true;
197205
}
206+
return true;
198207
}
199208
break;
200209
case STRING_ID(gui, service_tag):
@@ -206,8 +215,8 @@ bool __thiscall c_gui_roster_data::_get_text_value(long element_handle, long val
206215
c_static_wchar_string<256> service_tag_text;
207216
service_tag_text.set(player_row->player_configuration.host.appearance.service_tag.get_string());
208217
value->print(L"%s - %s", player_model_text.get_string(), service_tag_text.get_string());
209-
return true;
210218
}
219+
return true;
211220
}
212221
break;
213222
}

game/source/interface/gui_roster_list_widget.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ void __thiscall c_gui_roster_list_widget::update(dword current_milliseconds)
100100
// $TODO: figure out why this is necessary
101101
&& service_tag_text_widget
102102

103+
&& data->get_text_value(element_handle, STRING_ID(gui, player_found), &player_found)
104+
&& data->get_text_value(element_handle, STRING_ID(gui, looking_for_player), &looking_for_player)
105+
&& data->get_text_value(element_handle, STRING_ID(global, press_a_to_join), &press_a_to_join)
103106
&& data->get_text_value(element_handle, STRING_ID(gui, service_tag), &service_tag)
104107
&& data->get_integer_value(element_handle, STRING_ID(gui, player_index), &session_player_index)
105108
&& data->get_integer_value(element_handle, STRING_ID(gui, player_row_type), &player_row_type_index)
@@ -137,18 +140,18 @@ void __thiscall c_gui_roster_list_widget::update(dword current_milliseconds)
137140
list_item_widget->set_enabled(row_is_player);
138141

139142
player_found_text_widget->set_text(player_found.get_string());
140-
player_found_bitmap_widget->set_visible(row_is_found);
141143
player_found_text_widget->set_visible(row_is_found);
144+
player_found_bitmap_widget->set_visible(row_is_found);
142145

143146
looking_for_player_text_widget->set_text(looking_for_player.get_string());
147+
looking_for_player_text_widget->set_visible(row_is_searching);
144148
looking_for_player_bitmap_widget->set_visible(row_is_searching);
145149
looking_for_player2_bitmap_widget->set_visible(row_is_searching);
146150
looking_for_player3_bitmap_widget->set_visible(row_is_searching);
147-
looking_for_player_text_widget->set_visible(row_is_searching);
148151

149152
press_a_to_join_text_widget->set_text(press_a_to_join.get_string());
150-
press_a_to_join_bitmap_widget->set_visible(row_is_press_a_to_join);
151153
press_a_to_join_text_widget->set_visible(row_is_press_a_to_join);
154+
press_a_to_join_bitmap_widget->set_visible(row_is_press_a_to_join);
152155

153156
bool special_status_party_up = IN_RANGE_INCLUSIVE(special_status_value, c_gui_roster_data::_special_status_party_up_undecided_leader, c_gui_roster_data::_special_status_party_up_chosen_member);
154157
check_bitmap_widget->set_visible(special_status_party_up);
@@ -272,6 +275,9 @@ void __thiscall c_gui_roster_list_widget::update(dword current_milliseconds)
272275
name_text_widget->get_text_internal()->set_font(_body_text_font);
273276
name_hilite_text_widget->get_text_internal()->set_font(_body_text_font);
274277
service_tag_text_widget->get_text_internal()->set_font(_body_text_font);
278+
player_found_text_widget->get_text_internal()->set_font(_body_text_font);
279+
looking_for_player_text_widget->get_text_internal()->set_font(_body_text_font);
280+
press_a_to_join_text_widget->get_text_internal()->set_font(_body_text_font);
275281

276282
if (!team_change_active)
277283
data->get_text_value(element_handle, STRING_ID(global, player_name), &name);

game/source/networking/online/online.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,13 @@ void __cdecl online_initialize()
237237
if (!user.player_identifier)
238238
user.player_identifier = 3LL;
239239

240-
user.is_signed_in = controller_index < 1;
241-
user.is_silver_or_gold_xbox_live = false;
242-
user.is_online_enabled = false;
240+
user.is_signed_in = true;// controller_index < 1;
241+
user.is_silver_or_gold_xbox_live = true;
242+
user.is_online_enabled = true;
243243
user.is_free_live_gold = false;
244244
user.is_user_created_content_allowed = true;
245245
user.is_friend_created_content_allowed = true;
246-
user.guest_number = NONE;
246+
user.guest_number = controller_index < 1 ? NONE : controller_index - 1;
247247
user.local_xuid = user_id;
248248
user.online_xuid = xuid_make_online(user_id);
249249
user.online_xuid_string = NULL;

game/source/networking/session/network_session_membership.hpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,9 @@ struct c_network_session_membership
186186
s_network_session_shared_membership m_shared_network_membership;
187187
c_static_array<s_network_session_shared_membership, k_network_maximum_machines_per_session> m_transmitted_shared_network_membership;
188188
c_static_array<dword, k_network_maximum_machines_per_session> m_baseline_checksum;
189-
bool __unknown1A3D1C;
190-
bool __unknown1A3D1D;
191-
bool __unknown1A3D1E;
189+
bool __unknown1A3D1C; // m_has_received_a_membership_update?
190+
bool __unknown1A3D1D; // m_completed_first_player_update?
191+
bool __unknown1A3D1E; // m_needs_player_update?
192192
bool __unknown1A3D1F;
193193
long m_local_peer_index;
194194
long m_local_membership_update_number;
@@ -198,4 +198,18 @@ struct c_network_session_membership
198198
long m_add_queue_first_free_slot;
199199
};
200200
static_assert(sizeof(c_network_session_membership) == 0x1A3F20);
201+
static_assert(0x00000000 == OFFSETOF(c_network_session_membership, m_session));
202+
static_assert(0x00000008 == OFFSETOF(c_network_session_membership, m_shared_network_membership));
203+
static_assert(0x00017530 == OFFSETOF(c_network_session_membership, m_transmitted_shared_network_membership));
204+
static_assert(0x001A3CD8 == OFFSETOF(c_network_session_membership, m_baseline_checksum));
205+
static_assert(0x001A3D1C == OFFSETOF(c_network_session_membership, __unknown1A3D1C));
206+
static_assert(0x001A3D1D == OFFSETOF(c_network_session_membership, __unknown1A3D1D));
207+
static_assert(0x001A3D1E == OFFSETOF(c_network_session_membership, __unknown1A3D1E));
208+
static_assert(0x001A3D1F == OFFSETOF(c_network_session_membership, __unknown1A3D1F));
209+
static_assert(0x001A3D20 == OFFSETOF(c_network_session_membership, m_local_peer_index));
210+
static_assert(0x001A3D24 == OFFSETOF(c_network_session_membership, m_local_membership_update_number));
211+
static_assert(0x001A3D28 == OFFSETOF(c_network_session_membership, m_local_peer_state));
212+
static_assert(0x001A3DF4 == OFFSETOF(c_network_session_membership, m_player_add_queue));
213+
static_assert(0x001A3F14 == OFFSETOF(c_network_session_membership, m_add_queue_first_used_slot));
214+
static_assert(0x001A3F18 == OFFSETOF(c_network_session_membership, m_add_queue_first_free_slot));
201215

0 commit comments

Comments
 (0)