diff --git a/src/addresses.h b/src/addresses.h index e4cdadcc90..17c8863cc4 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -114,10 +114,6 @@ #define RCT2_ADDRESS_VEHICLE_SOUND_LIST 0x009AF288 -#define RCT2_ADDRESS_DRAW_SCROLL_LIST 0x009C3840 - -#define RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID 0x009D7A80 - #define RCT2_ADDRESS_INPUT_FLAGS 0x009DE518 #define RCT2_ADDRESS_INPUT_STATE 0x009DE51D #define RCT2_ADDRESS_CURSOR_DOWN_WINDOWCLASS 0x009DE51F @@ -190,11 +186,6 @@ #define RCT2_ADDRESS_VOLUME_ADJUST_ZOOM 0x00F438AC -// Each character is painted onto a drawing surface -// any coloured pixels are marked in this bitmap -// 8 x 8 in size. -#define RCT2_ADDRESS_CHARACTER_BITMAP 0x00F4393C - #define RCT2_ADDRESS_ABOVE_GROUND_FLAGS 0x00F441D4 #define RCT2_ADDRESS_TRACK_LIST 0x00F441EC @@ -359,6 +350,9 @@ #define RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST 0x009ADAEC #define RCT2_ADDRESS_TOTAL_NO_IMAGES 0x009ADAF0 +#define RCT2_ADDRESS_DRAW_SCROLL_LIST 0x009C3840 +#define RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID 0x009D7A80 + #define RCT2_ADDRESS_CURENT_CURSOR 0x009DE51C #define RCT2_ADDRESS_TOOL_WINDOWNUMBER 0x009DE542 #define RCT2_ADDRESS_TOOL_WINDOWCLASS 0x009DE544 @@ -464,6 +458,11 @@ #define RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX 0x00F43908 #define RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB 0x00F4390A +// Each character is painted onto a drawing surface +// any coloured pixels are marked in this bitmap +// 8 x 8 in size. +#define RCT2_ADDRESS_CHARACTER_BITMAP 0x00F4393C + #define RCT2_ADDRESS_TRACK_PREVIEW_ROTATION 0x00F440AE #define RCT2_ADDRESS_TRACK_PREVIEW_X_MIN 0x00F440F9 #define RCT2_ADDRESS_TRACK_PREVIEW_X_MAX 0x00F440FB diff --git a/src/drawing/font.c b/src/drawing/font.c index 632762a3ed..7b7c3b24f3 100644 --- a/src/drawing/font.c +++ b/src/drawing/font.c @@ -47,16 +47,6 @@ void font_sprite_initialise_characters() } scrolling_text_initialise_bitmaps(); - - for (int i = 0; i < 32; i++) { - rct_g1_element* g1 = &g1Elements[0x606 + i]; - uint8* unknown_pointer = RCT2_ADDRESS(0x009C3852, uint8) + 0xA12 * i; - g1->offset = unknown_pointer; - g1->width = 64; - g1->height = 40; - *((uint16*)unknown_pointer) = 0xFFFF; - *((uint32*)(unknown_pointer + 0x0E)) = 0; - } } int font_sprite_get_codepoint_offset(int codepoint) diff --git a/src/drawing/scrolling_text.c b/src/drawing/scrolling_text.c index 5b14fcee24..baa43b2072 100644 --- a/src/drawing/scrolling_text.c +++ b/src/drawing/scrolling_text.c @@ -18,8 +18,8 @@ #include "../config.h" #include "../interface/colour.h" #include "../localisation/localisation.h" -#include "drawing.h" #include "../sprites.h" +#include "drawing.h" #pragma pack(push, 1) /* size: 0xA12 */ @@ -35,8 +35,11 @@ typedef struct rct_draw_scroll_text { assert_struct_size(rct_draw_scroll_text, 0xA12); #pragma pack(pop) -rct_draw_scroll_text *gDrawScrollTextList = RCT2_ADDRESS(RCT2_ADDRESS_DRAW_SCROLL_LIST, rct_draw_scroll_text); -uint8 *gCharacterBitmaps = RCT2_ADDRESS(RCT2_ADDRESS_CHARACTER_BITMAP, uint8); +#define MAX_SCROLLING_TEXT_ENTRIES 32 + +static rct_draw_scroll_text _drawScrollTextList[MAX_SCROLLING_TEXT_ENTRIES]; +static uint8 _characterBitmaps[224 * 8]; +static uint32 _drawSCrollNextIndex = 0; void scrolling_text_set_bitmap_for_sprite(utf8 *text, int scroll, uint8 *bitmap, const sint16 *scrollPositionOffsets); void scrolling_text_set_bitmap_for_ttf(utf8 *text, int scroll, uint8 *bitmap, const sint16 *scrollPositionOffsets); @@ -67,15 +70,27 @@ void scrolling_text_initialise_bitmaps() val |= 0x80; } } - gCharacterBitmaps[i * 8 + x] = val; + _characterBitmaps[i * 8 + x] = val; } + } + for (int i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++) { + rct_g1_element *g1 = &g1Elements[SPR_SCROLLING_TEXT_START + i]; + g1->offset = _drawScrollTextList[i].bitmap; + g1->width = 64; + g1->height = 40; + g1->offset[0] = 0xFF; + g1->offset[1] = 0xFF; + g1->offset[14] = 0; + g1->offset[15] = 0; + g1->offset[16] = 0; + g1->offset[17] = 0; } } static uint8 *font_sprite_get_codepoint_bitmap(int codepoint) { - return &gCharacterBitmaps[font_sprite_get_codepoint_offset(codepoint) * 8]; + return &_characterBitmaps[font_sprite_get_codepoint_offset(codepoint) * 8]; } @@ -83,8 +98,8 @@ static int scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 { uint32 oldestId = 0xFFFFFFFF; int scrollIndex = -1; - for (int i = 0; i < 32; i++) { - rct_draw_scroll_text *scrollText = &gDrawScrollTextList[i]; + for (int i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++) { + rct_draw_scroll_text *scrollText = &_drawScrollTextList[i]; if (oldestId >= scrollText->id) { oldestId = scrollText->id; scrollIndex = i; @@ -101,7 +116,7 @@ static int scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 scrollText->position == scroll && scrollText->mode == scrollingMode ) { - scrollText->id = RCT2_GLOBAL(RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID, uint32); + scrollText->id = _drawSCrollNextIndex; return i + SPR_SCROLLING_TEXT_START; } } @@ -1401,15 +1416,11 @@ static const sint16* _scrollPositions[38] = { */ int scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrollingMode) { - if (TempForScrollText) { - memcpy(gCommonFormatArgs, RCT2_ADDRESS(0x013CE952, const void), 16); - } - rct_drawpixelinfo* dpi = unk_140E9A8; if (dpi->zoom_level != 0) return SPR_SCROLLING_TEXT_DEFAULT; - RCT2_GLOBAL(RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID, uint32)++; + _drawSCrollNextIndex++; int scrollIndex = scrolling_text_get_matching_or_oldest(stringId, scroll, scrollingMode); if (scrollIndex >= SPR_SCROLLING_TEXT_START) return scrollIndex; @@ -1419,13 +1430,13 @@ int scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrolling memcpy(&stringArgs0, gCommonFormatArgs + 0, sizeof(uint32)); memcpy(&stringArgs1, gCommonFormatArgs + 4, sizeof(uint32)); - rct_draw_scroll_text* scrollText = &gDrawScrollTextList[scrollIndex]; + rct_draw_scroll_text* scrollText = &_drawScrollTextList[scrollIndex]; scrollText->string_id = stringId; scrollText->string_args_0 = stringArgs0; scrollText->string_args_1 = stringArgs1; scrollText->position = scroll; scrollText->mode = scrollingMode; - scrollText->id = RCT2_GLOBAL(RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID, uint32); + scrollText->id = _drawSCrollNextIndex; // Create the string to draw utf8 scrollString[256];