Deltarune (Chapter Select) script viewer

← back to main script listing

gml_Object_obj_CHAPTER_SELECT_old_Draw_0

(view raw script w/o annotations or w/e)
1
if (!audio_group_is_loaded(0))
2
    exit;
3
if (!init_loaded)
4
    exit;
5
draw_set_font(text_font);
6
draw_set_halign(fa_center);
7
draw_set_color(c_gray);
8
draw_set_halign(fa_left);
9
draw_set_color(c_white);
10
if (timer < 20)
11
    timer++;
12
if (con == "init")
13
{
14
    if (timer == 15)
15
        con = "start";
16
}
17
if (con == "start")
18
{
19
    file_found = false;
20
    if (ossafe_file_exists("dr.ini"))
21
    {
22
        ossafe_ini_open("dr.ini");
23
        ossafe_ini_close();
24
    }
25
    for (var i = 0; i < 7; i++)
26
    {
27
        var filename = "filech" + string(i) + "_";
28
        if (ossafe_file_exists(filename + string(3)) || ossafe_file_exists(filename + string(4)) || ossafe_file_exists(filename + string(5)))
29
            highestCompletedChapter = i;
30
        if (highestCompletedChapter > 0)
31
            file_found = true;
32
    }
33
    for (var i = 0; i < 7; i++)
34
    {
35
        var filename = "filech" + string(i) + "_";
36
        if (ossafe_file_exists(filename + string(0)) || ossafe_file_exists(filename + string(1)) || ossafe_file_exists(filename + string(2)))
37
            highestUncompletedChapter = i;
38
        if (highestUncompletedChapter > 0)
39
            file_found = true;
40
    }
41
    if (file_found == false)
42
    {
43
        con = "nofile";
44
        fade = fademax;
45
        timer = 0;
46
        mpos = 0;
47
    }
48
    else
49
    {
50
        con = "filefound";
51
        fade = fademax;
52
        timer = 0;
53
        mpos = 0;
54
    }
55
}
56
if (con == "nofile")
57
{
58
    if (fade != 0)
59
        fade = lerp(fade, 0, 0.125);
60
    xx = 160 * scale;
61
    yy = 110 * scale;
62
    mspace = 20 * scale;
63
    fadescaled = fade * scale;
64
    drawcolor = merge_color(c_white, c_black, fade / fademax);
65
    draw_set_color(drawcolor);
66
    my_stringset = (global.lang == "en") ? "Would you like to start from Chapter 1?" : "Chapter 1から始めますか?";
67
    draw_set_font(text_font);
68
    draw_set_halign(fa_center);
69
    draw_text_transformed(xx, yy - fadescaled, my_stringset, scale, scale, 0);
70
    draw_set_color(c_white);
71
    if (mpos == 0)
72
        draw_set_color(c_yellow);
73
    else
74
        draw_set_color(c_white);
75
    draw_text_transformed(xx, (((20 * scale) + yy) - fadescaled) + (mspace * 0), yes, scale, scale, 0);
76
    if (mpos == 1)
77
        draw_set_color(c_yellow);
78
    else
79
        draw_set_color(c_white);
80
    draw_text_transformed(xx, (((20 * scale) + yy) - fadescaled) + (mspace * 1), no, scale, scale, 0);
81
    if (mpos == 0)
82
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(yes) / 2) * scale) - (13 * scale), (((20 * scale) + yy) - fadescaled) + (mspace * mpos) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
83
    if (mpos == 1)
84
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(no) / 2) * scale) - (13 * scale), (((20 * scale) + yy) - fadescaled) + (mspace * mpos) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
85
    if (up_p())
86
    {
87
        mpos--;
88
        move_noise = true;
89
    }
90
    if (down_p())
91
    {
92
        mpos++;
93
        move_noise = true;
94
    }
95
    mpos = clamp(mpos, 0, 1);
96
    if (button1_p() && timer > 10)
97
    {
98
        select_noise = true;
99
        switch (mpos)
100
        {
101
            case 0:
102
                chaptertoload = 1;
103
                con = "gameload";
104
                break;
105
            case 1:
106
                mpos = 0;
107
                con = "chapterselect";
108
                break;
109
        }
110
    }
