From abf01acf492dba14aac24efc26e8ace8f04cc057 Mon Sep 17 00:00:00 2001 From: punpckhdq <121350336+punpckhdq@users.noreply.github.com> Date: Sat, 3 Jan 2026 14:30:47 +0000 Subject: [PATCH] marketing_and_strategic_business_development.c unmatching function order --- config/symbols.json | 4 +- source/cache/cache_files.h | 8 +- ...eting_and_strategic_business_development.c | 115 +++++++++++++++++- ...eting_and_strategic_business_development.h | 6 +- source/interface/ui_widget.c | 5 + source/interface/ui_widget.h | 7 ++ source/saved games/saved_game_files.h | 5 +- 7 files changed, 140 insertions(+), 10 deletions(-) diff --git a/config/symbols.json b/config/symbols.json index 96c92813..e6eb4555 100644 --- a/config/symbols.json +++ b/config/symbols.json @@ -3542,8 +3542,8 @@ { "file_offset": 849472, "flags": 32, "name": "_interface_draw_bitmap_modulated" }, { "file_offset": 849920, "flags": 32, "name": "_interface_draw_bitmap_modulated_p32" }, { "file_offset": 850272, "flags": 32, "name": "_xbox_demos_available" }, -{ "file_offset": 850368, "flags": 32, "name": "_code_000cf9c0" }, -{ "file_offset": 850384, "flags": 32, "name": "_code_000cf9d0" }, +{ "file_offset": 850368, "flags": 32, "name": "_IDirect3DDevice8_PersistDisplay@4" }, +{ "file_offset": 850384, "flags": 32, "name": "clean_up_for_image_launch" }, { "file_offset": 850480, "flags": 32, "name": "_xbox_demos_launch" }, { "file_offset": 850592, "flags": 32, "name": "_xbox_dashboard_launch" }, { "file_offset": 850720, "flags": 32, "name": "_overhead_map_initialize" }, diff --git a/source/cache/cache_files.h b/source/cache/cache_files.h index ee901b7a..392e72c9 100644 --- a/source/cache/cache_files.h +++ b/source/cache/cache_files.h @@ -16,7 +16,13 @@ header included in hcex build. /* ---------- prototypes/CACHE_FILES.C */ -unsigned long cache_files_get_checksum(); +unsigned long cache_files_get_checksum(void); + +/* ---------- prototypes/CACHE_FILES_WINDOWS.C */ + +boolean cache_files_precache_in_progress(void); + +void cache_files_precache_map_end(void); /* ---------- globals */ diff --git a/source/interface/marketing_and_strategic_business_development.c b/source/interface/marketing_and_strategic_business_development.c index cbac271a..4c473a86 100644 --- a/source/interface/marketing_and_strategic_business_development.c +++ b/source/interface/marketing_and_strategic_business_development.c @@ -32,16 +32,121 @@ symbols in this file: /* ---------- headers */ -/* ---------- constants */ - -/* ---------- macros */ - -/* ---------- structures */ +#include "cseries.h" +#include "cseries_windows.h" +#include "marketing_and_strategic_business_development.h" +#include "errors.h" +#include "files.h" +#include "ui_widget.h" +#include "cache_files.h" +#include "saved_game_files.h" /* ---------- prototypes */ +static void clean_up_for_image_launch(void); + /* ---------- globals */ +static boolean bss_00453ccc; +static boolean data_002fd5a0= TRUE; + /* ---------- public code */ +boolean xbox_demos_available( + void) +{ + struct file_reference file; + + if (data_002fd5a0==TRUE) + { + if (file_reference_create_from_path(&file, "d:\\XDemos\\XDemos.xbe", FALSE)) + { + if (file_exists(&file)) + { + bss_00453ccc= TRUE; + } + } + + data_002fd5a0= FALSE; + } + + return bss_00453ccc; +} + +void xbox_demos_launch( + void) +{ + if (xbox_demos_available()) + { + LAUNCH_DATA launch_data= {0}; + + clean_up_for_image_launch(); + + XLaunchNewImageA("d:\\XDemos\\XDemos.xbe", &launch_data); + + XLaunchNewImageA(NULL, &launch_data); + + while (TRUE) + { + ; + } + } + else + { + error(_error_silent, "XDEMOS not found!"); + } + + return; +} + +void xbox_dashboard_launch( + void) +{ + LAUNCH_DATA launch_data= {0}; + long abort_error; + + clean_up_for_image_launch(); + + abort_error= dashboard_abort_error; + switch (abort_error) + { + case 0x21: + case 0x22: + { + ((PLD_LAUNCH_DASHBOARD)&launch_data)->dwReason= XLD_LAUNCH_DASHBOARD_MEMORY; + break; + } + case 0x23: + { + ((PLD_LAUNCH_DASHBOARD)&launch_data)->dwReason= XLD_LAUNCH_DASHBOARD_MAIN_MENU; + break; + } + } + + XLaunchNewImageA(NULL, &launch_data); + + while (TRUE) + { + ; + } + + return; +} + /* ---------- private code */ + +static void clean_up_for_image_launch(void) +{ + error(_error_silent, "preparing for XLaunchNewImage()..."); + saved_game_files_take_mutex(); + + if (cache_files_precache_in_progress()) + { + error(_error_silent, "stopping map file precaching..."); + cache_files_precache_map_end(); + } + + match_vassert("c:\\halo\\SOURCE\\interface\\marketing_and_strategic_business_development.c", 64, + SUCCEEDED(IDirect3DDevice8_PersistDisplay(NULL)), + "IDirect3DDevice8_PersistDisplay() failed in clean_up_for_image_launch()"); +} diff --git a/source/interface/marketing_and_strategic_business_development.h b/source/interface/marketing_and_strategic_business_development.h index f5f18aa9..a8610d73 100644 --- a/source/interface/marketing_and_strategic_business_development.h +++ b/source/interface/marketing_and_strategic_business_development.h @@ -14,7 +14,11 @@ header included in hcex build. /* ---------- structures */ -/* ---------- prototypes/EXAMPLE.C */ +/* ---------- prototypes/MARKETING_AND_STRATEGIC_BUSINESS_DEVELOPMENT.C */ + +boolean xbox_demos_available(void); +void xbox_demos_launch(void); +void xbox_dashboard_launch(void); /* ---------- globals */ diff --git a/source/interface/ui_widget.c b/source/interface/ui_widget.c index 25c423f2..01d207b7 100644 --- a/source/interface/ui_widget.c +++ b/source/interface/ui_widget.c @@ -625,6 +625,9 @@ symbols in this file: /* ---------- headers */ +#include "cseries.h" +#include "ui_widget.h" + /* ---------- constants */ /* ---------- macros */ @@ -635,6 +638,8 @@ symbols in this file: /* ---------- globals */ +short dashboard_abort_error= NONE; + /* ---------- public code */ /* ---------- private code */ diff --git a/source/interface/ui_widget.h b/source/interface/ui_widget.h index 0d960e70..a9d4bc49 100644 --- a/source/interface/ui_widget.h +++ b/source/interface/ui_widget.h @@ -8,6 +8,11 @@ header included in hcex build. #define __UI_WIDGET_H #pragma once +/* ---------- headers */ + +#include "integer_math.h" +#include "real_math.h" + /* ---------- constants */ /* ---------- macros */ @@ -74,6 +79,8 @@ void process_ui_widgets(void); /* ---------- globals */ +extern short dashboard_abort_error; + /* ---------- public code */ #endif // __UI_WIDGET_H diff --git a/source/saved games/saved_game_files.h b/source/saved games/saved_game_files.h index 663471e3..5e1a4bed 100644 --- a/source/saved games/saved_game_files.h +++ b/source/saved games/saved_game_files.h @@ -14,7 +14,10 @@ header included in hcex build. /* ---------- structures */ -/* ---------- prototypes/EXAMPLE.C */ +/* ---------- prototypes/SAVED_GAME_FILES.C */ + +void saved_game_files_take_mutex(void); +void saved_game_files_release_mutex(void); /* ---------- globals */