mirror of https://github.com/OpenRCT2/OpenRCT2.git
add initial update awards implementation
This commit is contained in:
parent
835835bbec
commit
88ffb17a4a
113
src/park.c
113
src/park.c
|
@ -23,6 +23,7 @@
|
||||||
#include "finance.h"
|
#include "finance.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "marketing.h"
|
#include "marketing.h"
|
||||||
|
#include "news_item.h"
|
||||||
#include "park.h"
|
#include "park.h"
|
||||||
#include "peep.h"
|
#include "peep.h"
|
||||||
#include "ride.h"
|
#include "ride.h"
|
||||||
|
@ -477,7 +478,7 @@ static int park_calculate_guest_generation_probability()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reward or penalties for park awards
|
// Reward or penalties for park awards
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < MAX_AWARDS; i++) {
|
||||||
rct_award *award = &RCT2_ADDRESS(RCT2_ADDRESS_AWARD_LIST, rct_award)[i];
|
rct_award *award = &RCT2_ADDRESS(RCT2_ADDRESS_AWARD_LIST, rct_award)[i];
|
||||||
if (award->time == 0)
|
if (award->time == 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -589,4 +590,114 @@ void park_update()
|
||||||
void park_update_histories()
|
void park_update_histories()
|
||||||
{
|
{
|
||||||
RCT2_CALLPROC_EBPSAFE(0x0066A231);
|
RCT2_CALLPROC_EBPSAFE(0x0066A231);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int park_is_award_deserved(int awardType, int activeAwardTypes)
|
||||||
|
{
|
||||||
|
switch (awardType) {
|
||||||
|
case PARK_AWARD_MOST_UNTIDY:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_MOST_TIDY:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_ROLLERCOASTERS:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_VALUE:
|
||||||
|
if (activeAwardTypes & (1 << PARK_AWARD_WORST_VALUE))
|
||||||
|
return 0;
|
||||||
|
if (activeAwardTypes & (1 << PARK_AWARD_MOST_DISAPPOINTING))
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & (PARK_FLAGS_11 | PARK_FLAGS_PARK_FREE_ENTRY))
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_TOTAL_RIDE_VALUE, money16) < MONEY(10, 00))
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) + MONEY(0, 10) >= RCT2_GLOBAL(RCT2_TOTAL_RIDE_VALUE, money16) / 2)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
case PARK_AWARD_MOST_BEAUTIFUL:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_WORST_VALUE:
|
||||||
|
if (activeAwardTypes & (1 << PARK_AWARD_BEST_VALUE))
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11)
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) == MONEY(0, 00))
|
||||||
|
return 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_TOTAL_RIDE_VALUE, money16) >= RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16))
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_SAFEST:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_STAFF:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_FOOD:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_WORST_FOOD:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_RESTROOMS:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_MOST_DISAPPOINTING:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_WATER_RIDES:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_CUSTOM_DESIGNED_RIDES:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_MOST_DAZZLING_RIDE_COLOURS:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_MOST_CONFUSING_LAYOUT:
|
||||||
|
break;
|
||||||
|
case PARK_AWARD_BEST_GENTLE_RIDES:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x0066A86C
|
||||||
|
*/
|
||||||
|
void park_update_awards()
|
||||||
|
{
|
||||||
|
int i, activeAwardTypes, freeAwardEntryIndex;
|
||||||
|
rct_award *awards;
|
||||||
|
|
||||||
|
awards = RCT2_ADDRESS(RCT2_ADDRESS_AWARD_LIST, rct_award);
|
||||||
|
|
||||||
|
// Only add new awards if park is open
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_PARK_OPEN) {
|
||||||
|
// Set active award types as flags
|
||||||
|
activeAwardTypes = 0;
|
||||||
|
freeAwardEntryIndex = -1;
|
||||||
|
for (i = 0; i < MAX_AWARDS; i++) {
|
||||||
|
if (awards[i].time != 0)
|
||||||
|
activeAwardTypes |= (1 << awards[i].type);
|
||||||
|
else if (freeAwardEntryIndex != -1)
|
||||||
|
freeAwardEntryIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if there was a free award entry
|
||||||
|
if (freeAwardEntryIndex != -1) {
|
||||||
|
// Get a random award type not already active
|
||||||
|
int awardType;
|
||||||
|
do {
|
||||||
|
awardType = (((scenario_rand() & 0xFF) * 17) >> 8) & 0xFF;
|
||||||
|
} while (activeAwardTypes & (1 << awardType));
|
||||||
|
|
||||||
|
// Check if award is deserved
|
||||||
|
if (park_is_award_deserved(awardType, activeAwardTypes)) {
|
||||||
|
// Add award
|
||||||
|
awards[freeAwardEntryIndex].type = awardType;
|
||||||
|
awards[freeAwardEntryIndex].time = 5;
|
||||||
|
news_item_add_to_queue(NEWS_ITEM_AWARD, STR_NEWS_ITEM_AWARD_MOST_UNTIDY + awardType, 0);
|
||||||
|
window_invalidate_by_id(WC_PARK_INFORMATION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrease award times
|
||||||
|
for (i = 0; i < MAX_AWARDS; i++)
|
||||||
|
if (awards[i].time != 0)
|
||||||
|
if (--awards[i].time == 0)
|
||||||
|
window_invalidate_by_id(WC_PARK_INFORMATION, 0);
|
||||||
}
|
}
|
|
@ -49,6 +49,7 @@ enum {
|
||||||
PARK_AWARD_MOST_DAZZLING_RIDE_COLOURS,
|
PARK_AWARD_MOST_DAZZLING_RIDE_COLOURS,
|
||||||
PARK_AWARD_MOST_CONFUSING_LAYOUT,
|
PARK_AWARD_MOST_CONFUSING_LAYOUT,
|
||||||
PARK_AWARD_BEST_GENTLE_RIDES,
|
PARK_AWARD_BEST_GENTLE_RIDES,
|
||||||
|
PARK_AWARD_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -68,6 +69,8 @@ enum {
|
||||||
PARK_FLAGS_18 = (1 << 18)
|
PARK_FLAGS_18 = (1 << 18)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MAX_AWARDS 4
|
||||||
|
|
||||||
int park_is_award_positive(int type);
|
int park_is_award_positive(int type);
|
||||||
int park_is_open();
|
int park_is_open();
|
||||||
void park_init();
|
void park_init();
|
||||||
|
@ -81,5 +84,6 @@ void reset_park_entrances();
|
||||||
|
|
||||||
void park_update();
|
void park_update();
|
||||||
void park_update_histories();
|
void park_update_histories();
|
||||||
|
void park_update_awards();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -634,7 +634,7 @@ void scenario_update()
|
||||||
RCT2_CALLPROC_EBPSAFE(0x0069DEAD);
|
RCT2_CALLPROC_EBPSAFE(0x0069DEAD);
|
||||||
scenario_objectives_check();
|
scenario_objectives_check();
|
||||||
scenario_entrance_fee_too_high_check();
|
scenario_entrance_fee_too_high_check();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x0066A86C); // award checks
|
park_update_awards();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -547,6 +547,24 @@ enum {
|
||||||
STR_MOST_CONFUSING_LAYOUT = STR_AWARD_MOST_UNTIDY + 15,
|
STR_MOST_CONFUSING_LAYOUT = STR_AWARD_MOST_UNTIDY + 15,
|
||||||
STR_BEST_GENTLE_RIDES = STR_AWARD_MOST_UNTIDY + 16,
|
STR_BEST_GENTLE_RIDES = STR_AWARD_MOST_UNTIDY + 16,
|
||||||
|
|
||||||
|
STR_NEWS_ITEM_AWARD_MOST_UNTIDY = 2831,
|
||||||
|
STR_NEWS_ITEM_MOST_TIDY = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 1,
|
||||||
|
STR_NEWS_ITEM_BEST_ROLLERCOASTERS = STR_AWARD_MOST_UNTIDY + 2,
|
||||||
|
STR_NEWS_ITEM_BEST_VALUE = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 3,
|
||||||
|
STR_NEWS_ITEM_MOST_BEAUTIFUL = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 4,
|
||||||
|
STR_NEWS_ITEM_WORST_VALUE = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 5,
|
||||||
|
STR_NEWS_ITEM_SAFEST = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 6,
|
||||||
|
STR_NEWS_ITEM_BEST_STAFF = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 7,
|
||||||
|
STR_NEWS_ITEM_BEST_FOOD = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 8,
|
||||||
|
STR_NEWS_ITEM_WORST_FOOD = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 9,
|
||||||
|
STR_NEWS_ITEM_BEST_RESTROOMS = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 10,
|
||||||
|
STR_NEWS_ITEM_MOST_DISAPPOINTING = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 11,
|
||||||
|
STR_NEWS_ITEM_BEST_WATER_RIDES = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 12,
|
||||||
|
STR_NEWS_ITEM_BEST_CUSTOM_DESIGNED_RIDES = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 13,
|
||||||
|
STR_NEWS_ITEM_MOST_DAZZLING_RIDE_COLOURS = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 14,
|
||||||
|
STR_NEWS_ITEM_MOST_CONFUSING_LAYOUT = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 15,
|
||||||
|
STR_NEWS_ITEM_BEST_GENTLE_RIDES = STR_NEWS_ITEM_AWARD_MOST_UNTIDY + 16,
|
||||||
|
|
||||||
STR_NO_RECENT_AWARDS = 2848,
|
STR_NO_RECENT_AWARDS = 2848,
|
||||||
|
|
||||||
STR_TUTORIAL = 2856,
|
STR_TUTORIAL = 2856,
|
||||||
|
|
Loading…
Reference in New Issue