@@ -23,13 +23,16 @@ typedef enum _nextaction_t {
2323 A_StartVerify ,
2424 A_StartUninstall ,
2525 A_ClearNavmesh ,
26+ A_LaunchGame ,
2627} nextaction_t ;
2728
29+ int launch_game_native (const char * path );
30+
2831void StartTerminalWindow () {
2932 printf (TmTitle "BO3MacFix Installer" TmEnd );
3033 printf (TmClear TmStartPos );
3134
32- printf (TmBold TmUnderline "BO3MacFix Installer v1.0 \n\n" TmReset );
35+ printf (TmBold TmUnderline "BO3MacFix Installer v1.2 \n\n" TmReset );
3336}
3437
3538nextaction_t Error_NotInRightDirectory () {
@@ -50,13 +53,16 @@ nextaction_t MainMenuUninstalled() {
5053 StartTerminalWindow ();
5154
5255 printf ("1) Install BO3MacFix\n\n" );
56+ printf ("9) Launch game with fix\n\n" );
5357 printf ("0) Exit\n\n" );
5458
5559 printf ("Select an option: " );
5660
5761 char c = (char )getchar ();
5862 if (c == '1' )
5963 return A_StartInstall ;
64+ if (c == '9' )
65+ return A_LaunchGame ;
6066 if (c == '0' )
6167 return A_Exit ;
6268 return A_ShowMainMenuUninstalled ;
@@ -66,19 +72,20 @@ nextaction_t MainMenuInstalled() {
6672 StartTerminalWindow ();
6773
6874 //printf("1) Verify BO3MacFix Install\n");
69- printf ("1) Uninstall BO3MacFix\n\n" );
70- //printf("3) Clear Workshop Navmeshes\n\n");
75+ printf ("1) Update/reinstall BO3MacFix\n" );
76+ printf ("2) Uninstall BO3MacFix\n\n" );
77+ printf ("9) Launch game with fix\n\n" );
7178 printf ("0) Exit\n\n" );
7279
7380 printf ("Select an option: " );
7481
7582 char c = (char )getchar ();
76- //if (c == '1')
77- // return A_StartVerify;
7883 if (c == '1' )
84+ return A_StartVerify ;
85+ if (c == '2' )
7986 return A_StartUninstall ;
80- // if (c == '3 ')
81- // return A_ClearNavmesh ;
87+ if (c == '9 ' )
88+ return A_LaunchGame ;
8289 if (c == '0' )
8390 return A_Exit ;
8491 return A_ShowMainMenuInstalled ;
@@ -170,6 +177,86 @@ nextaction_t StartInstall() {
170177 return A_ShowMainMenuInstalled ;
171178}
172179
180+ nextaction_t StartVerify () {
181+ char sourcePath [PATH_MAX ] = {0 };
182+ char targetPath [PATH_MAX ] = {0 };
183+
184+ StartTerminalWindow ();
185+
186+ printf ("Reinstalling BO3MacFix...\n\n" );
187+
188+ printf ("Copying new launcher..." );
189+ memset (sourcePath , 0 , PATH_MAX );
190+ strncat (sourcePath , baseDirPath , PATH_MAX );
191+ strncat (sourcePath , "AppBundleExe" , PATH_MAX );
192+ memset (targetPath , 0 , PATH_MAX );
193+ strncat (targetPath , baseDirPath , PATH_MAX );
194+ strncat (targetPath , "../CoDBlkOps3.app/Contents/MacOS/AppBundleExe" , PATH_MAX );
195+ int r = copyfile (sourcePath , targetPath , 0 , COPYFILE_ALL );
196+ if (r != 0 ) {
197+ printf ("failed (%i, %i).\n\n" , r , errno );
198+ printf ("Press ENTER to continue.\n" );
199+ printf ("You might have to repair game files in Steam...\n" );
200+ getchar ();
201+ return A_ShowMainMenuUninstalled ;
202+ }
203+ printf ("done!\n" );
204+
205+ printf ("Fixing permissions on launcher..." );
206+ memset (sourcePath , 0 , PATH_MAX );
207+ strncat (sourcePath , baseDirPath , PATH_MAX );
208+ strncat (sourcePath , "../CoDBlkOps3.app/Contents/MacOS/AppBundleExe" , PATH_MAX );
209+ if (chmod (sourcePath , 0755 ) != 0 ) { // rwxr-xr-x
210+ printf ("failed (chmod: %i).\n\n" , errno );
211+ printf ("Press ENTER to continue.\n" );
212+ printf ("You might have to repair game files in Steam...\n" );
213+ getchar ();
214+ return A_ShowMainMenuUninstalled ;
215+ }
216+ if (removexattr (sourcePath , "com.apple.quarantine" , 0 ) != 0 && errno != ENOATTR ) {
217+ printf ("failed (xattr: %i).\n\n" , errno );
218+ printf ("Press ENTER to continue.\n" );
219+ printf ("You might have to repair game files in Steam...\n" );
220+ getchar ();
221+ return A_ShowMainMenuUninstalled ;
222+ }
223+ printf ("done!\n" );
224+
225+ printf ("Fixing permissions on BO3MacFix..." );
226+ memset (sourcePath , 0 , PATH_MAX );
227+ strncat (sourcePath , baseDirPath , PATH_MAX );
228+ strncat (sourcePath , "BO3MacFix.dylib" , PATH_MAX );
229+ if (chmod (sourcePath , 0644 ) != 0 ) { // rwxr-xr-x
230+ printf ("failed (chmod: %i).\n\n" , errno );
231+ printf ("Press ENTER to continue.\n" );
232+ getchar ();
233+ return A_ShowMainMenuUninstalled ;
234+ }
235+ if (removexattr (sourcePath , "com.apple.quarantine" , 0 ) != 0 && errno != ENOATTR ) {
236+ printf ("failed (xattr: %i).\n\n" , errno );
237+ printf ("Press ENTER to continue.\n" );
238+ getchar ();
239+ return A_ShowMainMenuUninstalled ;
240+ }
241+ printf ("done!\n" );
242+
243+ printf ("Installation complete!\n\n" );
244+
245+ printf ("Press ENTER to continue.\n" );
246+ getchar ();
247+ return A_ShowMainMenuInstalled ;
248+ }
249+
250+ nextaction_t LaunchGame () {
251+ StartTerminalWindow ();
252+
253+ printf ("Launching game with fix...\n\n" );
254+
255+ launch_game_native (baseDirPath );
256+
257+ return A_Exit ;
258+ }
259+
173260nextaction_t StartUninstall () {
174261 char sourcePath [PATH_MAX ] = {0 };
175262 char targetPath [PATH_MAX ] = {0 };
@@ -262,8 +349,7 @@ int main(int argc, char **argv) {
262349 act = StartInstall ();
263350 break ;
264351 case A_StartVerify :
265- printf ("A_StartVerify\n" );
266- act = A_Exit ;
352+ act = StartVerify ();
267353 break ;
268354 case A_StartUninstall :
269355 act = StartUninstall ();
@@ -272,6 +358,9 @@ int main(int argc, char **argv) {
272358 printf ("A_ClearNavmesh\n" );
273359 act = A_Exit ;
274360 break ;
361+ case A_LaunchGame :
362+ act = LaunchGame ();
363+ break ;
275364 default :
276365 act = A_Exit ;
277366 break ;
0 commit comments