1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Merge pull request #823 from duncanspumpkin/fix_817

Implemented missing guest icons from news messages
This commit is contained in:
Ted John
2015-02-17 20:48:07 +00:00
2 changed files with 61 additions and 85 deletions

View File

@@ -25,6 +25,7 @@
#include "../interface/window.h"
#include "../management/news_item.h"
#include "../peep/peep.h"
#include "../peep/staff.h"
#include "../sprites.h"
#include "../world/climate.h"
#include "../world/park.h"
@@ -565,95 +566,47 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rc
if (newsItem->flags & 1)
break;
/*
_edi = (int)e->paint.dpi;
_cx = x;
_dx = y;
#ifdef _MSC_VER
__asm {
mov cx, _cx
mov dx, _dx
mov esi, w
mov edi, _edi
push ebp
mov ebp, 0066C3B8h
push after
push esi
jmp ebp
after:
pop ebp
rct_drawpixelinfo* cliped_dpi = clip_drawpixelinfo(dpi, x + 1, 22, y + 1, 22);
if (!cliped_dpi) break;
rct_peep* peep = GET_PEEP(newsItem->assoc);
int clip_x = 10, clip_y = 19;
if (peep->type == PEEP_TYPE_STAFF){
if (peep->staff_type == STAFF_TYPE_ENTERTAINER){
clip_y += 3;
}
}
#else
__asm__ ( "\
\n\
mov cx, %[_cx] \n\
mov dx, %[_dx] \n\
mov esi, %[w] \n\
mov edi, %[_edi] \n\
push ebp \n\
mov ebp, 0x0066C3B8 \n\
push %[after] \n\
push esi \n\
jmp ebp \n\
%[after]: \n\
pop ebp \n\
" : [_cx] "+m" (_cx), [_dx] "+m" (_dx), [w] "+m" (w), [_edi] "+m" (_edi), [after] "+m" (after) );
#endif
break;
*/
//_ax = x + 1;
//_cx = y + 1;
//_edi = (int)dpi;
//__asm {
// mov edi, _edi
// mov ax, _ax
// mov cx, _cx
// mov bx, 22
// mov dx, 22
// push ebp
//}
//sub_6EE53B();
//__asm {
// pop ebp
// mov dpi, edi
//}
//if (dpi == NULL)
// break;
uint32 image_id_base = *RCT2_ADDRESS(0x00982708, uint32*)[peep->sprite_type * 2];
image_id_base += w->frame_no & 0xFFFFFFFC;
image_id_base++;
//x = 10;
//y = 19;
uint32 image_id = image_id_base;
image_id |= 0xA0000000 | (peep->tshirt_colour << 19) | (peep->trousers_colour << 24);
//peep = &rctmem->sprites[*((short*)&newsItem->assoc)].peep;
//if (peep->type == PEEP_TYPE_STAFF && peep->var_2F == 3)
// y += 3;
gfx_draw_sprite(cliped_dpi, image_id, clip_x, clip_y, 0);
//_eax = *((int*)(0x00982708 + (peep->sprite_type * 8)));
//_ebx = w->frame_no & 0xFFFFFFFC;
//_ebx += *((int*)_eax);
//_ebx++;
if (image_id_base >= 0x2A1D && image_id_base < 0x2A3D){
image_id_base += 32;
image_id_base |= 0x20000000 | (peep->balloon_colour << 19);
//gfx_draw_sprite(dpi, _ebx | (peep->var_30 << 19) | (peep->var_31 << 24) | 0xA0000000, x, y);
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
}
else if (image_id_base >= 0x2BBD && image_id_base < 0x2BDD){
image_id_base += 32;
image_id_base |= 0x20000000 | (peep->umbrella_colour << 19);
//if (_ebx >= 0x2A1D && _ebx >= 0x2A3D) {
// _ebx += 32;
// _ebx |= 0x20000000;
// _ebx |= peep->balloon_colour << 19;
// gfx_draw_sprite(dpi, _ebx, x, y);
//} else if (_ebx >= 0x2BBD && _ebx >= 0x2BDD) {
// _ebx += 32;
// _ebx |= 0x20000000;
// _ebx |= peep->umbrella_colour << 19;
// gfx_draw_sprite(dpi, _ebx, x, y);
//} else if (_ebx >= 0x29DD && _ebx >= 0x29FD) {
// _ebx += 32;
// _ebx |= 0x20000000;
// _ebx |= peep->hat_colour << 19;
// gfx_draw_sprite(dpi, _ebx, x, y);
//} else {
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
}
else if (image_id_base >= 0x29DD && image_id_base < 0x29FD){
image_id_base += 32;
image_id_base |= 0x20000000 | (peep->hat_colour << 19);
//}
gfx_draw_sprite(cliped_dpi, image_id_base, clip_x, clip_y, 0);
}
rct2_free(cliped_dpi);
break;
case NEWS_ITEM_MONEY:
gfx_draw_sprite(dpi, SPR_FINANCE, x, y, 0);

View File

@@ -23,6 +23,7 @@
#include "../management/news_item.h"
#include "../localisation/localisation.h"
#include "../world/sprite.h"
#include "../peep/staff.h"
#include "../sprites.h"
#include "../interface/widget.h"
#include "../interface/window.h"
@@ -339,12 +340,34 @@ static void window_news_scrollpaint()
case NEWS_ITEM_RIDE:
gfx_draw_sprite(dpi, SPR_RIDE, x, yy, 0);
break;
case NEWS_ITEM_PEEP_ON_RIDE:
// TODO
break;
case NEWS_ITEM_PEEP:
// TODO
break;
case NEWS_ITEM_PEEP_ON_RIDE:
{
rct_drawpixelinfo* cliped_dpi = clip_drawpixelinfo(dpi, x + 1, 22, yy + 1, 22);
if (!cliped_dpi) break;
rct_peep* peep = GET_PEEP(newsItem->assoc);
int clip_x = 10, clip_y = 19;
// If normal peep set sprite to normal (no food)
// If staff set sprite to staff sprite
int sprite_type = 0;
if (peep->type == PEEP_TYPE_STAFF){
sprite_type = peep->sprite_type;
if (peep->staff_type == STAFF_TYPE_ENTERTAINER){
clip_y += 3;
}
}
uint32 image_id = *RCT2_ADDRESS(0x00982708, uint32*)[sprite_type * 2];
image_id += 0xA0000001;
image_id |= (peep->tshirt_colour << 19) | (peep->trousers_colour << 24);
gfx_draw_sprite(cliped_dpi, image_id, clip_x, clip_y, 0);
rct2_free(cliped_dpi);
break;
}
case NEWS_ITEM_MONEY:
gfx_draw_sprite(dpi, SPR_FINANCE, x, yy, 0);
break;