diff --git a/src/game/Game_local.cpp b/src/game/Game_local.cpp
--- a/src/game/Game_local.cpp
+++ b/src/game/Game_local.cpp
@@ -925,7 +925,9 @@ void idGameLocal::Init( void ) {
 	// 	   
 	// load in the bot itemtable.
 	botItemTable = NULL;
-	if ( isMultiplayer ) {
+	// The engine does not set isMultiplayer until InitFromNewMap, after this
+	// module-level initialization has completed.
+#ifdef GAME_MPAPI
 		botItemTable = FindEntityDef( "bot_itemtable", false );
 		if ( botItemTable == NULL ) {
 			common->Warning( "bot_itemtable decl not found. Bot support disabled.\n" );
@@ -936,7 +938,7 @@ void idGameLocal::Init( void ) {
 			botWeaponInfoManager.Init();
 			botGoalManager.BotSetupGoalAI();
 		}
-	}
+#endif
 // jmarshall end
 
 	Printf( "...%d aas types\n", aasList.Num() );
diff --git a/src/game/bots/Bot_goal.cpp b/src/game/bots/Bot_goal.cpp
--- a/src/game/bots/Bot_goal.cpp
+++ b/src/game/bots/Bot_goal.cpp
@@ -166,7 +166,7 @@ void idBotGoalManager::ParseItemInfo( idParser& parser, iteminfo_t* itemInfo )
 		else if( token == "mins" )
 		{
 			float value[3];
-			if( !parser.Parse1DMatrixLegacy( 3, &value[0] ) )
+			if( !parser.Parse1DMatrix( 3, &value[0] ) )
 			{
 				parser.Error( "Failed to read value token, encountered EOF parsing weapon info!" );
 			}
@@ -175,7 +175,7 @@ void idBotGoalManager::ParseItemInfo( idParser& parser, iteminfo_t* itemInfo )
 		else if( token == "maxs" )
 		{
 			float value[3];
-			if( !parser.Parse1DMatrixLegacy( 3, &value[0] ) )
+			if( !parser.Parse1DMatrix( 3, &value[0] ) )
 			{
 				parser.Error( "Failed to read value token, encountered EOF parsing weapon info!" );
 			}
@@ -490,7 +490,8 @@ void idBotGoalManager::InitLevelItems( void )
 	//for (ent = AAS_NextBSPEntity(0); ent; ent = AAS_NextBSPEntity(ent))
 	for( int idx = 0; idx < gameLocal.num_entities; idx++ )
 	{
-		idItem* ent = gameLocal.entities[idx]->Cast<idItem>();
+		idEntity* entity = gameLocal.entities[idx];
+		idItem* ent = entity ? entity->Cast<idItem>() : NULL;
 
 		if( ent == nullptr )
 		{
@@ -952,7 +953,8 @@ void idBotGoalManager::BotFindEntityForLevelItem( levelitem_t* li )
 	}
 	for( int idx = 0; idx < gameLocal.num_entities; idx++ )
 	{
-		idItem* ent = gameLocal.entities[idx]->Cast<idItem>();
+		idEntity* entity = gameLocal.entities[idx];
+		idItem* ent = entity ? entity->Cast<idItem>() : NULL;
 
 		if( ent == NULL )
 		{
@@ -1033,7 +1035,8 @@ void idBotGoalManager::UpdateEntityItems( void )
 	//
 	for( int idx = 0; idx < gameLocal.num_entities; idx++ )
 	{
-		idItem* ent = gameLocal.entities[idx]->Cast<idItem>();
+		idEntity* entity = gameLocal.entities[idx];
+		idItem* ent = entity ? entity->Cast<idItem>() : NULL;
 
 		if( ent == nullptr )
 		{
