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.