sint32 font_sprite_get_codepoint_sprite(sint32 fontSpriteBase, sint32 codepoint) { return SPR_CHAR_START + (IMAGE_TYPE_REMAP | (fontSpriteBase + font_sprite_get_codepoint_offset(codepoint))); }
sint32 font_sprite_get_codepoint_width(sint32 fontSpriteBase, sint32 codepoint) { return _spriteFontCharacterWidths[fontSpriteBase + font_sprite_get_codepoint_offset(codepoint)]; }
void scrolling_text_initialise_bitmaps() { uint8 drawingSurface[64]; rct_drawpixelinfo dpi = { .bits = (uint8 *)&drawingSurface, .x = 0, .y = 0, .width = 8, .height = 8, .pitch = 0, .zoom_level = 0 }; for (sint32 i = 0; i < 224; i++) { memset(drawingSurface, 0, sizeof(drawingSurface)); gfx_draw_sprite_software(&dpi, SPR_CHAR_START + FONT_SPRITE_BASE_TINY + i, -1, 0, 0); for (sint32 x = 0; x < 8; x++) { uint8 val = 0; for (sint32 y = 0; y < 8; y++) { val >>= 1; if (dpi.bits[x + y * 8] == 1) { val |= 0x80; } } _characterBitmaps[i * 8 + x] = val; } } for (sint32 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(sint32 codepoint) { return &_characterBitmaps[font_sprite_get_codepoint_offset(codepoint) * 8]; } static sint32 scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 scroll, uint16 scrollingMode) { uint32 oldestId = 0xFFFFFFFF; sint32 scrollIndex = -1; for (sint32 i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++) { rct_draw_scroll_text *scrollText = &_drawScrollTextList[i]; if (oldestId >= scrollText->id) { oldestId = scrollText->id; scrollIndex = i; } // If exact match return the matching index uint32 stringArgs0, stringArgs1; memcpy(&stringArgs0, gCommonFormatArgs + 0, sizeof(uint32)); memcpy(&stringArgs1, gCommonFormatArgs + 4, sizeof(uint32)); if ( scrollText->string_id == stringId && scrollText->string_args_0 == stringArgs0 && scrollText->string_args_1 == stringArgs1 && scrollText->position == scroll && scrollText->mode == scrollingMode ) { scrollText->id = _drawSCrollNextIndex; return i + SPR_SCROLLING_TEXT_START; } } return scrollIndex; }
int font_sprite_get_codepoint_sprite(int fontSpriteBase, int codepoint) { return SPR_CHAR_START + ((IMAGE_TYPE_USE_PALETTE << 28) | (fontSpriteBase + font_sprite_get_codepoint_offset(codepoint))); }
void scrolling_text_initialise_bitmaps() { uint8 drawingSurface[64]; rct_drawpixelinfo dpi = { .bits = (uint8 *)&drawingSurface, .x = 0, .y = 0, .width = 8, .height = 8, .pitch = 0, .zoom_level = 0 }; for (int i = 0; i < 224; i++) { memset(drawingSurface, 0, sizeof(drawingSurface)); gfx_draw_sprite(&dpi, i + 0x10D5, -1, 0, 0); for (int x = 0; x < 8; x++) { uint8 val = 0; for (int y = 0; y < 8; y++) { val >>= 1; if (dpi.bits[x + y * 8] == 1) { val |= 0x80; } } gCharacterBitmaps[i * 8 + x] = val; } } } static uint8 *font_sprite_get_codepoint_bitmap(int codepoint) { return &gCharacterBitmaps[font_sprite_get_codepoint_offset(codepoint) * 8]; } static int scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 scroll, uint16 scrollingMode) { uint32 oldestId = 0xFFFFFFFF; int scrollIndex = -1; rct_draw_scroll_text* oldestScroll = NULL; for (int i = 0; i < 32; i++) { rct_draw_scroll_text *scrollText = &gDrawScrollTextList[i]; if (oldestId >= scrollText->id) { oldestId = scrollText->id; scrollIndex = i; oldestScroll = scrollText; } // If exact match return the matching index if ( scrollText->string_id == stringId && scrollText->string_args_0 == RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) && scrollText->string_args_1 == RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) && scrollText->position == scroll && scrollText->mode == scrollingMode ) { scrollText->id = RCT2_GLOBAL(RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID, uint32); return i + 0x606; } } return scrollIndex; }