diff --git a/src/core/lang.c b/src/core/lang.c index 1602d90a4c..968706cf8b 100644 --- a/src/core/lang.c +++ b/src/core/lang.c @@ -1,6 +1,6 @@ -#include "building/type.h" #include "core/lang.h" +#include "building/building.h" #include "core/buffer.h" #include "core/file.h" #include "core/io.h" @@ -551,6 +551,16 @@ const uint8_t *lang_get_string(int group, int index) return str; } +const uint8_t *lang_get_building_type_string(int type) +{ + if (building_is_house(type) || type == BUILDING_NATIVE_HUT || + type == BUILDING_NATIVE_MEETING || type == BUILDING_NATIVE_CROPS) { + return lang_get_string(41, type); + } else { + return lang_get_string(28, type); + } +} + const lang_message *lang_get_message(int id) { return &data.message_entries[id]; diff --git a/src/core/lang.h b/src/core/lang.h index 55f5f93046..711f548502 100644 --- a/src/core/lang.h +++ b/src/core/lang.h @@ -94,6 +94,13 @@ void load_augustus_messages(void); */ const uint8_t *lang_get_string(int group, int index); +/** + * Gets a localized string for a building type + * @param type The building type to get the display string of + * @return String + */ +const uint8_t *lang_get_building_type_string(int type); + /** * Gets the message for the specified ID * @param id ID of the message diff --git a/src/scenario/scenario_events_parameter_data.c b/src/scenario/scenario_events_parameter_data.c index 0ae85ed016..e682c944e2 100644 --- a/src/scenario/scenario_events_parameter_data.c +++ b/src/scenario/scenario_events_parameter_data.c @@ -1,7 +1,13 @@ #include "scenario_events_parameter_data.h" + #include "city/ratings.h" #include "city/resource.h" +#include "core/lang.h" +#include "core/string.h" +#include "empire/city.h" #include "game/resource.h" +#include "scenario/custom_messages.h" +#include "scenario/scenario.h" #define UNLIMITED 1000000000 #define NEGATIVE_UNLIMITED -1000000000 @@ -187,7 +193,7 @@ static scenario_action_data_t scenario_action_data[ACTION_TYPE_MAX] = { .xml_parm1 = { .name = "request_id", .type = PARAMETER_TYPE_NUMBER, .min_limit = 0, .max_limit = 19, .key = TR_PARAMETER_TYPE_NUMBER }, }, [ACTION_TYPE_SHOW_CUSTOM_MESSAGE] = { .type = ACTION_TYPE_SHOW_CUSTOM_MESSAGE, .xml_attr = { .name = "show_custom_message", .type = PARAMETER_TYPE_TEXT, .key = TR_ACTION_TYPE_SHOW_CUSTOM_MESSAGE }, - .xml_parm1 = { .name = "message_uid", .type = PARAMETER_TYPE_CUSTOM_MESSAGE, .key = TR_PARAMETER_TYPE_NUMBER }, }, + .xml_parm1 = { .name = "message_uid", .type = PARAMETER_TYPE_CUSTOM_MESSAGE, .key = TR_PARAMETER_TYPE_CUSTOM_MESSAGE }, }, [ACTION_TYPE_TAX_RATE_SET] = { .type = ACTION_TYPE_TAX_RATE_SET, .xml_attr = { .name = "tax_rate_set", .type = PARAMETER_TYPE_TEXT, .key = TR_ACTION_TYPE_TAX_RATE_SET }, .xml_parm1 = { .name = "amount", .type = PARAMETER_TYPE_NUMBER, .min_limit = 0, .max_limit = 25, .key = TR_PARAMETER_TYPE_NUMBER }, }, @@ -258,16 +264,13 @@ static special_attribute_mapping_t special_attribute_mappings_pop_class[] = { #define SPECIAL_ATTRIBUTE_MAPPINGS_POP_CLASS_SIZE (sizeof(special_attribute_mappings_pop_class) / sizeof(special_attribute_mapping_t)) static special_attribute_mapping_t special_attribute_mappings_buildings[] = { - { .type = PARAMETER_TYPE_BUILDING, .text = "none", .value = BUILDING_NONE, .key = TR_PARAMETER_VALUE_BUILDING_NONE }, { .type = PARAMETER_TYPE_BUILDING, .text = "vacant_lot", .value = BUILDING_HOUSE_VACANT_LOT, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "all_farms", .value = BUILDING_MENU_FARMS, .key = TR_PARAMETER_VALUE_BUILDING_MENU_FARMS }, { .type = PARAMETER_TYPE_BUILDING, .text = "all_raw_materials", .value = BUILDING_MENU_RAW_MATERIALS, .key = TR_PARAMETER_VALUE_BUILDING_MENU_RAW_MATERIALS }, { .type = PARAMETER_TYPE_BUILDING, .text = "all_workshops", .value = BUILDING_MENU_WORKSHOPS, .key = TR_PARAMETER_VALUE_BUILDING_MENU_WORKSHOPS }, { .type = PARAMETER_TYPE_BUILDING, .text = "road", .value = BUILDING_ROAD, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "wall", .value = BUILDING_WALL, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "draggable_reservoir", .value = BUILDING_DRAGGABLE_RESERVOIR, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "aqueduct", .value = BUILDING_AQUEDUCT, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "clear_land", .value = BUILDING_CLEAR_LAND, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "house_small_tent", .value = BUILDING_HOUSE_SMALL_TENT, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "house_large_tent", .value = BUILDING_HOUSE_LARGE_TENT, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "house_small_shack", .value = BUILDING_HOUSE_SMALL_SHACK, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, @@ -308,30 +311,27 @@ static special_attribute_mapping_t special_attribute_mappings_buildings[] = { { .type = PARAMETER_TYPE_BUILDING, .text = "hospital", .value = BUILDING_HOSPITAL, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "bathhouse", .value = BUILDING_BATHHOUSE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "barber", .value = BUILDING_BARBER, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "distribution_center", .value = BUILDING_DISTRIBUTION_CENTER_UNUSED, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "school", .value = BUILDING_SCHOOL, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "academy", .value = BUILDING_ACADEMY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "library", .value = BUILDING_LIBRARY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "fort_ground", .value = BUILDING_FORT_GROUND, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "prefecture", .value = BUILDING_PREFECTURE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "triumphal_arch", .value = BUILDING_TRIUMPHAL_ARCH, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "fort", .value = BUILDING_FORT, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "gatehouse", .value = BUILDING_GATEHOUSE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "tower", .value = BUILDING_TOWER, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_ceres", .value = BUILDING_SMALL_TEMPLE_CERES, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_neptune", .value = BUILDING_SMALL_TEMPLE_NEPTUNE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_mercury", .value = BUILDING_SMALL_TEMPLE_MERCURY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_mars", .value = BUILDING_SMALL_TEMPLE_MARS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_venus", .value = BUILDING_SMALL_TEMPLE_VENUS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_ceres", .value = BUILDING_LARGE_TEMPLE_CERES, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_neptune", .value = BUILDING_LARGE_TEMPLE_NEPTUNE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_mercury", .value = BUILDING_LARGE_TEMPLE_MERCURY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_mars", .value = BUILDING_LARGE_TEMPLE_MARS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_venus", .value = BUILDING_LARGE_TEMPLE_VENUS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, + { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_ceres", .value = BUILDING_SMALL_TEMPLE_CERES, .key = TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_CERES }, + { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_neptune", .value = BUILDING_SMALL_TEMPLE_NEPTUNE, .key = TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_NEPTUNE }, + { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_mercury", .value = BUILDING_SMALL_TEMPLE_MERCURY, .key = TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MERCURY }, + { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_mars", .value = BUILDING_SMALL_TEMPLE_MARS, .key = TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MARS }, + { .type = PARAMETER_TYPE_BUILDING, .text = "small_temple_venus", .value = BUILDING_SMALL_TEMPLE_VENUS, .key = TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_VENUS }, + { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_ceres", .value = BUILDING_LARGE_TEMPLE_CERES, .key = TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_CERES }, + { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_neptune", .value = BUILDING_LARGE_TEMPLE_NEPTUNE, .key = TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_NEPTUNE }, + { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_mercury", .value = BUILDING_LARGE_TEMPLE_MERCURY, .key = TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MERCURY }, + { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_mars", .value = BUILDING_LARGE_TEMPLE_MARS, .key = TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MARS }, + { .type = PARAMETER_TYPE_BUILDING, .text = "large_temple_venus", .value = BUILDING_LARGE_TEMPLE_VENUS, .key = TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_VENUS }, { .type = PARAMETER_TYPE_BUILDING, .text = "market", .value = BUILDING_MARKET, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "granary", .value = BUILDING_GRANARY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "warehouse", .value = BUILDING_WAREHOUSE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "warehouse_space", .value = BUILDING_WAREHOUSE_SPACE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "shipyard", .value = BUILDING_SHIPYARD, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "dock", .value = BUILDING_DOCK, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "wharf", .value = BUILDING_WHARF, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, @@ -349,13 +349,12 @@ static special_attribute_mapping_t special_attribute_mappings_buildings[] = { { .type = PARAMETER_TYPE_BUILDING, .text = "reservoir", .value = BUILDING_RESERVOIR, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "fountain", .value = BUILDING_FOUNTAIN, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "well", .value = BUILDING_WELL, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "native_crops", .value = BUILDING_NATIVE_CROPS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, + { .type = PARAMETER_TYPE_BUILDING, .text = "native_crops", .value = BUILDING_NATIVE_CROPS, .key = TR_PARAMETER_VALUE_BUILDING_NATIVE_CROPS }, { .type = PARAMETER_TYPE_BUILDING, .text = "military_academy", .value = BUILDING_MILITARY_ACADEMY, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "barracks", .value = BUILDING_BARRACKS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "all_small_temples", .value = BUILDING_MENU_SMALL_TEMPLES, .key = TR_PARAMETER_VALUE_BUILDING_MENU_SMALL_TEMPLES }, { .type = PARAMETER_TYPE_BUILDING, .text = "all_large_temples", .value = BUILDING_MENU_LARGE_TEMPLES, .key = TR_PARAMETER_VALUE_BUILDING_MENU_LARGE_TEMPLES }, { .type = PARAMETER_TYPE_BUILDING, .text = "oracle", .value = BUILDING_ORACLE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, - { .type = PARAMETER_TYPE_BUILDING, .text = "burning_ruin", .value = BUILDING_BURNING_RUIN, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "wheat_farm", .value = BUILDING_WHEAT_FARM, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "vegetable_farm", .value = BUILDING_VEGETABLE_FARM, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_BUILDING, .text = "fruit_farm", .value = BUILDING_FRUIT_FARM, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, @@ -452,8 +451,9 @@ static special_attribute_mapping_t special_attribute_mappings_buildings[] = { }; +#define SPECIAL_ATTRIBUTE_MAPPINGS_BUILDING_TYPE_SIZE (sizeof(special_attribute_mappings_buildings) / sizeof(special_attribute_mapping_t)) + static special_attribute_mapping_t special_attribute_mappings_allowed_buildings[] = { - { .type = PARAMETER_TYPE_ALLOWED_BUILDING, .text = "none", .value = ALLOWED_BUILDING_NONE, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_ALLOWED_BUILDING, .text = "farms", .value = ALLOWED_BUILDING_FARMS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_ALLOWED_BUILDING, .text = "raw_materials", .value = ALLOWED_BUILDING_RAW_MATERIALS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, { .type = PARAMETER_TYPE_ALLOWED_BUILDING, .text = "workshops", .value = ALLOWED_BUILDING_WORKSHOPS, .key = TR_PARAMETER_VALUE_DYNAMIC_RESOLVE }, @@ -637,7 +637,7 @@ int scenario_events_parameter_data_get_mappings_size(parameter_type type) return SPECIAL_ATTRIBUTE_MAPPINGS_POP_CLASS_SIZE; case PARAMETER_TYPE_BUILDING: case PARAMETER_TYPE_BUILDING_COUNTING: - return BUILDING_TYPE_MAX; + return SPECIAL_ATTRIBUTE_MAPPINGS_BUILDING_TYPE_SIZE; case PARAMETER_TYPE_ALLOWED_BUILDING: return SPECIAL_ATTRIBUTE_MAPPINGS_ALLOWED_BUILDINGS_SIZE; case PARAMETER_TYPE_STANDARD_MESSAGE: @@ -717,3 +717,92 @@ int scenario_events_parameter_data_get_default_value_for_parameter(xml_data_attr return 0; } } + +const uint8_t *scenario_events_parameter_data_get_display_string(special_attribute_mapping_t *entry) +{ + switch (entry->type) { + case PARAMETER_TYPE_BUILDING: + case PARAMETER_TYPE_BUILDING_COUNTING: + if (entry->key == TR_PARAMETER_VALUE_DYNAMIC_RESOLVE) { + return lang_get_building_type_string(entry->value); + } else { + return translation_for(entry->key); + } + break; + case PARAMETER_TYPE_ALLOWED_BUILDING: + if (entry->key == TR_PARAMETER_VALUE_DYNAMIC_RESOLVE) { + return lang_get_string(67, entry->value); + } else { + return translation_for(entry->key); + } + break; + default: + return translation_for(entry->key); + } +} + +void scenario_events_parameter_data_get_display_string_for_value(parameter_type type, int value, uint8_t *result_text, int maxlength) +{ + switch (type) { + case PARAMETER_TYPE_NUMBER: + case PARAMETER_TYPE_MIN_MAX_NUMBER: + string_from_int(result_text, value, 0); + return; + case PARAMETER_TYPE_CUSTOM_VARIABLE: + { + const custom_variable_t *variable = scenario_get_custom_variable(value); + if (variable) { + if (variable->linked_uid) { + const uint8_t *text = variable->linked_uid->text; + result_text = string_copy(text, result_text, maxlength); + } + } + return; + } + case PARAMETER_TYPE_CUSTOM_MESSAGE: + { + custom_message_t *message = custom_messages_get(value); + if (message) { + if (message->linked_uid) { + const uint8_t *text = message->linked_uid->text; + result_text = string_copy(text, result_text, maxlength); + } + } + return; + } + case PARAMETER_TYPE_ROUTE: + { + int city_id = empire_city_get_for_trade_route(value); + if (city_id) { + empire_city *city = empire_city_get(city_id); + const uint8_t *text = empire_city_get_name(city); + result_text = string_copy(text, result_text, maxlength); + } + return; + } + case PARAMETER_TYPE_FUTURE_CITY: + { + empire_city *city = empire_city_get(value); + if (city) { + const uint8_t *text = empire_city_get_name(city); + result_text = string_copy(text, result_text, maxlength); + } + return; + } + case PARAMETER_TYPE_RESOURCE: + { + const uint8_t *text = resource_get_data(value)->text; + result_text = string_copy(text, result_text, maxlength); + return; + } + default: + { + special_attribute_mapping_t *attribute = scenario_events_parameter_data_get_attribute_mapping_by_value(type, value); + if (attribute) { + const uint8_t *text = scenario_events_parameter_data_get_display_string(attribute); + result_text = string_copy(text, result_text, maxlength); + } + return; + } + } +} diff --git a/src/scenario/scenario_events_parameter_data.h b/src/scenario/scenario_events_parameter_data.h index 2839d0d535..17294824d4 100644 --- a/src/scenario/scenario_events_parameter_data.h +++ b/src/scenario/scenario_events_parameter_data.h @@ -75,4 +75,7 @@ int scenario_events_parameter_data_get_mappings_size(parameter_type type); int scenario_events_parameter_data_get_default_value_for_parameter(xml_data_attribute_t *attribute_data); +const uint8_t *scenario_events_parameter_data_get_display_string(special_attribute_mapping_t *entry); +void scenario_events_parameter_data_get_display_string_for_value(parameter_type type, int value, uint8_t *result_text, int maxlength); + #endif // SCENARIO_EVENTS_PARAMETER_DATA_H diff --git a/src/translation/english.c b/src/translation/english.c index 057912e121..e2906e90fe 100644 --- a/src/translation/english.c +++ b/src/translation/english.c @@ -1065,6 +1065,7 @@ static translation_string all_strings[] = { {TR_PARAMETER_SET_BUY_PRICE, "Set buy price?"}, {TR_PARAMETER_CHECK_FOR_OPEN, "Check for route being open?"}, {TR_PARAMETER_RESPECT_SETTINGS, "Respect storage settings?"}, + {TR_PARAMETER_TYPE_CUSTOM_MESSAGE, "Custom message"}, {TR_PARAMETER_TYPE_CUSTOM_VARIABLE, "Custom variable"}, {TR_PARAMETER_TYPE_RATING_TYPE, "Rating type"}, {TR_PARAMETER_TYPE_STORAGE_TYPE, "Storage type"}, @@ -1143,6 +1144,17 @@ static translation_string all_strings[] = { {TR_PARAMETER_VALUE_BUILDING_MENU_PARKS, "All decorative parks"}, {TR_PARAMETER_VALUE_BUILDING_MENU_SMALL_TEMPLES, "All small temples"}, {TR_PARAMETER_VALUE_BUILDING_MENU_LARGE_TEMPLES, "All large temples"}, + {TR_PARAMETER_VALUE_BUILDING_NATIVE_CROPS, "Native crops"}, + {TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_CERES, "Small Ceres temple"}, + {TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_NEPTUNE, "Small Neptune temple"}, + {TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MERCURY, "Small Mercury temple"}, + {TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MARS, "Small Mars temple"}, + {TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_VENUS, "Small Venus temple"}, + {TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_CERES, "Large Ceres temple"}, + {TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_NEPTUNE, "Large Neptune temple"}, + {TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MERCURY, "Large Mercury temple"}, + {TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MARS, "Large Mars temple"}, + {TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_VENUS, "Large Venus temple"}, {TR_PARAMETER_VALUE_DYNAMIC_RESOLVE, "..."}, {TR_PARAMETER_VALUE_NONE, "None"}, {TR_PARAMETER_VALUE_MESSAGE_CITY_IN_DEBT, "City in debt"}, diff --git a/src/translation/translation.h b/src/translation/translation.h index 9d65442af8..31374187bf 100644 --- a/src/translation/translation.h +++ b/src/translation/translation.h @@ -1060,6 +1060,7 @@ typedef enum { TR_PARAMETER_SET_BUY_PRICE, TR_PARAMETER_CHECK_FOR_OPEN, TR_PARAMETER_RESPECT_SETTINGS, + TR_PARAMETER_TYPE_CUSTOM_MESSAGE, TR_PARAMETER_TYPE_CUSTOM_VARIABLE, TR_PARAMETER_TYPE_RATING_TYPE, TR_CONDITION_TYPE_TIME_PASSED, @@ -1137,6 +1138,17 @@ typedef enum { TR_PARAMETER_VALUE_BUILDING_MENU_PARKS, TR_PARAMETER_VALUE_BUILDING_MENU_SMALL_TEMPLES, TR_PARAMETER_VALUE_BUILDING_MENU_LARGE_TEMPLES, + TR_PARAMETER_VALUE_BUILDING_NATIVE_CROPS, + TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_CERES, + TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_NEPTUNE, + TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MERCURY, + TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_MARS, + TR_PARAMETER_VALUE_BUILDING_SMALL_TEMPLE_VENUS, + TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_CERES, + TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_NEPTUNE, + TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MERCURY, + TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_MARS, + TR_PARAMETER_VALUE_BUILDING_LARGE_TEMPLE_VENUS, TR_PARAMETER_VALUE_DYNAMIC_RESOLVE, TR_PARAMETER_VALUE_NONE, TR_PARAMETER_VALUE_MESSAGE_CITY_IN_DEBT, diff --git a/src/window/editor/scenario_action_edit.c b/src/window/editor/scenario_action_edit.c index 339788802f..bcbbd15298 100644 --- a/src/window/editor/scenario_action_edit.c +++ b/src/window/editor/scenario_action_edit.c @@ -24,9 +24,10 @@ #include "window/select_list.h" #define BUTTON_LEFT_PADDING 32 -#define BUTTON_WIDTH 320 +#define BUTTON_WIDTH 608 #define DETAILS_Y_OFFSET 128 #define DETAILS_ROW_HEIGHT 32 +#define MAX_TEXT_LENGTH 50 static void init(scenario_action_t *action); static void button_amount(int param1, int param2); @@ -55,10 +56,19 @@ static struct { int parameter_being_edited; int parameter_being_edited_current_value; + uint8_t display_text[MAX_TEXT_LENGTH]; + scenario_action_t *action; scenario_action_data_t *xml_info; } data; +static uint8_t *translation_for_param_value(parameter_type type, int value) +{ + memset(data.display_text, 0, MAX_TEXT_LENGTH); + scenario_events_parameter_data_get_display_string_for_value(type, value, data.display_text, MAX_TEXT_LENGTH); + return data.display_text; +} + static void init(scenario_action_t *action) { data.action = action; @@ -74,7 +84,7 @@ static void draw_foreground(void) { graphics_in_dialog(); - outer_panel_draw(16, 16, 24, 24); + outer_panel_draw(0, 0, 42, 24); for (int i = 5; i <= 6; i++) { large_label_draw(buttons[i].x, buttons[i].y, buttons[i].width / 16, data.focus_button_id == i + 1 ? 1 : 0); @@ -84,42 +94,65 @@ static void draw_foreground(void) text_draw_centered(translation_for(data.xml_info->xml_attr.key), 32, 72, BUTTON_WIDTH, FONT_NORMAL_GREEN, COLOR_MASK_NONE); - int y_offset = DETAILS_Y_OFFSET; int button_id = 0; if (data.xml_info->xml_parm1.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm1.key), data.action->parameter1, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm1.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm1.type, data.action->parameter1), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm2.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm2.key), data.action->parameter2, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm2.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm2.type, data.action->parameter2), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm3.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm3.key), data.action->parameter3, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm3.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm3.type, data.action->parameter3), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm4.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm4.key), data.action->parameter4, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm4.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm4.type, data.action->parameter4), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm5.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm5.key), data.action->parameter5, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm5.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm5.type, data.action->parameter5), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; - button_id++; lang_text_draw_centered(13, 3, 32, 32 + 16 * 20, BUTTON_WIDTH, FONT_NORMAL_BLACK); diff --git a/src/window/editor/scenario_condition_edit.c b/src/window/editor/scenario_condition_edit.c index 5f07a828a9..e66db1aa22 100644 --- a/src/window/editor/scenario_condition_edit.c +++ b/src/window/editor/scenario_condition_edit.c @@ -24,9 +24,10 @@ #include "window/select_list.h" #define BUTTON_LEFT_PADDING 32 -#define BUTTON_WIDTH 320 +#define BUTTON_WIDTH 608 #define DETAILS_Y_OFFSET 128 #define DETAILS_ROW_HEIGHT 32 +#define MAX_TEXT_LENGTH 50 static void init(scenario_condition_t *condition); static void button_amount(int param1, int param2); @@ -55,10 +56,19 @@ static struct { int parameter_being_edited; int parameter_being_edited_current_value; + uint8_t display_text[MAX_TEXT_LENGTH]; + scenario_condition_t *condition; scenario_condition_data_t *xml_info; } data; +static uint8_t *translation_for_param_value(parameter_type type, int value) +{ + memset(data.display_text, 0, MAX_TEXT_LENGTH); + scenario_events_parameter_data_get_display_string_for_value(type, value, data.display_text, MAX_TEXT_LENGTH); + return data.display_text; +} + static void init(scenario_condition_t *condition) { data.condition = condition; @@ -74,7 +84,7 @@ static void draw_foreground(void) { graphics_in_dialog(); - outer_panel_draw(16, 16, 24, 24); + outer_panel_draw(0, 0, 42, 24); for (int i = 5; i <= 6; i++) { large_label_draw(buttons[i].x, buttons[i].y, buttons[i].width / 16, data.focus_button_id == i + 1 ? 1 : 0); @@ -84,42 +94,65 @@ static void draw_foreground(void) text_draw_centered(translation_for(data.xml_info->xml_attr.key), 32, 72, BUTTON_WIDTH, FONT_NORMAL_GREEN, COLOR_MASK_NONE); - int y_offset = DETAILS_Y_OFFSET; int button_id = 0; if (data.xml_info->xml_parm1.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm1.key), data.condition->parameter1, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm1.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm1.type, data.condition->parameter1), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm2.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm2.key), data.condition->parameter2, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm2.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm2.type, data.condition->parameter2), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm3.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm3.key), data.condition->parameter3, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm3.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm3.type, data.condition->parameter3), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm4.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm4.key), data.condition->parameter4, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm4.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm4.type, data.condition->parameter4), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; button_id++; if (data.xml_info->xml_parm5.type > PARAMETER_TYPE_UNDEFINED) { - large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, data.focus_button_id == button_id + 1 ? 1 : 0); - text_draw_label_and_number(translation_for(data.xml_info->xml_parm5.key), data.condition->parameter5, "", 64, y_offset + 8, FONT_NORMAL_GREEN, COLOR_MASK_NONE); + large_label_draw(buttons[button_id].x, buttons[button_id].y, buttons[button_id].width / 16, + data.focus_button_id == button_id + 1 ? 1 : 0); + text_draw_centered(translation_for(data.xml_info->xml_parm5.key), + buttons[button_id].x, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); + text_draw_centered(translation_for_param_value(data.xml_info->xml_parm5.type, data.condition->parameter5), + buttons[button_id].x + BUTTON_WIDTH / 2, buttons[button_id].y + 8, buttons[button_id].width / 2, + FONT_NORMAL_GREEN, COLOR_MASK_NONE); } - y_offset += DETAILS_ROW_HEIGHT; - button_id++; lang_text_draw_centered(13, 3, 32, 32 + 16 * 20, BUTTON_WIDTH, FONT_NORMAL_BLACK); diff --git a/src/window/editor/scenario_event_details.c b/src/window/editor/scenario_event_details.c index 555d729ae6..677921e8ad 100644 --- a/src/window/editor/scenario_event_details.c +++ b/src/window/editor/scenario_event_details.c @@ -213,7 +213,7 @@ static void draw_foreground(void) { graphics_in_dialog(); - outer_panel_draw(16, 16, 42, 37); + outer_panel_draw(0, 0, 42, 38); for (int i = 0; i < 4; i++) { large_label_draw(buttons[i].x, buttons[i].y, buttons[i].width / 16, data.focus_button_id == i + 1 ? 1 : 0); diff --git a/src/window/editor/select_special_attribute_mapping.c b/src/window/editor/select_special_attribute_mapping.c index eddff2cd33..5670b94474 100644 --- a/src/window/editor/select_special_attribute_mapping.c +++ b/src/window/editor/select_special_attribute_mapping.c @@ -79,7 +79,7 @@ static const uint8_t *get_display_string(special_attribute_mapping_t *entry) case PARAMETER_TYPE_BUILDING: case PARAMETER_TYPE_BUILDING_COUNTING: if (entry->key == TR_PARAMETER_VALUE_DYNAMIC_RESOLVE) { - return lang_get_string(28, entry->value); + return lang_get_building_type_string(entry->value); } else { return translation_for(entry->key); }