Deltarune (Chapter Select) script viewer

← back to main script listing

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