mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix peep thoughts crashing on x64
This commit is contained in:
parent
7ebdec7e8f
commit
76043d4050
|
@ -7181,24 +7181,21 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum
|
|||
* argument_1 (esi & ebx)
|
||||
* argument_2 (esi+2)
|
||||
*/
|
||||
void get_arguments_from_thought(rct_peep_thought thought, uint32* argument_1, uint32* argument_2)
|
||||
void peep_thought_set_format_args(rct_peep_thought *thought)
|
||||
{
|
||||
int esi = 0x009AC86C;
|
||||
set_format_arg(0, rct_string_id, PeepThoughts[thought->type]);
|
||||
|
||||
uint8 flags = PeepThoughtToActionMap[thought.type].flags;
|
||||
uint8 flags = PeepThoughtToActionMap[thought->type].flags;
|
||||
if (flags & 1) {
|
||||
rct_ride* ride = get_ride(thought.item);
|
||||
esi = (int)(&(ride->name));
|
||||
rct_ride *ride = get_ride(thought->item);
|
||||
set_format_arg(2, rct_string_id, ride->name);
|
||||
set_format_arg(4, uint32, ride->name_arguments);
|
||||
} else if (flags & 2) {
|
||||
RCT2_GLOBAL(0x009AC86C, rct_string_id) = ShopItemStringIds[thought.item].singular;
|
||||
set_format_arg(2, rct_string_id, ShopItemStringIds[thought->item].singular);
|
||||
} else if (flags & 4) {
|
||||
RCT2_GLOBAL(0x009AC86C, rct_string_id) = ShopItemStringIds[thought.item].indefinite;
|
||||
set_format_arg(2, rct_string_id, ShopItemStringIds[thought->item].indefinite);
|
||||
} else {
|
||||
esi = 0x009AC864; //No thought?
|
||||
}
|
||||
|
||||
*argument_1 = ((PeepThoughts[thought.type] & 0xFFFF) | (((uint32)*((uint16*)esi)) << 16));
|
||||
*argument_2 = *((uint32*)(esi + 2)); //Always 0 apart from on rides?
|
||||
}
|
||||
|
||||
/** rct2: 0x00982004 */
|
||||
|
|
|
@ -638,7 +638,7 @@ void peep_update_days_in_queue();
|
|||
void peep_applause();
|
||||
rct_peep *peep_generate(int x, int y, int z);
|
||||
void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argument_2);
|
||||
void get_arguments_from_thought(rct_peep_thought thought, uint32* argument_1, uint32* argument_2);
|
||||
void peep_thought_set_format_args(rct_peep_thought *thought);
|
||||
int get_peep_face_sprite_small(rct_peep *peep);
|
||||
int get_peep_face_sprite_large(rct_peep *peep);
|
||||
int peep_check_easteregg_name(int index, rct_peep *peep);
|
||||
|
|
|
@ -1041,13 +1041,8 @@ void window_guest_overview_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
return;
|
||||
}
|
||||
|
||||
get_arguments_from_thought(peep->thoughts[i], &argument1, &argument2);
|
||||
|
||||
set_format_arg(0, uint32, argument1);
|
||||
set_format_arg(4, uint32, argument2);
|
||||
set_format_arg(8, uint16, 0);
|
||||
|
||||
x = widget->right - widget->left - w->list_information_type;
|
||||
peep_thought_set_format_args(&peep->thoughts[i]);
|
||||
gfx_draw_string_left(&dpi_marquee, STR_WINDOW_COLOUR_2_STRINGID, gCommonFormatArgs, 0, x, 0);
|
||||
}
|
||||
|
||||
|
@ -2012,15 +2007,11 @@ void window_guest_thoughts_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|||
if (thought->type == PEEP_THOUGHT_TYPE_NONE) return;
|
||||
if (thought->var_2 == 0) continue;
|
||||
|
||||
uint32 argument1, argument2;
|
||||
get_arguments_from_thought(*thought, &argument1, &argument2);
|
||||
set_format_arg(0, uint32, argument1);
|
||||
set_format_arg(4, uint32, argument2);
|
||||
|
||||
int width = window_guest_thoughts_widgets[WIDX_PAGE_BACKGROUND].right
|
||||
- window_guest_thoughts_widgets[WIDX_PAGE_BACKGROUND].left
|
||||
- 8;
|
||||
|
||||
peep_thought_set_format_args(thought);
|
||||
y += gfx_draw_string_left_wrapped(dpi, gCommonFormatArgs, x, y, width, STR_BLACK_STRING, 0);
|
||||
|
||||
// If this is the last visible line end drawing.
|
||||
|
|
|
@ -774,10 +774,7 @@ static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi,
|
|||
if (thought->var_2 > 5)
|
||||
break;
|
||||
|
||||
get_arguments_from_thought(peep->thoughts[j], &argument_1, &argument_2);
|
||||
|
||||
set_format_arg(0, uint32, argument_1);
|
||||
set_format_arg(4, uint32, argument_2);
|
||||
peep_thought_set_format_args(&peep->thoughts[j]);
|
||||
gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, 0, 118, y - 1, 329);
|
||||
break;
|
||||
}
|
||||
|
@ -867,17 +864,23 @@ static void get_arguments_from_peep(rct_peep *peep, uint32 *argument_1, uint32*
|
|||
get_arguments_from_action(peep, argument_1, argument_2);
|
||||
break;
|
||||
case VIEW_THOUGHTS:
|
||||
if (peep->thoughts[0].var_2 <= 5) {
|
||||
if (peep->thoughts[0].type != PEEP_THOUGHT_TYPE_NONE) {
|
||||
get_arguments_from_thought(peep->thoughts[0], argument_1, argument_2);
|
||||
break;
|
||||
}
|
||||
{
|
||||
rct_peep_thought *thought = &peep->thoughts[0];
|
||||
if (thought->var_2 <= 5 && thought->type != PEEP_THOUGHT_TYPE_NONE) {
|
||||
// HACK The out arguments here are used to draw the group text so we just return
|
||||
// gCommonFormatArgs as two uint32s.
|
||||
memset(gCommonFormatArgs, 0, sizeof(*argument_1) + sizeof(*argument_2));
|
||||
peep_thought_set_format_args(thought);
|
||||
memcpy(argument_1, gCommonFormatArgs, sizeof(*argument_1));
|
||||
memcpy(argument_2, gCommonFormatArgs + sizeof(*argument_1), sizeof(*argument_2));
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
*argument_1 = 0;
|
||||
*argument_2 = 0;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue