Quick answer: Reset color, font, alpha after every surface_set_target / draw_clear.
UI surface re-renders. draw_set_color(c_red) set in Create. draw_text in surface ignores color. State reset across the surface boundary.
The Fix
// Draw event
surface_set_target(ui_surf);
draw_clear_alpha(c_black, 0);
// Reapply state — required after clear
draw_set_color(c_red);
draw_set_alpha(1);
draw_set_font(fnt_small);
draw_set_halign(fa_left);
draw_set_valign(fa_top);
draw_text(10, 10, "Score: " + string(score));
surface_reset_target();
Wrap your render path in a helper that re-sets state every time it begins drawing to a surface. Catches the gotcha proactively.
Verifying
Color appears as set. Removing the reapply lines: color reverts to white or last app-global state.
“Reset state. Then draw. Color holds.”
Related Issues
For tilemap cache, see tilemap cache. For instance deactivate, see deactivate.
Reapply after clear. Color sticks.