Results 1 to 11 of 11
  1. #1
    MSgt. Shooter Person
    Join Date
    Sep 2009
    Location
    Wales, UK
    Posts
    298

    Default Installing game to Mac

    Hi all,

    I'm having troubles installing a build of my game to a MacBook.

    I've followed the Mac topics found here: http://udn.epicgames.com/Three/MacPlatformHome.html
    But unfortunately still no joy. I'm not sure what the problem is.

    I package a build via Frontend and grab the build.app file from UDK-2011-09\UDKGame\Build\Mac\Mac-Deploy\Shipping and transfer to the Mac, then I unarchive the file and try to open and it comes up with the splash but then gives me an error stating that it cannot open.

    Any help would be appreciated.

    Thanks,

    ZeJudge

  2. #2
    MSgt. Shooter Person
    Join Date
    Sep 2009
    Location
    Wales, UK
    Posts
    298

    Default

    Nevermind, I managed to solve this by using a config combination of Release_64 > FinalReleaseScript > Shipping_32

  3. #3
    MSgt. Shooter Person
    Join Date
    Dec 2010
    Posts
    195

    Default

    I've been having issues to. I'm going to try with your combination and see how it goes. What's the difference between release_64 and shipping_64 anyway? Why not just offer a simple "one fits all" instead of adding so many confusing options?

  4. #4
    MSgt. Shooter Person
    Join Date
    Sep 2009
    Location
    Wales, UK
    Posts
    298

    Default

    I'm really not sure why it works on one setting and not the other, but now whenever I attempt to start the game on the Mac I get an error stating
    failed to find default engine .ini file to retrieve My Documents subdirectory to use. Force quitting.
    Not sure why it's doing this. It worked with a fresh install packaging DM-Deck but not a custom game. Odd.

  5. #5
    MSgt. Shooter Person
    Join Date
    Jul 2011
    Posts
    103

    Default



    I guess the Epic's guys forgot update these two stub files!

  6. #6
    MSgt. Shooter Person
    Join Date
    Sep 2009
    Location
    Wales, UK
    Posts
    298

    Default

    I've managed to package the game in Debug mode and it will run, but shipping and release builds will not run at all.

  7. #7
    MSgt. Shooter Person
    Join Date
    Jul 2011
    Posts
    103

    Default

    Any update about it?

  8. #8
    MSgt. Shooter Person
    Join Date
    Sep 2009
    Location
    Wales, UK
    Posts
    298

    Default

    Getting frontend to produce a working mac build took some time. I ended up debugging by removing certain code and features, then re-adding them. To accompany this I done a full clean and cook in Frontend, then cooked the packages again and it seemed to run on the Mac. Though there are still some issues with a white screen on startup and freezing when switching to windowed mode.
    I'd recommend cooking ReleaseScript rather than Shipping.

  9. #9

    Default

    Has anyone figured anything else out about this issue? I've migrated a project to three different versions of UDK to try and get this to work. I settled on 2012-07 because basic games do run on a macbook pro. However, after I compile my scripts I get the same error that everyone else is getting. Tried all the different iterations of FinalReleasScript, ReleaseScript, etc. Has anyone had luck with this? If so, did you use custom scripts? I'm not using anything complex. Just custom game type, player controller, custom weapon, and a few others. Any red flag scripts that you guys know of? I have a feeling that not many people care too much about packaging for mac games. So far the mac packager seems almost useless.

    Any help would be greatly appreciated. Thanks.

  10. #10

    Default

    Okay. I think I've figured some things out. My game is working when I use Shipping 32 and Release Script in UDK 2012-07. All of my scripts compile just fine and don't cause errors when I package the game. However, after around twenty different package iterations I think I found out one thing that is causing problems. I'm using a script that inherits from UTGameViewportClient so that I can get rid of the Death Match tips. When I edit my DefaultEngine.ini to call my custom script the packaged game won't run. My modified script just comments out the section of the code that prints the deathmatch tips. I'll post the code.

    Code:
    /**
     * Copyright 1998-2010 Epic Games, Inc. All Rights Reserved.
     */
    class UTGameViewportKoons extends UDKGameViewportClient
    	config(Game);
    
    var localized string LevelActionMessages[6];
    
    /** This is the remap name for UDKFrontEndMap so we can display a more friendly name **/
    var localized string UTFrontEndString;
    
    /** Font used to display map name on loading screen */
    var Font LoadingScreenMapNameFont;
    /** Font used to display game type name on loading screen */
    var Font LoadingScreenGameTypeNameFont;
    /** Font used to display map hint message on loading screen */
    var Font LoadingScreenHintMessageFont;
    
    /** class to use for displaying progress messages */
    var string ProgressMessageSceneClassName;
    
    event PostRender(Canvas Canvas)
    {
    	local int i;
    	local ETransitionType OldTransitionType;
    	local AudioDevice AD;
    
    	OldTransitionType = Outer.TransitionType;
    	if (Outer.TransitionType == TT_None)
    	{
    		for (i = 0; i < Outer.GamePlayers.length; i++)
    		{
    			if (Outer.GamePlayers[i].Actor != None)
    			{
    				// count as loading if still using temp locally spawned PC on client while waiting for connection
    				if (Outer.GamePlayers[i].Actor.WorldInfo.NetMode == NM_Client && Outer.GamePlayers[i].Actor.Role == ROLE_Authority)
    				{
    					Outer.TransitionType = TT_Loading;
    					break;
    				}
    			}
    		}
    
    		AD = class'Engine'.static.GetAudioDevice();
    		if (AD != None)
    		{
    			if (Outer.TransitionType != TT_None)
    			{
    				AD.TransientMasterVolume = 0.0;
    			}
    			else if (AD.TransientMasterVolume == 0.0)
    			{
    				AD.TransientMasterVolume = 1.0;
    			}
    		}
    	}
    
    	Super.PostRender(Canvas);
    
    	Outer.TransitionType = OldTransitionType;
    }
    
    function DrawTransition(Canvas Canvas)
    {
    	//local int Pos;
    	//local string MapName, Desc;
    	//local string ParseStr;
    	//local class<UTGame> GameClass;
    	//local string HintMessage;
    	//local bool bAllowHints;
    	//local string GameClassName;
    
    	// if we are doing a loading transition, set up the text overlays for the loading movie
    	//if (Outer.TransitionType == TT_Loading)
    	//{
    	//	bAllowHints = false;
    
    		// we want to show the name of the map except for a number of maps were we want to remap their name
    	//	if( "UDKFrontEndMap" == Outer.TransitionDescription )
    	//	{
    			//MapName = UTFrontEndString; //"Main Menu"
    
    			// Don't bother displaying hints while transitioning to the main menu (since it should load pretty quickly!)
    	//		bAllowHints = false;
    	//	}
    		//else
    		//{
    		//	MapName = Outer.TransitionDescription;
    		//}
    
    		//class'Engine'.static.RemoveAllOverlays();
    
    		// pull the map prefix off the name
    		//Pos = InStr(MapName,"-");
    		//if (Pos != -1)
    		//{
    		//	MapName = right(MapName, (Len(MapName) - Pos) - 1);
    		//}
    
    		// pull off anything after | (gametype)
    		//Pos = InStr(MapName,"|");
    		//if (Pos != -1)
    		//{
    		//	MapName = left(MapName, Pos);
    		//}
    
    		// get the class represented by the GameType string
    		//GameClass = class<UTGame>(FindObject(Outer.TransitionGameType, class'Class'));
    		//Desc = "";
    
    		//if (GameClass == none)
    		//{
    			// Some of the game types are in UTGameContent instead of UTGame. Unfortunately UTGameContent has not been loaded yet so we have to get its base class in UTGame
    			// to get the proper description string.
    		//	Pos = InStr(Outer.TransitionGameType, ".");
    
    		//	if(Pos != -1)
    		//	{
    		//		ParseStr = Right(Outer.TransitionGameType, Len(Outer.TransitionGameType) - Pos - 1);
    
    		//		Pos = InStr(ParseStr, "_Content");
    
    		//		if(Pos != -1)
    		//		{
    		//			ParseStr = Left(ParseStr, Pos);
    
    		//			ParseStr = "UTGame." $ ParseStr;
    
    		//			GameClass = class<UTGame>(FindObject(ParseStr, class'Class'));
    
    		//			if(GameClass != none)
    		//			{
    		//				Desc = GameClass.default.GameName;
    		//			}
    		//		}
    		//	}
    		//}
    		//else
    		//{
    		//	Desc = GameClass.default.GameName;
    		//}
    
    		// NOTE: The position and scale values are in resolution-independent coordinates (between 0 and 1).
    		// NOTE: The position and scale values will be automatically corrected for aspect ratio (to match the movie image)
    
    		// Game type name
    		//class'Engine'.static.AddOverlay(LoadingScreenGameTypeNameFont, Desc, 0.1822, 0.435, 1.0, 1.0, false);
    
    		// Map name
    		//class'Engine'.static.AddOverlay(LoadingScreenMapNameFont, MapName, 0.1822, 0.46, 2.0, 2.0, false);
    
    		// We don't want to draw hints for the Main Menu or FrontEnd maps, so we'll make sure we have a valid game class
    		//if( bAllowHints )
    		//{
    			// Grab game class name if we have one
    		//	GameClassName = "";
    		//	if( GameClass != none )
    		//	{
    		//		GameClassName = string( GameClass.Name );
    		//	}
    
    			// Draw a random hint!
    			// NOTE: We always include deathmatch hints, since they're generally appropriate for all game types
    		//	HintMessage = LoadRandomLocalizedHintMessage( string( class'UTDeathmatch'.Name ), GameClassName);
    		//	if( Len( HintMessage ) > 0 )
    		//	{
    		//		class'Engine'.static.AddOverlayWrapped( LoadingScreenHintMessageFont, HintMessage, 0.1822, 0.585, 1.0, 1.0, 0.7 );
    		//	}
    		//}
    	//}
    	//else if (Outer.TransitionType == TT_Precaching)
    	//{
    	//	Canvas.Font = class'UTHUD'.static.GetFontSizeIndex(3);
    	//	Canvas.SetPos(0, 0);
    	//	Canvas.SetDrawColor(0, 0, 0, 0);
    	//	Canvas.DrawRect(Canvas.SizeX, Canvas.SizeY);
    	//	Canvas.SetDrawColor(255, 0, 0, 0);
    	//	Canvas.SetPos(100,200);
    	//	Canvas.DrawText("Precaching...");
    	//}
    }
    
    function RenderHeader(Canvas Canvas)
    {
    	Canvas.Font = class'UTHUD'.static.GetFontSizeIndex(3);
    	Canvas.SetDrawColor(255,255,255,255);
    	Canvas.SetPos(100,100);
    	Canvas.DrawText("Tell Josh Adams if you see this");
    }
    
    /**
     * Sets the value of ActiveSplitscreenConfiguration based on the desired split-screen layout type, current number of players, and any other
     * factors that might affect the way the screen should be layed out.
     */
    function UpdateActiveSplitscreenType()
    {
    	if ( GamePlayers.Length == 0 || (GamePlayers[0].Actor != None && GamePlayers[0].Actor.IsA('UTEntryPlayerController')) )
    	{
    		ActiveSplitscreenType = eSST_NONE;
    	}
    	else
    	{
    		Super.UpdateActiveSplitscreenType();
    	}
    }
    
    /**
     * Sets or updates the any current progress message being displayed.
     *
     * @param	MessageType	the type of progress message
     * @param	Message		the message to display
     * @param	Title		the title to use for the progress message.
     */
    event SetProgressMessage(EProgressMessageType MessageType, string Message, optional string Title, optional bool bIgnoreFutureNetworkMessages)
    {
    	switch ( MessageType )
    	{
    	case PMT_ConnectionFailure:
    		NotifyConnectionError(MessageType, Message, Title);
    		break;
    
    	case PMT_Clear:
    		Super.SetProgressMessage(MessageType, Message, Title, bIgnoreFutureNetworkMessages);
    		break;
    
    	default:
    		Super.SetProgressMessage(MessageType, Message, Title, bIgnoreFutureNetworkMessages);
    		break;
    	}
    }
    
    /**
     * Notifies the player that an attempt to connect to a remote server failed, or an existing connection was dropped.
     *
     * @param	Message		a description of why the connection was lost
     * @param	Title		the title to use in the connection failure message.
     */
    function NotifyConnectionError(EProgressMessageType MessageType, optional string Message=Localize("Errors", "ConnectionFailed", "Engine"), optional string Title=Localize("Errors", "ConnectionFailed_Title", "Engine") )
    {
    	local WorldInfo WI;
    
    	WI = class'Engine'.static.GetCurrentWorldInfo();
    
    	`log(`location@`showvar(Message)@`showvar(Title));
    
    	if (WI.Game != None)
    	{
    		// Mark the server as having a problem
    		WI.Game.bHasNetworkError = true;
    	}
    
    	class'UTPlayerController'.static.SetFrontEndErrorMessage(Title, Message);
    
    	// Start quitting to the main menu
    	if (UTPlayerController(Outer.GamePlayers[0].Actor) != None)
    	{
    		UTPlayerController(Outer.GamePlayers[0].Actor).QuitToMainMenu();
    	}
    	else
    	{
    		// stop any movies currently playing before we quit out
    		class'Engine'.static.StopMovie(true);
    
    		// Call disconnect to force us back to the menu level
    		ConsoleCommand("Disconnect");
    	}
    }
    
    
    defaultproperties
    {
    	HintLocFileName="UTGameUI"
    	UIControllerClass=class'UTGame.UTGameInteraction'
    	LoadingScreenMapNameFont=MultiFont'UI_Fonts_Final.Menus.Fonts_AmbexHeavyOblique'
    	LoadingScreenGameTypeNameFont=MultiFont'UI_Fonts_Final.Menus.Fonts_AmbexHeavyOblique'
    	LoadingScreenHintMessageFont=MultiFont'UI_Fonts_Final.HUD.MF_Medium'
    }
    The loading screen seems to hang on level re-load as well. I think I remember someone else posting about that problem as well.

    Anyway, does anyone have any suggestions for this problem? Especially the frozen loading screen.

    Thanks!

  11. #11

    Default

    Ok. After around 20 more iterations I cannot figure out what's wrong. Oh well. One thing that is weird is that when I play the game in the editor it uses my custom scripts (game type, player controller, etc) but when the game is packaged the game uses the standard UDK voice pack and robot gibs. Both the ini's and World Properties are set to use my game and game type. ? Bizzare. And finally, I tried replacing the standard loading screen with my own by changing the bik file. The packaged game loading screen is still the red one with the deathmatch tips. I looked for this screen but couldn't find it anywhere in the UDK folders. Even in the m4v files nothing like it exists. I guess it makes sense that Mac's might not use the bik files but I can't find the Mac load screen anywhere. Although it probably doesn't matter because the game hangs on that screen during re-load anyway.

    So, what I did to fix my problem was to exit the game on death instead of re-load. This somewhat works for my game because it's more of an art project as opposed to a standard game. This is probably not an option for anyone else. I really thought I could figure this out but to no avail. I may come back to it later.

    If anyone figures this out please post your findings! Thanks!


 

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Copyright ©2009-2011 Epic Games, Inc. All Rights Reserved.
Digital Point modules: Sphinx-based search vBulletin skin by CompletevB.com.