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 "map.h"
|
||||
#include "marketing.h"
|
||||
#include "news_item.h"
|
||||
#include "park.h"
|
||||
#include "peep.h"
|
||||
#include "ride.h"
|
||||
|
@ -477,7 +478,7 @@ static int park_calculate_guest_generation_probability()
|
|||
}
|
||||
|
||||
// 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];
|
||||
if (award->time == 0)
|
||||
continue;
|
||||
|
@ -590,3 +591,113 @@ void park_update_histories()
|
|||
{
|
||||
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_CONFUSING_LAYOUT,
|
||||
PARK_AWARD_BEST_GENTLE_RIDES,
|
||||
PARK_AWARD_COUNT
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -68,6 +69,8 @@ enum {
|
|||
PARK_FLAGS_18 = (1 << 18)
|
||||
};
|
||||
|
||||
#define MAX_AWARDS 4
|
||||
|
||||
int park_is_award_positive(int type);
|
||||
int park_is_open();
|
||||
void park_init();
|
||||
|
@ -81,5 +84,6 @@ void reset_park_entrances();
|
|||
|
||||
void park_update();
|
||||
void park_update_histories();
|
||||
void park_update_awards();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -634,7 +634,7 @@ void scenario_update()
|
|||
RCT2_CALLPROC_EBPSAFE(0x0069DEAD);
|
||||
scenario_objectives_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_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_TUTORIAL = 2856,
|
||||
|
|
Loading…
Reference in New Issue