111
}
112
if (con == "filefound")
113
{
114
    fade = fademax;
115
    mpos = 0;
116
    timer = 0;
117
    if (highestCompletedChapter == highestUncompletedChapter)
118
        con = "startNextChapter";
119
    else
120
        con = "continueChapter";
121
}
122
if (con == "startNextChapter")
123
{
124
    if (highestCompletedChapter >= latestAvailableChapter)
125
    {
126
        con = "chapterselect";
127
        exit;
128
    }
129
    if (fade != 0)
130
        fade = lerp(fade, 0, 0.125);
131
    xx = 160 * scale;
132
    yy = 110 * scale;
133
    mspace = 20 * scale;
134
    fadescaled = fade * scale;
135
    drawcolor = merge_color(c_white, c_black, fade / fademax);
136
    draw_set_color(drawcolor);
137
    my_stringset = "Chapter " + string(highestCompletedChapter) + " was completed.";
138
    stringset2 = "Play Chapter " + string(highestCompletedChapter + 1);
139
    if (global.lang == "ja")
140
    {
141
        my_stringset = "Chapter " + string(highestCompletedChapter) + "はクリア済みです。";
142
        stringset2 = "Chapter " + string(highestCompletedChapter + 1) + "をプレイ";
143
    }
144
    draw_set_font(text_font);
145
    draw_set_halign(fa_center);
146
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 0), my_stringset, scale, scale, 0);
147
    if (mpos == 0)
148
        draw_set_color(c_yellow);
149
    else
150
        draw_set_color(c_white);
151
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 1), stringset2, scale, scale, 0);
152
    if (mpos == 1)
153
        draw_set_color(c_yellow);
154
    else
155
        draw_set_color(c_white);
156
    var select_text = (global.lang == "en") ? "Chapter Select" : "チャプター選択";
157
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 2), select_text, scale, scale, 0);
158
    if (mpos == 0)
159
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(stringset2) / 2) * scale) - (13 * scale), (yy - fadescaled) + (mspace * 1) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
160
    if (mpos == 1)
161
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(select_text) / 2) * scale) - (13 * scale), (yy - fadescaled) + (mspace * 2) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
162
    if (up_p())
163
    {
164
        mpos--;
165
        move_noise = true;
166
    }
167
    if (down_p())
168
    {
169
        mpos++;
170
        move_noise = true;
171
    }
172
    mpos = clamp(mpos, 0, 1);
173
    if (button1_p() && timer > 10)
174
    {
175
        select_noise = true;
176
        switch (mpos)
177
        {
178
            case 0:
179
                chaptertoload = highestCompletedChapter + 1;
180
                con = "gameload";
181
                break;
182
            case 1:
183
                timer = 0;
184
                mpos = 0;
185
                con = "chapterselect";
186
                break;
187
        }
188
    }
189
}
190
if (con == "continueChapter")
191
{
192
    if (highestUncompletedChapter == 0 || highestUncompletedChapter > latestAvailableChapter || highestCompletedChapter > latestAvailableChapter)
193
    {
194
        con = "nofile";
195
        exit;
196
    }
197
    if (fade != 0)
198
        fade = lerp(fade, 0, 0.125);
199
    xx = 160 * scale;
200
    yy = 110 * scale;
201
    mspace = 20 * scale;
202
    fadescaled = fade * scale;
203
    drawcolor = merge_color(c_white, c_black, fade / fademax);
204
    draw_set_color(drawcolor);
205
    my_stringset = "Continue from Chapter " + string(highestUncompletedChapter) + "?";
206
    if (global.lang == "ja")
207
        my_stringset = "Chapter " + string(highestUncompletedChapter) + "から続けますか?";
208
    draw_set_font(text_font);
209
    draw_set_halign(fa_center);
210
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 0), my_stringset, scale, scale, 0);
211
    if (mpos == 0)
212
        draw_set_color(c_yellow);
213
    else
214
        draw_set_color(c_white);
215
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 1), yes, scale, scale, 0);
216
    if (mpos == 1)
217
        draw_set_color(c_yellow);
218
    else
219
        draw_set_color(c_white);
220
    draw_text_transformed(xx, (yy - fadescaled) + (mspace * 2), no, scale, scale, 0);
221
    if (mpos == 0)
222
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(yes) / 2) * scale) - (13 * scale), (yy - fadescaled) + (mspace * 1) + (mspace * mpos) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
223
    if (mpos == 1)
