mirror of https://github.com/OpenRCT2/OpenRCT2.git
Integrate entertainer costumes
This commit is contained in:
parent
65cd3705b1
commit
7edcd11aa7
|
@ -44,7 +44,7 @@ void SceneryGroupObject::ReadLegacy(IReadObjectContext * context, IStream * stre
|
||||||
_legacyType.var_107 = stream->ReadValue<uint8>();
|
_legacyType.var_107 = stream->ReadValue<uint8>();
|
||||||
_legacyType.var_108 = stream->ReadValue<uint8>();
|
_legacyType.var_108 = stream->ReadValue<uint8>();
|
||||||
_legacyType.pad_109 = stream->ReadValue<uint8>();
|
_legacyType.pad_109 = stream->ReadValue<uint8>();
|
||||||
_legacyType.var_10A = stream->ReadValue<uint32>();
|
_legacyType.entertainer_costumes = stream->ReadValue<uint32>();
|
||||||
|
|
||||||
GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME);
|
GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME);
|
||||||
ReadItems(stream);
|
ReadItems(stream);
|
||||||
|
|
|
@ -1321,9 +1321,10 @@ void game_command_set_staff_name(int *eax, int *ebx, int *ecx, int *edx, int *es
|
||||||
colour_t staff_get_colour(uint8 staffType)
|
colour_t staff_get_colour(uint8 staffType)
|
||||||
{
|
{
|
||||||
switch (staffType) {
|
switch (staffType) {
|
||||||
case STAFF_TYPE_HANDYMAN: return gStaffHandymanColour;
|
case STAFF_TYPE_HANDYMAN: return gStaffHandymanColour;
|
||||||
case STAFF_TYPE_MECHANIC: return gStaffMechanicColour;
|
case STAFF_TYPE_MECHANIC: return gStaffMechanicColour;
|
||||||
case STAFF_TYPE_SECURITY: return gStaffSecurityColour;
|
case STAFF_TYPE_SECURITY: return gStaffSecurityColour;
|
||||||
|
case STAFF_TYPE_ENTERTAINER: return 0;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -45,6 +45,21 @@ enum STAFF_ORDERS{
|
||||||
STAFF_ORDERS_FIX_RIDES = (1 << 1)
|
STAFF_ORDERS_FIX_RIDES = (1 << 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ENTERTAINER_COSTUME {
|
||||||
|
ENTERTAINER_COSTUME_PANDA,
|
||||||
|
ENTERTAINER_COSTUME_TIGER,
|
||||||
|
ENTERTAINER_COSTUME_ELEPHANT,
|
||||||
|
ENTERTAINER_COSTUME_ROMAN,
|
||||||
|
ENTERTAINER_COSTUME_GORILLA,
|
||||||
|
ENTERTAINER_COSTUME_SNOWMAN,
|
||||||
|
ENTERTAINER_COSTUME_KNIGHT,
|
||||||
|
ENTERTAINER_COSTUME_ASTRONAUT,
|
||||||
|
ENTERTAINER_COSTUME_BANDIT,
|
||||||
|
ENTERTAINER_COSTUME_SHERIFF,
|
||||||
|
ENTERTAINER_COSTUME_PIRATE,
|
||||||
|
ENTERTAINER_COSTUME_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
extern uint32 gStaffPatrolAreas[204 * 128];
|
extern uint32 gStaffPatrolAreas[204 * 128];
|
||||||
extern uint8 gStaffModes[204];
|
extern uint8 gStaffModes[204];
|
||||||
extern uint16 gStaffDrawPatrolAreas;
|
extern uint16 gStaffDrawPatrolAreas;
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
#include "../addresses.h"
|
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#include "../game.h"
|
#include "../game.h"
|
||||||
#include "../interface/viewport.h"
|
#include "../interface/viewport.h"
|
||||||
|
@ -303,6 +302,8 @@ static const uint32 staffCostumeNames[] = {
|
||||||
STR_STAFF_OPTION_COSTUME_PIRATE,
|
STR_STAFF_OPTION_COSTUME_PIRATE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static uint8 _availableCostumes[ENTERTAINER_COSTUME_COUNT];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006BEE98
|
* rct2: 0x006BEE98
|
||||||
|
@ -1334,34 +1335,35 @@ void window_staff_options_mousedown(int widgetIndex, rct_window* w, rct_widget*
|
||||||
|
|
||||||
init_scenery();
|
init_scenery();
|
||||||
|
|
||||||
int ebx = 0;
|
uint32 entertainerCostumes = 0;
|
||||||
for (int i = 0; i < 19; i++) {
|
for (int i = 0; i < 19; i++) {
|
||||||
if (window_scenery_tab_entries[i][0] != -1) {
|
if (window_scenery_tab_entries[i][0] != -1) {
|
||||||
rct_scenery_set_entry* scenery_entry = get_scenery_group_entry(i);
|
rct_scenery_set_entry* scenery_entry = get_scenery_group_entry(i);
|
||||||
ebx |= scenery_entry->var_10A;
|
entertainerCostumes |= scenery_entry->entertainer_costumes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8* ebp = RCT2_ADDRESS(0xF4391B, uint8);
|
uint8 *costume = _availableCostumes;
|
||||||
uint16 no_entries = 0;
|
uint16 numCostumes = 0;
|
||||||
for (uint8 i = 0; i < 32; ++i){
|
for (uint8 i = 0; i < ENTERTAINER_COSTUME_COUNT; i++) {
|
||||||
if (ebx & (1 << i)){
|
if (entertainerCostumes & (1 << i)) {
|
||||||
*ebp++ = i;
|
// For some reason the flags are +4 from the actual costume IDs
|
||||||
no_entries++;
|
*costume++ = (i - 4);
|
||||||
|
numCostumes++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rct_peep* peep = GET_PEEP(w->number);
|
rct_peep* peep = GET_PEEP(w->number);
|
||||||
int item_checked = 0;
|
int itemsChecked = 0;
|
||||||
//This will be moved below where Items Checked is when all
|
//This will be moved below where Items Checked is when all
|
||||||
//of dropdown related functions are finished. This prevents
|
//of dropdown related functions are finished. This prevents
|
||||||
//the dropdown from not working on first click.
|
//the dropdown from not working on first click.
|
||||||
for (int i = 0; i < no_entries; ++i){
|
for (int i = 0; i < numCostumes; ++i){
|
||||||
int eax = RCT2_ADDRESS(0xF4391B, uint8)[i];
|
uint8 costume = _availableCostumes[i];
|
||||||
if (eax == peep->sprite_type){
|
if (costume == peep->sprite_type) {
|
||||||
item_checked = 1 << i;
|
itemsChecked = 1 << i;
|
||||||
}
|
}
|
||||||
gDropdownItemsArgs[i] = staffCostumeNames[eax - 4];
|
gDropdownItemsArgs[i] = staffCostumeNames[costume];
|
||||||
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
|
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1372,10 +1374,10 @@ void window_staff_options_mousedown(int widgetIndex, rct_window* w, rct_widget*
|
||||||
int y = widget->top + w->y;
|
int y = widget->top + w->y;
|
||||||
int extray = widget->bottom - widget->top + 1;
|
int extray = widget->bottom - widget->top + 1;
|
||||||
int width = widget->right - widget->left - 3;
|
int width = widget->right - widget->left - 3;
|
||||||
window_dropdown_show_text_custom_width(x, y, extray, w->colours[1], DROPDOWN_FLAG_STAY_OPEN, no_entries, width);
|
window_dropdown_show_text_custom_width(x, y, extray, w->colours[1], DROPDOWN_FLAG_STAY_OPEN, numCostumes, width);
|
||||||
|
|
||||||
// See above note.
|
// See above note.
|
||||||
gDropdownItemsChecked = item_checked;
|
gDropdownItemsChecked = itemsChecked;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1392,6 +1394,6 @@ void window_staff_options_dropdown(rct_window *w, int widgetIndex, int dropdownI
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rct_peep* peep = GET_PEEP(w->number);
|
rct_peep* peep = GET_PEEP(w->number);
|
||||||
int costume = (RCT2_ADDRESS(0xF4391B, uint8)[dropdownIndex] - 4) | 0x80;
|
int costume = _availableCostumes[dropdownIndex] | 0x80;
|
||||||
game_do_command(peep->x, (costume << 8) | 1, peep->y, w->number, GAME_COMMAND_SET_STAFF_ORDER, 0, 0);
|
game_do_command(peep->x, (costume << 8) | 1, peep->y, w->number, GAME_COMMAND_SET_STAFF_ORDER, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,7 +176,7 @@ typedef struct rct_scenery_set_entry {
|
||||||
uint8 var_107;
|
uint8 var_107;
|
||||||
uint8 var_108; // 0x108, order?
|
uint8 var_108; // 0x108, order?
|
||||||
uint8 pad_109;
|
uint8 pad_109;
|
||||||
uint32 var_10A;
|
uint32 entertainer_costumes; // 0x10A
|
||||||
} rct_scenery_set_entry;
|
} rct_scenery_set_entry;
|
||||||
assert_struct_size(rct_scenery_set_entry, 14 + 2 * 0x80);
|
assert_struct_size(rct_scenery_set_entry, 14 + 2 * 0x80);
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
Loading…
Reference in New Issue