diff --git a/src/openrct2/game.c b/src/openrct2/game.c index 19e5804d75..f8d31d254a 100644 --- a/src/openrct2/game.c +++ b/src/openrct2/game.c @@ -86,6 +86,7 @@ GAME_COMMAND_CALLBACK_POINTER* game_command_callback_table[] = { game_command_callback_hire_new_staff_member, game_command_callback_pickup_guest, game_command_callback_pickup_staff, + game_command_callback_marketing_start_campaign, }; sint32 game_command_playerid = -1; diff --git a/src/openrct2/management/marketing.c b/src/openrct2/management/marketing.c index 01b7efe6a6..343f4872e3 100644 --- a/src/openrct2/management/marketing.c +++ b/src/openrct2/management/marketing.c @@ -138,16 +138,19 @@ void marketing_set_guest_campaign(rct_peep *peep, sint32 campaign) } } -bool marketing_start_campaign(sint32 type, sint32 rideOrItem, sint32 numWeeks) +void game_command_callback_marketing_start_campaign(sint32 eax, sint32 ebx, sint32 ecx, sint32 edx, sint32 esi, sint32 edi, sint32 ebp) +{ + if (ebx != MONEY32_UNDEFINED) + { + window_close_by_class(WC_NEW_CAMPAIGN); + } +} + +void marketing_start_campaign(sint32 type, sint32 rideOrItem, sint32 numWeeks) { gGameCommandErrorTitle = STR_CANT_START_MARKETING_CAMPAIGN; - sint32 retVal = game_do_command(0, (numWeeks << 8) | GAME_COMMAND_FLAG_APPLY, 0, (rideOrItem << 8) | type, GAME_COMMAND_START_MARKETING_CAMPAIGN, 0, 0); - if (retVal == MONEY32_UNDEFINED) { - return false; - } - else { - return true; - } + game_command_callback = game_command_callback_marketing_start_campaign; + game_do_command(0, (numWeeks << 8) | GAME_COMMAND_FLAG_APPLY, 0, (rideOrItem << 8) | type, GAME_COMMAND_START_MARKETING_CAMPAIGN, 0, 0); } /** diff --git a/src/openrct2/management/marketing.h b/src/openrct2/management/marketing.h index 79f21068f3..5ecd403837 100644 --- a/src/openrct2/management/marketing.h +++ b/src/openrct2/management/marketing.h @@ -47,7 +47,8 @@ extern uint8 gMarketingCampaignRideIndex[22]; sint32 marketing_get_campaign_guest_generation_probability(sint32 campaign); void marketing_update(); void marketing_set_guest_campaign(rct_peep *peep, sint32 campaign); -bool marketing_start_campaign(sint32 type, sint32 rideOrItem, sint32 numWeeks); +void game_command_callback_marketing_start_campaign(sint32 eax, sint32 ebx, sint32 ecx, sint32 edx, sint32 esi, sint32 edi, sint32 ebp); +void marketing_start_campaign(sint32 type, sint32 rideOrItem, sint32 numWeeks); void game_command_start_campaign(sint32* eax, sint32* ebx, sint32* ecx, sint32* edx, sint32* esi, sint32* edi, sint32* ebp); bool marketing_is_campaign_type_applicable(sint32 campaignType); diff --git a/src/openrct2/windows/new_campaign.c b/src/openrct2/windows/new_campaign.c index aa8483438a..45333fbbf4 100644 --- a/src/openrct2/windows/new_campaign.c +++ b/src/openrct2/windows/new_campaign.c @@ -225,10 +225,7 @@ static void window_new_campaign_mouseup(rct_window *w, rct_widgetindex widgetInd window_close(w); break; case WIDX_START_BUTTON: - if (marketing_start_campaign(w->campaign.campaign_type, w->campaign.ride_id, w->campaign.no_weeks)) - { - window_close(w); - } + marketing_start_campaign(w->campaign.campaign_type, w->campaign.ride_id, w->campaign.no_weeks); break; } }