224
        draw_sprite_ext(spr_heart, 0, xx - ((string_width(no) / 2) * scale) - (13 * scale), (yy - fadescaled) + (mspace * 1) + (mspace * mpos) + (4 * scale), scale, scale, 0, c_white, (fademax - fade) / fademax);
225
    if (up_p())
226
    {
227
        mpos--;
228
        move_noise = true;
229
    }
230
    if (down_p())
231
    {
232
        mpos++;
233
        move_noise = true;
234
    }
235
    mpos = clamp(mpos, 0, 1);
236
    if (button1_p() && timer > 10)
237
    {
238
        timer = 0;
239
        select_noise = true;
240
        switch (mpos)
241
        {
242
            case 0:
243
                chaptertoload = highestUncompletedChapter;
244
                con = "gameload";
245
                break;
246
            case 1:
247
                timer = 0;
248
                mpos = 0;
249
                con = "chapterselect";
250
                break;
251
        }
252
    }
253
}
254
if (con == "chapterselect")
255
{
256
    quit = (global.lang == "en") ? "Quit" : "終了";
257
    chapterstring = "Chapter";
258
    if (chapterselectinit == 0)
259
    {
260
        fade = fademax;
261
        chapterselectinit = 1;
262
        timer = 0;
263
        mpos = highestCompletedChapter;
264
        if (mpos > (latestAvailableChapter - 1))
265
            mpos = latestAvailableChapter - 1;
266
        loop = audio_play_sound(AUDIO_DRONE, 15, 1);
267
    }
268
    if (fade != 0)
269
        fade = lerp(fade, 0, 0.125);
270
    fadescaled = fade * scale;
271
    space = 30 * scale;
272
    for (var i = 0; i < 6; i++)
273
        draw_sprite_ext(spr_horzBar, 0, 0, (36 * scale) + (space * i) + (fadescaled / 2), scale, scale, 0, c_white, 1 - (fade / fademax));
274
    draw_set_halign(fa_center);
275
    if (up_p())
276
    {
277
        move_noise = true;
278
        mpos--;
279
        if (mpos > (latestAvailableChapter - 1))
280
            mpos = latestAvailableChapter - 1;
281
    }
282
    if (down_p())
283
    {
284
        move_noise = true;
285
        mpos++;
286
        if (mpos > (latestAvailableChapter - 1))
287
            mpos = global.is_console ? 1 : 7;
288
    }
289
    if (console)
290
        mpos = clamp(mpos, 0, 6);
291
    else
292
        mpos = clamp(mpos, 0, 7);
293
    xx = 35 * scale;
294
    yy = 10 * scale;
295
    mspace = 30 * scale;
296
    for (var i = 0; i < 7; i++)
297
    {
298
        var mycolor = c_gray;
299
        if (i < latestAvailableChapter)
300
            mycolor = c_white;
301
        if (mpos == i)
302
            mycolor = c_yellow;
303
        mycolor = merge_color(mycolor, c_black, fade / fademax);
304
        draw_sprite_ext(spr_chapterIcon, i, xx + (234 * scale), -fadescaled + yy + (i * 30 * scale), scale, scale, 0, mycolor, 1 - (fade / fademax));
305
        draw_set_color(mycolor);
306
        draw_set_halign(fa_left);
307
        draw_text_transformed(xx, -fadescaled + yy + (mspace * i) + (3 * scale), chapterstring + " " + string(i + 1), scale, scale, 0);
308
        draw_set_halign(fa_center);
309
        draw_text_transformed(176 * scale, -fadescaled + yy + (mspace * i) + (3 * scale), chapname[i + 1], scale, scale, 0);
310
        draw_set_halign(fa_left);
311
        draw_set_color(c_white);
312
    }
313
    var heart_xpos = xx - (15 * scale);
314
    var heart_ypos = -fadescaled + yy + (7 * scale) + (mpos * (30 * scale));
315
    if (mpos == 7)
316
    {
317
        heart_ypos -= (5 * scale);
318
        heart_xpos = 130 * scale;
319
    }
320
    draw_sprite_ext(spr_heart, 0, heart_xpos, heart_ypos, scale, scale, 1, c_white, (fademax - fade) / fademax);
321
    if (!console)
322
    {
323
        var mycolor = c_white;
324
        if (mpos == 7)
325
            mycolor = c_yellow;
326
        mycolor = merge_color(mycolor, c_black, fade / fademax);
327
        draw_set_color(mycolor);
328
        draw_set_halign(fa_center);
329
        draw_text_transformed(160 * scale, -fadescaled + (218 * scale), quit, scale, scale, 0);
330
        draw_set_halign(fa_left);
331
    }
332
    if (button1_p() && timer > 12)
333
    {
334
        select_noise = true;
335
        timer = 0;
336
        if (mpos == 7)
337
        {
338
            game_end();
339
        }
340
        else
341
        {
342
            con = "gameloadConfirm";
343
            confirm_choice_index = 0;
344
            chaptertoload = mpos + 1;
345
        }
346
    }
347
    draw_set_alpha(0.4);
348
    draw_set_halign(fa_right);
349
    draw_set_color(c_white);
350
    draw_set_font(fnt_main);
351
    draw_text_transformed(626, (-fadescaled + yy + 440) - 11, "(C) Toby Fox 2018-2024", 1, 1, 0);
352
    draw_set_alpha(1);
353
    draw_set_halign(fa_left);
354
}
355
else if (con == "gameloadConfirm")
356
{
357
    stringPlay = (global.lang == "en") ? "Play" : "プレイする";
358
    stringDoNot = (global.lang == "en") ? "Do Not" : "もどる";
359
    space = 30 * scale;
360
    for (var i = 0; i < 6; i++)
361
        draw_sprite_ext(spr_horzBar, 0, 0, (36 * scale) + (space * i) + (fadescaled / 2), scale, scale, 0, c_white, 1 - (fade / fademax));
362
    draw_set_halign(fa_center);
363
    if (console)
364
        mpos = clamp(mpos, 0, 6);
365
    else
366
        mpos = clamp(mpos, 0, 7);
367
    xx = 35 * scale;
368
    yy = 10 * scale;
369
    mspace = 30 * scale;
370
    if (left_p())
371
    {
372
        move_noise = true;
373
        confirm_choice_index = ((confirm_choice_index - 1) < 0) ? 1 : 0;
374
    }
375
    if (right_p())
376
    {
377
        move_noise = true;
378
        confirm_choice_index = ((confirm_choice_index + 1) > 1) ? 0 : 1;
379
    }
380
    var heart_xpos = (116 * scale) + (confirm_choice_index * 75 * scale);
381
    if (global.lang == "ja")
382
        heart_xpos = (106 * scale) + (confirm_choice_index * 95 * scale);
383
    var heart_ypos = yy + (7 * scale) + (mpos * 30 * scale);
384
    draw_sprite_ext(spr_heart, 0, heart_xpos, heart_ypos, scale, scale, 0, c_white, (fademax - fade) / fademax);
385
    for (var i = 0; i < 7; i++)
386
    {
387
        var mycolor = c_gray;
388
        if (i < latestAvailableChapter)
389
            mycolor = c_white;
390
        if (mpos == i)
391
            mycolor = c_yellow;
392
        mycolor = merge_color(mycolor, c_black, fade / fademax);
393
        draw_sprite_ext(spr_chapterIcon, i, xx + (234 * scale), (-fade * scale) + yy + (i * 30 * scale), scale, scale, 0, mycolor, 1 - (fade / fademax));
394
        draw_set_color(mycolor);
395
        draw_set_halign(fa_left);
396
        draw_text_transformed(xx, -fade + yy + (mspace * i) + (3 * scale), chapterstring + " " + string(i + 1), scale, scale, 0);
397
        draw_set_halign(fa_center);
398
        if (mpos == i)
399
        {
400
            var play_color = (confirm_choice_index == 0) ? c_yellow : c_white;
401
            draw_set_color(play_color);
402
            if (global.lang == "en")
403
                draw_text_transformed(146 * scale, (-fade * scale) + yy + (mspace * i) + (3 * scale), stringPlay, scale, scale, 0);
404
            else
405
                draw_text_transformed(156 * scale, (-fade * scale) + yy + (mspace * i) + (3 * scale), stringPlay, scale, scale, 0);
406
            var not_color = (confirm_choice_index == 1) ? c_yellow : c_white;
407
            draw_set_color(not_color);
408
            if (global.lang == "en")
409
                draw_text_transformed(226 * scale, (-fade * scale) + yy + (mspace * i) + (3 * scale), stringDoNot, scale, scale, 0);
410
            else
411
                draw_text_transformed(236 * scale, (-fade * scale) + yy + (mspace * i) + (3 * scale), stringDoNot, scale, scale, 0);
412
        }
413
        else
414
        {
415
            draw_text_transformed(176 * scale, -fade + yy + (mspace * i) + (3 * scale), chapname[i + 1], scale, scale, 0);
416
        }
417
        draw_set_halign(fa_left);
418
        draw_set_color(c_white);
419
    }
420
    draw_set_alpha(0.4);
421
    draw_set_halign(fa_right);
422
    draw_set_color(c_white);
423
    draw_set_font(fnt_main);
424
    draw_text_transformed(626, 449, "(C) Toby Fox 2018-2024", 1, 1, 0);
425
    draw_set_alpha(1);
426
    draw_set_halign(fa_left);
427
    if (!console)
428
    {
429
        var mycolor = c_white;
430
        if (mpos == 7)
431
            mycolor = c_yellow;
432
        mycolor = merge_color(mycolor, c_black, fade / fademax);
433
        draw_set_color(mycolor);
434
        draw_set_halign(fa_center);
435
        draw_text_transformed(160 * scale, (-fade * scale) + (218 * scale), quit, scale, scale, 0);
436
        draw_set_halign(fa_left);
437
    }
438
    if (button1_p() && timer > 12)
439
    {
440
        timer = 0;
441
        select_noise = true;
442
        if (confirm_choice_index == 0)
443
            con = "gameload";
444
        else
445
            con = "chapterselect";
446
    }
447
    if (button2_p() && timer > 12)
448
    {
449
        timer = 0;
450
        select_noise = true;
451
        con = "chapterselect";
452
    }
453
}
454
if (spr_aftereffect == 0)
455
{
456
    version_text_alpha = lerp(version_text_alpha, 0.4, 0.1);
457
    draw_set_alpha(version_text_alpha);
458
    draw_set_halign(fa_left);
459
    draw_set_color(c_white);
460
    draw_set_font(fnt_main);
461
    draw_text_transformed(14, 449, "DELTARUNE " + version_text, 1, 1, 0);
462
    draw_set_alpha(1);
463
    draw_set_halign(fa_left);
464
}
465
if (con == "gameload")
466
{
467
    if (spr_aftereffect == 0)
468
    {
469
        spr_aftereffect = sprite_create_from_surface(application_surface, 0, 0, room_width, room_height, false, false, 0, 0);
470
        sprite_set_offset(spr_aftereffect, room_width / 2, room_height / 2);
471
        yy = room_height / 2;
472
    }
473
    if (chaptertoload != 0)
474
    {
475
        audio_sound_gain(loop, 0, 500);
476
        switch (chaptertoload)
477
        {
478
            case 1:
479
                audio_play_sound(AUDIO_APPEARANCE, 50, 0);
480
                break;
481
            case 2:
482
                audio_play_sound(snd_queen_bitcrushlaugh, 50, 0);
483
                break;
484
        }
485
        chaptertoload_temp = chaptertoload;
486
        chaptertoload = 0;
487
        alarm[2]
 = 60;
gml_Object_obj_CHAPTER_SELECT_old_Alarm_2.gml

audio_stop_all(); var chapstring = string(chaptertoload_temp); var parameters = get_chapter_switch_parameters(); switch (os_type) { case os_windows: game_change("/chapter" + chapstring + "_windows", "-game data.win" + parameters); break; case os_switch: game_change("rom:/chapter" + chapstring + "_switch/", parameters); break; case os_ps4: game_change("", "-game /app0/games/chapter" + chapstring + "_ps4/game.win" + parameters); break; case os_ps5: game_change("", "-game /app0/games/chapter" + chapstring + "_ps5/game.win" + parameters); break; case os_macosx: game_change("chapter" + chapstring + "_mac", parameters); break; }
488
    }
489
    draw_sprite_ext(spr_aftereffect, 0, room_width / 2, yy, xscale, yscale, 0, c_white, fadeout);
490
    fadeout = lerp(fadeout, 0, 0.125);
491
    xscale *= 0.95;
492
    yscale *= 0.99;
493
    yy *= 0.99;
494
}
495
if (move_noise)
496
{
497
    move_noise = false;
498
    audio_play_sound(snd_menumove, 50, 0);
499
}
500
if (select_noise)
501
{
502
    select_noise = false;
503
    audio_play_sound(snd_select, 50, 0);
504
}