I'm dev for BNO, this is a mod that supports multiplayer. Milestones crashes in on_player_changed_force while updating the gui, since the global.player array is not updated, due to how BNO works.
I did some debugging and at on_init time no player has joined yet, so the game.players list is empty.
on_init:
for _, player in pairs(game.players) do
initialize_player(player)
end
does nothing because the number of players is 0 at this point.
Then an event for on_player_changed_force triggers which initializes the force, but not the global.players array. The call to refresh_gui_for_player accesses global.players without initializing and results in a crash in gui.lua function get_frame, where it loads the global.players[player_index] - which is nil.
Easiest way to see this is just run brave new oarc with milestones and start a single player game in the debugger. Put a break in on_player_changed_force.
Maybe initialize_force_if_needed could also initialize players as you do in on_init.
Nice work !