From 30585ea2a9ae3f72a2c1d6e4bffa59e70f61f87c Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 5 Jun 2017 21:18:14 +0100 Subject: [PATCH] Show guest money effects with high precision --- data/language/en-GB.txt | 2 ++ src/openrct2/localisation/string_ids.h | 2 ++ src/openrct2/paint/sprite/misc.c | 12 +++------- src/openrct2/world/money_effect.c | 31 +++++++++++++++++--------- src/openrct2/world/sprite.h | 1 + 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 5d062492f1..d9d35bcbd0 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4370,6 +4370,8 @@ STR_6058 :Mute STR_6059 :{RIGHTGUILLEMET} STR_6060 :Show guest purchases as animation STR_6061 :{SMALLFONT}{BLACK}Show animated money effect{NEWLINE}when guests make purchases. +STR_6062 :{OUTLINE}{GREEN}+ {CURRENCY2DP} +STR_6063 :{OUTLINE}{RED}- {CURRENCY2DP} ############# # Scenarios # diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 523dc9485a..d27d5101c6 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3723,6 +3723,8 @@ enum { STR_SHOW_GUEST_PURCHASES = 6060, STR_SHOW_GUEST_PURCHASES_TIP = 6061, + STR_MONEY_EFFECT_RECEIVE_HIGHP = 6062, + STR_MONEY_EFFECT_SPEND_HIGHP = 6063, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/openrct2/paint/sprite/misc.c b/src/openrct2/paint/sprite/misc.c index e8b5f81c6d..ca2be38400 100644 --- a/src/openrct2/paint/sprite/misc.c +++ b/src/openrct2/paint/sprite/misc.c @@ -55,15 +55,9 @@ void misc_paint(rct_sprite *misc, sint32 imageDirection) return; } - rct_money_effect moneyEffect = misc->money_effect; - money32 amount = moneyEffect.value; - rct_string_id stringId = STR_MONEY_EFFECT_RECEIVE; - if (amount < 0) { - amount = -amount; - stringId = STR_MONEY_EFFECT_SPEND; - } - - sub_685EBC(amount, stringId, moneyEffect.y, moneyEffect.z, (sint8 *) &money_wave[moneyEffect.wiggle % 22], moneyEffect.offset_x, get_current_rotation()); + rct_money_effect * moneyEffect = &misc->money_effect; + rct_string_id stringId = money_effect_get_string_id(moneyEffect); + sub_685EBC(moneyEffect->value, stringId, moneyEffect->y, moneyEffect->z, (sint8 *) &money_wave[moneyEffect->wiggle % 22], moneyEffect->offset_x, get_current_rotation()); break; } diff --git a/src/openrct2/world/money_effect.c b/src/openrct2/world/money_effect.c index 20ff32c207..705e442ca0 100644 --- a/src/openrct2/world/money_effect.c +++ b/src/openrct2/world/money_effect.c @@ -32,16 +32,12 @@ static const rct_xy16 _moneyEffectMoveOffset[] = { */ void money_effect_create_at(money32 value, sint32 x, sint32 y, sint32 z, bool vertical) { - rct_money_effect *moneyEffect; - rct_string_id stringId; - char buffer[128]; - - moneyEffect = (rct_money_effect*)create_sprite(2); + rct_money_effect * moneyEffect = (rct_money_effect *)create_sprite(2); if (moneyEffect == NULL) return; moneyEffect->value = value; - moneyEffect->vertical = vertical; + moneyEffect->vertical = (vertical ? 1 : 0); moneyEffect->var_14 = 64; moneyEffect->var_09 = 20; moneyEffect->var_15 = 30; @@ -51,12 +47,11 @@ void money_effect_create_at(money32 value, sint32 x, sint32 y, sint32 z, bool ve moneyEffect->num_movements = 0; moneyEffect->move_delay = 0; - stringId = 1388; - if (value < 0) { - value *= -1; - stringId = 1399; - } + // Construct string to display + rct_string_id stringId = money_effect_get_string_id(moneyEffect); + char buffer[128]; format_string(buffer, 128, stringId, &value); + gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; moneyEffect->offset_x = -(gfx_get_string_width(buffer) / 2); moneyEffect->wiggle = 0; @@ -130,3 +125,17 @@ void money_effect_update(rct_money_effect *moneyEffect) sprite_remove((rct_sprite*)moneyEffect); } + +rct_string_id money_effect_get_string_id(const rct_money_effect * sprite) +{ + bool vertical = (sprite->vertical != 0); + rct_string_id spentStringId = vertical ? STR_MONEY_EFFECT_SPEND_HIGHP : STR_MONEY_EFFECT_SPEND; + rct_string_id receiveStringId = vertical ? STR_MONEY_EFFECT_RECEIVE_HIGHP : STR_MONEY_EFFECT_RECEIVE; + rct_string_id stringId = receiveStringId; + money32 value = sprite->value; + if (value < 0) { + value *= -1; + stringId = spentStringId; + } + return stringId; +} diff --git a/src/openrct2/world/sprite.h b/src/openrct2/world/sprite.h index 5795fbb818..2141551609 100644 --- a/src/openrct2/world/sprite.h +++ b/src/openrct2/world/sprite.h @@ -463,6 +463,7 @@ uint32 duck_get_frame_image(const rct_duck * duck, sint32 direction); void money_effect_create(money32 value); void money_effect_create_at(money32 value, sint32 x, sint32 y, sint32 z, bool vertical); void money_effect_update(rct_money_effect *moneyEffect); +rct_string_id money_effect_get_string_id(const rct_money_effect * sprite); /////////////////////////////////////////////////////////////// // Crash particles