Deltarune (Chapter 4) script viewer

← back to main script listing

gml_Object_obj_rhythmgame_Other_12

(view raw script w/o annotations or w/e)
1
if (draw_lyrics && current_lyric != "" && i_ex(vocals) && lyric_count > 0)
2
{
3
    var _len = string_length(current_lyric);
4
    var _len2 = 0;
5
    if (string_pos("#", current_lyric) > 0)
6
    {
7
        _len = string_pos("#", current_lyric) - 1;
8
        _len2 = string_length(current_lyric) - (_len + 1);
9
    }
10
    var _textx = camerax() + 320;
11
    var _texty = cameray() + 420;
12
    var _maxlength = array_length(lyric_end);
13
    if (_maxlength == 0)
14
        exit;
15
    var _current_note = max(0, _maxlength - 1);
16
    var _lerp = 1;
17
    draw_set_halign(fa_center);
18
    draw_set_valign(fa_middle);
19
    draw_set_font(
scr_84_get_font
scr_84_get_font

function
scr_84_get_font(arg0)
{ if (!variable_global_exists("chemg_last_get_font")) global.chemg_last_get_font = ""; if (arg0 != global.chemg_last_get_font) global.chemg_last_get_font = arg0; return ds_map_find_value(global.font_map, arg0); }
("main"));
20
    if (update_lyrics)
21
    {
22
        with (vocals)
23
        {
24
            for (i = other.lyric_start_index; i < maxnote; i++)
25
            {
26
                if (other.trackpos < noteend[i])
27
                {
28
                    other.lyric_start_index = i;
29
                    break;
30
                }
31
            }
32
        }
33
        if (is_undefined(lyric_surface) || !surface_exists(lyric_surface))
34
            lyric_surface = surface_create(640, 100);
35
        var _hspace = (global.lang == "ja") ? 16 : 8;
36
        scr_draw_text_monospace(_textx, _texty, censored_lyric, _hspace, 18, _len, true, 2, 2, _len2);
37
        surface_set_target(lyric_surface);
38
        draw_clear(c_black);
39
        draw_set_color(c_white);
40
        scr_draw_text_monospace(320, 50, current_lyric, _hspace, 18, _len, false, 2, 2, _len2);
41
        surface_reset_target();
42
        lyric_sprite[0] = sprite_create_from_surface(lyric_surface, 0, 0, 640, 100, true, false, 320, 50);
43
        surface_set_target(lyric_surface);
44
        draw_clear(c_black);
45
        draw_set_color(c_white);
46
        scr_draw_text_monospace(320, 50, censored_lyric, _hspace, 18, _len, false, 2, 2, _len2);
47
        surface_reset_target();
48
        lyric_sprite[1] = sprite_create_from_surface(lyric_surface, 0, 0, 640, 100, true, false, 320, 50);
49
        update_lyrics = false;
50
    }
51
    with (vocals)
52
    {
53
        for (i = 0; i < _maxlength; i++)
54
        {
55
            var _index = i + other.lyric_start_index;
56
            if (_index >= maxnote)
57
                break;
58
            if (other.trackpos < noteend[_index])
59
            {
60
                _current_note = clamp(i, 0, _maxlength - 1);
61
                _lerp = clamp01(inverselerp(notetime[_index], noteend[_index], other.trackpos));
62
                
scr_debug_print_persistent
scr_debug_print_persistent

function
scr_debug_print_persistent(arg0, arg1)
{ } function debug_print_persistent(arg0, arg1) { } function scr_debug_delete_persistent(arg0, arg1 = false) { } function scr_debug_clear_persistent() { }
("lerp", string(notetime[_index]) + " - " + string(noteend[_index]) + " - " + string(_lerp));
63
                break;
64
            }
65
        }
66
    }
67
    var _progress = lerp(lyric_start[_current_note], lyric_end[_current_note], _lerp);
68
    if (_current_note == 0 && trackpos < vocals.notetime[lyric_start_index])
69
        _progress = _textx - 320;
70
    scr_draw_set_mask(false);
71
    ossafe_fill_rectangle(_textx - 320, _texty - 48, _textx + 320, _texty + 48);
72
    draw_set_alpha(1);
73
    if (_len2 > 0)
74
    {
75
        if (_current_note < line_switch)
76
        {
77
            ossafe_fill_rectangle(_progress, _texty - 48, _textx + 320, _texty);
78
            ossafe_fill_rectangle(_textx - 320, _texty, _textx + 320, _texty + 48);
79
        }
80
        else
81
        {
82
            ossafe_fill_rectangle(_progress, _texty, _textx + 320, _texty + 48);
83
        }
84
    }
85
    else
86
    {
87
        ossafe_fill_rectangle(_progress, _texty - 24, _textx + 320, _texty + 24);
88
    }
89
    scr_draw_in_mask_begin();
90
    draw_set_color(c_black);
91
    draw_sprite_ext(lyric_sprite[0], 0, _textx - 2, _texty, 1, 1, 0, c_black, 1);
92
    draw_sprite_ext(lyric_sprite[0], 0, _textx + 2, _texty, 1, 1, 0, c_black, 1);
93
    draw_sprite_ext(lyric_sprite[0], 0, _textx, _texty - 2, 1, 1, 0, c_black, 1);
94
    draw_sprite_ext(lyric_sprite[0], 0, _textx, _texty + 2, 1, 1, 0, c_black, 1);
95
    draw_sprite_ext(lyric_sprite[0], 0, _textx, _texty, 1, 1, 0, c_white, 1);
96
    scr_draw_in_mask_end();
97
    scr_draw_set_mask(false);
98
    ossafe_fill_rectangle(_textx - 320, _texty - 24, _textx + 320, _texty + 24);
99
    draw_set_alpha(1);
100
    if (_len2 > 0)
101
    {
102
        if (_current_note < line_switch)
103
        {
104
            ossafe_fill_rectangle(_textx - 320, _texty - 48, _progress, _texty);
105
        }
106
        else
107
        {
108
            ossafe_fill_rectangle(_textx - 320, _texty - 48, _textx + 320, _texty);
109
            ossafe_fill_rectangle(_textx - 320, _texty, _progress, _texty + 48);
110
        }
111
    }
112
    else
113
    {
114
        ossafe_fill_rectangle(_textx - 320, _texty - 24, _progress, _texty + 24);
115
    }
116
    scr_draw_in_mask_begin();
117
    draw_sprite_ext(lyric_sprite[1], 0, _textx - 2, _texty, 1, 1, 0, c_white, 1);
118
    draw_sprite_ext(lyric_sprite[1], 0, _textx + 2, _texty, 1, 1, 0, c_white, 1);
119
    draw_sprite_ext(lyric_sprite[1], 0, _textx, _texty - 2, 1, 1, 0, c_white, 1);
120
    draw_sprite_ext(lyric_sprite[1], 0, _textx, _texty + 2, 1, 1, 0, c_white, 1);
121
    draw_sprite_ext(lyric_sprite[1], 0, _textx, _texty, 1, 1, 0, c_blue, 1);
122
    scr_draw_in_mask_end();
123
    draw_set_halign(fa_left);
124
    draw_set_valign(fa_top);
125
    draw_set_color(c_white);
126
}