diff --git a/common/main/fwd-object.h b/common/main/fwd-object.h index b1a280d99..c04b74d8d 100644 --- a/common/main/fwd-object.h +++ b/common/main/fwd-object.h @@ -16,6 +16,7 @@ #include "fwd-segment.h" #include "fwd-window.h" #include "fwd-valptridx.h" +#include "polyobj.h" #include struct bitmap_index; @@ -219,7 +220,7 @@ window_event_result endlevel_move_all_objects(); void object_goto_next_viewer(); // make object0 the player, setting all relevant fields -void init_player_object(); +void init_player_object(const d_level_shared_polygon_model_state &LevelSharedPolygonModelState, object_base &console); // check if object is in object->segnum. if not, check the adjacent // segs. if not any of these, returns false, else sets obj->segnum & diff --git a/similar/editor/med.cpp b/similar/editor/med.cpp index 2e943f99b..3c76370f4 100644 --- a/similar/editor/med.cpp +++ b/similar/editor/med.cpp @@ -206,7 +206,7 @@ static inline void editor_slew_init() auto &vmobjptr = Objects.vmptr; Viewer = ConsoleObject; slew_init(vmobjptr(ConsoleObject)); - init_player_object(); + init_player_object(LevelSharedPolygonModelState, *ConsoleObject); } int DropIntoDebugger() diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index ad0805432..a0b939898 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -335,7 +335,7 @@ static void verify_object(const d_vclip_array &Vclip, object &obj, const savegam //Assert(obj == Player); if (&obj == ConsoleObject) - init_player_object(); + init_player_object(LevelSharedPolygonModelState, obj); else if (obj.render_type == RT_POLYOBJ) //recover from Matt's pof file matchup bug obj.rtype.pobj_info.model_num = Player_ship->model_num; diff --git a/similar/main/object.cpp b/similar/main/object.cpp index 7c250093d..d5e82277e 100644 --- a/similar/main/object.cpp +++ b/similar/main/object.cpp @@ -867,20 +867,17 @@ void reset_player_object(object_base &ConsoleObject) } //make object0 the player, setting all relevant fields -void init_player_object() +void init_player_object(const d_level_shared_polygon_model_state &LevelSharedPolygonModelState, object_base &console) { - auto &Objects = LevelUniqueObjectState.Objects; - auto &vmobjptr = Objects.vmptr; - const auto &&console = vmobjptr(ConsoleObject); - console->type = OBJ_PLAYER; + console.type = OBJ_PLAYER; set_player_id(console, 0); //no sub-types for player - console->signature = object_signature_t{0}; + console.signature = object_signature_t{0}; auto &Polygon_models = LevelSharedPolygonModelState.Polygon_models; - console->size = Polygon_models[Player_ship->model_num].rad; - console->control_source = object::control_type::slew; //default is player slewing - console->movement_source = object::movement_type::physics; //change this sometime - console->lifeleft = IMMORTAL_TIME; - console->attached_obj = object_none; + console.size = Polygon_models[Player_ship->model_num].rad; + console.control_source = object::control_type::slew; //default is player slewing + console.movement_source = object::movement_type::physics; //change this sometime + console.lifeleft = IMMORTAL_TIME; + console.attached_obj = object_none; reset_player_object(console); } @@ -902,7 +899,7 @@ void init_objects() Viewer = ConsoleObject = &Objects.front(); - init_player_object(); + init_player_object(LevelSharedPolygonModelState, *ConsoleObject); obj_link_unchecked(Objects.vmptr, Objects.vmptridx(ConsoleObject), Segments.vmptridx(segment_first)); //put in the world in segment 0 LevelUniqueObjectState.num_objects = 1; //just the player Objects.set_count(1);