Deltarune (Chapter Select) script viewer

← back to main script listing

gml_Object_obj_CHAPTER_SELECT_Create_0

related scripts: Create_0 Other_72Step_0

(view raw script w/o annotations or w/e)
1
global.debug = 0;
2
global.is_console = scr_is_switch_os() || os_type == os_ps4 || os_type == os_ps5;
3
if (!variable_global_exists("bgm") || !audio_exists(global.bgm))
4
    global.bgm = -4;
5
scr_init
scr_init

function
scr_init()
{ } function create_choice(arg0, arg1) constructor { choice_text = arg0; choice_value = arg1; } function get_chapter_confirm_sound(arg0) { switch (arg0) { case UnknownEnum.Value_1: return 2; break; case UnknownEnum.Value_2: return 1; break; case UnknownEnum.Value_3: return 3; break; case UnknownEnum.Value_4: return 5; break; case UnknownEnum.Value_5: return 0; break; default: return 4; break; } } function get_chapter_title(arg0) { switch (arg0) { case UnknownEnum.Value_1: return (global.lang == "en") ? "The Beginning" : "はじまり"; break; case UnknownEnum.Value_2: return (global.lang == "en") ? "A Cyber's World" : "サイバーワールド"; break; case UnknownEnum.Value_3: return (global.lang == "en") ? "Late Night" : "レイトナイト"; break; case UnknownEnum.Value_4: return (global.lang == "en") ? "Prophecy" : "予言"; break; case UnknownEnum.Value_5: return (global.lang == "en") ? "Festival Day" : "お祭り"; break; default: return "- -"; break; } } function get_version() { var version = "v23"; return version; } function get_chapter_icon_index(arg0) { switch (arg0) { case UnknownEnum.Value_1: return UnknownEnum.Value_1; break; case UnknownEnum.Value_2: return UnknownEnum.Value_2; break; case UnknownEnum.Value_3: return scr_completed_chapter_any_slot(arg0) ? UnknownEnum.Value_4 : UnknownEnum.Value_3; break; case UnknownEnum.Value_4: return UnknownEnum.Value_5; break; case UnknownEnum.Value_5: return UnknownEnum.Value_6; break; default: return UnknownEnum.Value_0; break; } } function get_title() { var title = "DELTARUNE"; return title; } enum UnknownEnum { Value_0, Value_1, ...
();
6
_current_state = UnknownEnum.Value_0;
7
_chapter_in_progress = 0;
8
_chapter_completed = 0;
9
_target_chapter = -1;
10
_restart_room = false;
11
_launch_data = 
scr_init_launch_parameters
scr_init_launch_parameters

function
scr_init_launch_parameters()
{ var param_data = new launch_parameters(); var p_num = parameter_count(); if (p_num > 0) { for (var i = 0; i < p_num; i += 1) { var param = parameter_string(i + 1); if (param == "launcher") { param_data.is_launcher = true; } else if (string_pos("switch_", param) != 0) { var param_parts = string_split(param, "_"); param_data.switch_id = real(param_parts[1]); } else if (string_pos("returning_", param) != 0) { var param_parts = string_split(param, "_"); param_data.returning = real(param_parts[1]); } } } return param_data; } function launch_parameters() constructor { is_launcher = true; switch_id = -1; returning = 0; } function get_chapter_switch_parameters() { var launch_data = new launch_parameters(); if (scr_is_switch_os() && variable_global_exists("switchlogin")) launch_data.switch_id = global.switchlogin; var parameters = []; parameters[0] = "launcher"; parameters[1] = "switch_" + string(launch_data.switch_id); parameters[2] = "returning_" + string(launch_data.returning); var param_formatted = ""; for (var i = 0; i < array_length(parameters); i++) param_formatted += (" " + string(parameters[i])); return param_formatted; } function is_original_launcher(arg0) { return arg0.returning == 0; }
();
12
_pending_titles = [];
13
_pending_title = -4;
14
_load_type = UnknownEnum.Value_0;
15
16
init = function()
17
{
18
    var max_chapter = UnknownEnum.Value_7;
19
    var max_available_chapter = UnknownEnum.Value_5;
20
    _current_state = UnknownEnum.Value_1;
21
    for (var i = 0; i < max_available_chapter; i++)
22
    {
23
        var chapter = i + 1;
24
        if (
scr_chapter_save_file_exists
scr_chapter_save_file_exists

function
scr_chapter_save_file_exists(arg0)
{ var _exists = false; for (var i = 0; i < 3; i++) { _exists = ossafe_file_exists("filech" + string(arg0) + "_" + string(i)); if (_exists == true) break; } return _exists; } function scr_chapter_save_file_exists_in_slot(arg0, arg1) { var _exists = ossafe_file_exists("filech" + string(arg0) + "_" + string(arg1)); return _exists; } function scr_completed_chapter_any_slot(arg0) { var _file_exists = false; for (var i = 0; i < 3; i++) { if (ossafe_file_exists("filech" + string(arg0) + "_" + string(i + 3))) { _file_exists = true; break; } } return _file_exists; } function scr_completed_chapter_in_slot(arg0, arg1) { var _file_exists = ossafe_file_exists("filech" + string(arg0) + "_" + string(arg1 + 3)); return _file_exists; } function scr_fought_secret_boss_any_slot(arg0) { var _fought = false; for (var i = 0; i < 3; i++) { var _slot = i; var _result = scr_get_ura_value(arg0, _slot); if (_result > 0) { _fought = true; break; } } return _fought; } function scr_get_ini_value(arg0, arg1, arg2) { var _ini_file = ossafe_ini_open("dr.ini"); var _ini_value = ini_read_real(
scr_ini_chapter(arg0, arg1), arg2, 0);
ossafe_ini_close(); return _ini_value; } function scr_set_ini_value(arg0, arg1, arg2, arg3) { var iniwrite = ossafe_ini_open("dr.ini"); ini_write_real(
scr_ini_chapter(arg0, arg1), arg2, arg3);
ossafe_ini_close(); } function scr_get_ini_value_all_slots(arg0, arg1) { var _ini_file = ossafe_ini_open("dr.ini"); var _list = []; for (var i = 0; i < 6; i++) { var _slot = i; var _value = ini_read_real(
scr_ini_chapter(arg0, _slot), arg1, 0);
_list[i][0] = _slot; _list[i][1] = _value; } ossafe_ini_close(); return _list; } function scr_is_chapter_revealed(arg0) { if (arg0 == UnknownEnum.Value_1) return true; var completed_previous = scr_completed_chapter_any_slot(arg0 - 1); var completed_current = scr_completed_chapter_any_slot(arg0); var in_progress =
scr_chapter_save_file_exists(arg0);
return completed_previous || completed_current || in_progress; } function get_highest_revealed_chapter() { var highest_revealed = UnknownEnum.Value_1; for (var i = 0; i < UnknownEnum.Value_5; i++) { var chapter = i + 1; if (!scr_is_chapter_revealed(chapter)) ...
(chapter) && !scr_completed_chapter_any_slot(chapter))
25
            _chapter_in_progress = chapter;
26
    }
27
    if (_chapter_in_progress > 0)
28
        _current_state = UnknownEnum.Value_2;
29
    for (var i = 0; i < max_available_chapter; i++)
30
    {
31
        var chapter = i + 1;
32
        if (scr_completed_chapter_any_slot(chapter))
33
            _chapter_completed = chapter;
34
    }
35
    if (_chapter_completed > 0)
36
    {
37
        _current_state = UnknownEnum.Value_3;
38
        if (_chapter_in_progress > _chapter_completed)
39
        {
40
            _current_state = UnknownEnum.Value_2;
41
            if ((_chapter_in_progress - _chapter_completed) >= 2)
42
                _current_state = UnknownEnum.Value_4;
43
        }
44
        if (_chapter_completed >= max_available_chapter)
45
            _current_state = UnknownEnum.Value_4;
46
    }
47
    if (!is_original_launcher(_launch_data))
48
        _current_state = UnknownEnum.Value_4;
49
    change_state(_current_state);
50
};
51
52
change_state = function(arg0, arg1)
53
{
54
    _current_state = arg0;
55
    switch (_current_state)
56
    {
57
        case UnknownEnum.Value_4:
58
            with (obj_screen_start)
59
                clean_up();
60
            start_bgm();
61
            create_select_screen();
62
            break;
63
        case UnknownEnum.Value_1:
64
            stop_bgm();
65
            create_start_screen();
66
            break;
67
        case UnknownEnum.Value_2:
68
            stop_bgm();
69
            create_continue_screen();
70
            break;
71
        case UnknownEnum.Value_3:
72
            stop_bgm();
73
            create_start_next_screen();
74
            break;
75
        case UnknownEnum.Value_5:
76
            with (obj_screen_start)
77
                clean_up();
78
            _pending_titles = arg1;
79
            if (scr_is_switch_os())
80
            {
81
                if (array_length(_pending_titles) > 1)
82
                    _load_type = UnknownEnum.Value_1;
83
            }
84
            if (_load_type == UnknownEnum.Value_0)
85
            {
86
                _pending_title = _pending_titles[0];
87
                var adjusted_list = [];
88
                for (var i = 0; i < array_length(_pending_titles); i++)
89
                {
90
                    if (_pending_titles[i] == _pending_title)
91
                        continue;
92
                    adjusted_list[array_length(adjusted_list)] = _pending_titles[i];
93
                }
94
                _pending_titles = adjusted_list;
95
                create_load_prompt_screen(_pending_title.title);
96
            }
97
            else
98
            {
99
                create_load_prompt_multiple_screen(_pending_titles);
100
            }
101
            break;
102
        case UnknownEnum.Value_6:
103
            with (obj_screen_start)
104
                clean_up();
105
            create_load_deny_confirm_screen();
106
            break;
107
        case UnknownEnum.Value_0:
108
            with (obj_screen_start)
109
                clean_up();
110
            break;
111
    }
112
};
113
114
create_start_screen = function()
115
{
116
    var start_text = (global.lang == "en") ? "Would you like to start from Chapter 1?" : "Chapter 1から始めますか?";
117
    var yes_text = (global.lang == "en") ? "Yes" : "はい";
118
    var no_text = (global.lang == "en") ? "No" : "いいえ";
119
    var choices = [new create_choice(yes_text, UnknownEnum.Value_0), new create_choice(no_text, UnknownEnum.Value_1)];
120
    var choice_offset = (global.lang == "ja") ? -20 : 0;
121
    var start_screen = instance_create(0, 0, obj_screen_start);
122
    start_screen.init(id, start_text, choices, choice_offset);
123
    start_screen.fade_in();
124
};
125
126
create_continue_screen = function()
127
{
128
    var continue_text = "Continue from Chapter " + string(_chapter_in_progress) + "?";
129
    if (global.lang == "ja")
130
        continue_text = "Chapter " + string(_chapter_in_progress) + "から続けますか?";
131
    var yes_text = (global.lang == "en") ? "Yes" : "はい";
132
    var no_text = (global.lang == "en") ? "No" : "いいえ";
133
    var choices = [new create_choice(yes_text, UnknownEnum.Value_0), new create_choice(no_text, UnknownEnum.Value_1)];
134
    var choice_offset = (global.lang == "ja") ? -20 : 0;
135
    var start_screen = instance_create(0, 0, obj_screen_start);
136
    start_screen.init(id, continue_text, choices, choice_offset);
137
    start_screen.fade_in();
138
};
139
140
create_start_next_screen = function()
141
{
142
    var continue_text = "Chapter " + string(_chapter_completed) + " was completed.";
143
    if (global.lang == "ja")
144
        continue_text = "Chapter " + string(_chapter_completed) + "はクリア済みです。";
145
    var play_next_text = "Play Chapter " + string(_chapter_completed + 1);
146
    if (global.lang == "ja")
147
        play_next_text = "Chapter " + string(_chapter_completed + 1) + "をプレイ";
148
    var chapter_select_text = (global.lang == "en") ? "Chapter Select" : "チャプター選択";
149
    var choices = [new create_choice(play_next_text, UnknownEnum.Value_0), new create_choice(chapter_select_text, UnknownEnum.Value_1)];
150
    var start_screen = instance_create(0, 0, obj_screen_start);
151
    var choice_offset = (global.lang == "en") ? -70 : -100;
152
    start_screen.init(id, continue_text, choices, choice_offset);
153
    start_screen.fade_in();
154
};
155
156
create_select_screen = function()
157
{
158
    var select_screen = instance_create(0, 0, obj_screen_select);
159
    select_screen.init(id);
160
    select_screen.fade_in();
161
};
162
163
create_load_prompt_screen = function(arg0)
164
{
165
    var load_text = scr_get_app_title(arg0) + "Save Data found.\nImport this Save Data?\n(This will only be asked once.)";
166
    if (global.lang == "ja")
167
        load_text = scr_get_app_title(arg0) + "セーブデータを検出しました。\nこのセーブデータを取り込みますか?\n(この確認は一度しか行いません)";
168
    var yes_text = (global.lang == "en") ? "Yes" : "はい";
169
    var no_text = (global.lang == "en") ? "No" : "いいえ";
170
    var choices = [new create_choice(yes_text, UnknownEnum.Value_0), new create_choice(no_text, UnknownEnum.Value_1)];
171
    var choice_offset = (global.lang == "ja") ? -20 : 0;
172
    var start_screen = instance_create(0, 0, obj_screen_start);
173
    start_screen.init(id, load_text, choices, choice_offset);
174
    start_screen.fade_in();
175
};
176
177
create_load_prompt_multiple_screen = function(arg0)
178
{
179
    var load_text = "Multiple DELTARUNE Save Files found.\nWould you like to import one of these?\n(This will only be asked once.)\n \n ";
180
    if (global.lang == "ja")
181
        load_text = "複数の『DELTARUNE』セーブデータが存在します。\nどれか1つを取り込みますか?\n(この確認は一度しか行いません)\n \n ";
182
    var choices = [];
183
    for (var i = 0; i < array_length(arg0); i++)
184
    {
185
        var prev_title = arg0[i];
186
        var title_choice = scr_get_app_title_choice_text(prev_title.title);
187
        var new_choice = new create_choice(title_choice, prev_title);
188
        choices[array_length(choices)] = new_choice;
189
    }
190
    var do_not_text = (global.lang == "en") ? "Do Not Import" : "取り込まない";
191
    choices[array_length(choices)] = new create_choice(do_not_text, UnknownEnum.Value_1);
192
    var start_screen = instance_create(0, 0, obj_screen_start);
193
    start_screen.init(id, load_text, choices, 0, -32);
194
    start_screen.fade_in();
195
};
196
197
create_load_deny_confirm_screen = function()
198
{
199
    var deny_text = (global.lang == "en") ? "Proceed without importing?" : "取り込まずに進めますか?";
200
    var yes_text = (global.lang == "en") ? "Yes" : "はい";
201
    var no_text = (global.lang == "en") ? "No" : "いいえ";
202
    var choices = [new create_choice(yes_text, UnknownEnum.Value_0), new create_choice(no_text, UnknownEnum.Value_1)];
203
    var choice_offset = (global.lang == "ja") ? -20 : 0;
204
    var start_screen = instance_create(0, 0, obj_screen_start);
205
    start_screen.init(id, deny_text, choices, choice_offset);
206
    start_screen.fade_in();
207
};
208
209
trigger_event = function(arg0, arg1)
210
{
211
    var event_name = arg0;
212
    var event_value = arg1;
213
    switch (_current_state)
214
    {
215
        case UnknownEnum.Value_0:
216
            if (arg0 == "init_complete")
217
                init();
218
            else if (arg0 == "load_prompt")
219
                change_state(UnknownEnum.Value_5, arg1);
220
            break;
221
        case UnknownEnum.Value_5:
222
            if (event_value == UnknownEnum.Value_0)
223
            {
224
                global.savedata = _pending_title.save_data;
225
                _restart_room = true;
226
                change_state(UnknownEnum.Value_0);
227
                with (obj_init_console)
228
                    convert_loaded_file();
229
            }
230
            else if (event_value == UnknownEnum.Value_1)
231
            {
232
                if (_load_type == UnknownEnum.Value_0)
233
                {
234
                    if (array_length(_pending_titles) > 0)
235
                    {
236
                        change_state(UnknownEnum.Value_0);
237
                        trigger_event("load_prompt", _pending_titles);
238
                    }
239
                    else
240
                    {
241
                        change_state(UnknownEnum.Value_6);
242
                    }
243
                }
244
                else
245
                {
246
                    change_state(UnknownEnum.Value_6);
247
                }
248
            }
249
            else
250
            {
251
                _pending_title = event_value;
252
                global.savedata = _pending_title.save_data;
253
                _restart_room = true;
254
                change_state(UnknownEnum.Value_0);
255
                with (obj_init_console)
256
                    convert_loaded_file();
257
            }
258
            break;
259
        case UnknownEnum.Value_6:
260
            if (event_value == UnknownEnum.Value_0)
261
            {
262
                _restart_room = true;
263
                change_state(UnknownEnum.Value_0);
264
                with (obj_init_console)
265
                    create_new_save_file();
266
            }
267
            else
268
            {
269
                room_restart();
270
            }
271
            break;
272
        case UnknownEnum.Value_1:
273
            if (event_value == UnknownEnum.Value_0)
274
            {
275
                _target_chapter = UnknownEnum.Value_1;
276
                show_transition();
277
            }
278
            else
279
            {
280
                change_state(UnknownEnum.Value_4);
281
            }
282
            break;
283
        case UnknownEnum.Value_2:
284
            if (event_value == UnknownEnum.Value_0)
285
            {
286
                _target_chapter = _chapter_in_progress;
287
                show_transition();
288
            }
289
            else
290
            {
291
                change_state(UnknownEnum.Value_4);
292
            }
293
            break;
294
        case UnknownEnum.Value_3:
295
            if (event_value == UnknownEnum.Value_0)
296
            {
297
                _target_chapter = _chapter_completed + 1;
298
                show_transition();
299
            }
300
            else
301
            {
302
                change_state(UnknownEnum.Value_4);
303
            }
304
            break;
305
        case UnknownEnum.Value_4:
306
            if (event_name == "launch_game")
307
            {
308
                _target_chapter = event_value;
309
                show_transition();
310
            }
311
            else if (event_value == UnknownEnum.Value_4)
312
            {
313
                quit();
314
            }
315
            else if (event_value == UnknownEnum.Value_5)
316
            {
317
                toggle_language();
318
            }
319
            break;
320
    }
321
};
322
323
show_transition = function()
324
{
325
    if (instance_exists(obj_screen_transition))
326
        exit;
327
    if (global.bgm != -4)
328
        audio_sound_gain(global.bgm, 0, 500);
329
    var sound_file = get_chapter_confirm_sound(_target_chapter);
330
    var volume = 1;
331
    if (_target_chapter == 3)
332
        volume = 0.7;
333
    audio_play_sound(sound_file, 50, 0, volume);
334
    var delay = round(audio_sound_length(sound_file) * room_speed);
335
    var transition = instance_create(0, 0, obj_screen_transition);
336
    transition.init(id, _target_chapter, delay);
337
    transition.start(launch_game);
338
};
339
340
launch_game = function(arg0)
341
{
342
    audio_stop_all();
343
    var chapstring = string(_target_chapter);
344
    var parameters = get_chapter_switch_parameters();
345
    if (scr_is_switch_os())
346
    {
347
        game_change("rom:/chapter" + chapstring + "_switch/", parameters);
348
    }
349
    else
350
    {
351
        switch (os_type)
352
        {
353
            case os_windows:
354
                game_change("/chapter" + chapstring + "_windows", "-game data.win" + parameters);
355
                break;
356
            case os_ps4:
357
                game_change("", "-game /app0/games/chapter" + chapstring + "_ps4/game.win" + parameters);
358
                break;
359
            case os_ps5:
360
                game_change("", "-game /app0/games/chapter" + chapstring + "_ps5/game.win" + parameters);
361
                break;
362
            case os_macosx:
363
                game_change("chapter" + chapstring + "_mac", parameters);
364
                break;
365
        }
366
    }
367
};
368
369
quit = function()
370
{
371
    game_end();
372
};
373
374
toggle_language = function()
375
{
376
    if (_restart_room)
377
        exit;
378
    _restart_room = true;
379
    var target_lang = (global.lang == "en") ? "ja" : "en";
380
    global.lang = target_lang;
381
    ossafe_ini_open("true_config.ini");
382
    ini_write_string("LANG", "LANG", global.lang);
383
    ossafe_ini_close();
384
    ossafe_savedata_save();
385
    if (!global.is_console)
386
        room_restart();
387
};
388
389
start_bgm = function()
390
{
391
    if (global.bgm == -4 || !audio_is_playing(global.bgm))
392
        global.bgm = audio_play_sound(AUDIO_DRONE, 15, 1);
393
};
394
395
stop_bgm = function()
396
{
397
    if (global.bgm != -4)
398
    {
399
        audio_stop_sound(global.bgm);
400
        global.bgm = -4;
401
    }
402
};
403
404
if (global.is_console)
405
{
406
    var console_init = instance_create(0, 0, obj_init_console);
407
    console_init.init(id, _launch_data);
408
}
409
else
410
{
411
    var pc_init = instance_create(0, 0, obj_init_pc);
412
    pc_init.init(id, _launch_data);
413
}
414
415
enum UnknownEnum
416
{
417
    Value_0,
418
    Value_1,
419
    Value_2,
420
    Value_3,
421
    Value_4,
422
    Value_5,
423
    Value_6,
424
    Value_7
425
}