Deltarune (Chapter 4) script viewer

← back to main script listing

gml_Object_obj_ghosthouse_jackolantern_merciful_Step_0

(view raw script w/o annotations or w/e)
1
timer++;
2
if (quick_start && !feared)
3
{
4
    if (fleetype == 0)
5
        event_user(0);
6
    else if (fleetype == 1)
7
        event_user(10);
8
    else
9
        event_user(12);
10
    event_user(2);
11
    scare_con = -1;
12
    feared = true;
13
}
14
if (
scr_debug
scr_debug

function
scr_debug()
{ if (global.debug == 1) return 1; }
())
15
{
16
    if (sunkus_kb_check_pressed(9))
17
    {
18
        fleetype++;
19
        if (fleetype == 3)
20
            fleetype = 0;
21
        if (fleetype == 0)
22
            debug_print("Taxi Mode");
23
        if (fleetype == 1)
24
            debug_print("Corner Huddle Mode");
25
        if (fleetype == 2)
26
            debug_print("Herding Mode");
27
    }
28
}
29
if (!init)
30
{
31
    if (!quick_start)
32
        snd_play(snd_jackolantern_laugh);
33
    else
34
        sprite_index = spr_jackolantern_frown;
35
    init = true;
36
}
37
if (mercy < 99)
38
{
39
    with (obj_jackenstein_enemy)
40
        other.mercy = global.mercymod[myself];
41
}
42
else
43
{
44
    mercy++;
45
}
46
if (accelmultiplier < 1)
47
    accelmultiplier = clamp(accelmultiplier + 0.1, 0, 1);
48
else if (accelmultiplier > 1)
49
    accelmultiplier = clamp(accelmultiplier - 0.28, 1, 9);
50
if (end_con >= 4)
51
{
52
    with (obj_dmgwriter_boogie)
53
        instance_destroy();
54
    fader.image_alpha = clamp01(timer / 30);
55
    obj_lightsource_heartlight.radius *= 1.1;
56
    if (timer >= 30)
57
    {
58
        with (obj_jackenstein_enemy)
59
        {
60
            with (susiemarker)
61
                instance_destroy();
62
            with (ralseimarker)
63
                instance_destroy();
64
            x = -9999;
65
            y = -9999;
66
        }
67
        with (obj_npc_jackenstein)
68
            visible = true;
69
        with (fader)
70
        {
71
            
scr_script_delayed
scr_script_delayed

function
scr_script_delayed()
{ var __scriptdelay = instance_create(0, 0, obj_script_delayed); __scriptdelay.script = argument[0]; __scriptdelay.alarm[0] = argument[1]; __scriptdelay.target = id; for (var __i = 0; __i < (argument_count - 2); __i++) __scriptdelay.script_arg[__i] = argument[__i + 2]; __scriptdelay.arg_count = argument_count - 2; return __scriptdelay; }
(scr_lerp_var_instance, 45, id, "image_alpha", 1, 0, 30);
72
            
scr_script_delayed
scr_script_delayed

function
scr_script_delayed()
{ var __scriptdelay = instance_create(0, 0, obj_script_delayed); __scriptdelay.script = argument[0]; __scriptdelay.alarm[0] = argument[1]; __scriptdelay.target = id; for (var __i = 0; __i < (argument_count - 2); __i++) __scriptdelay.script_arg[__i] = argument[__i + 2]; __scriptdelay.arg_count = argument_count - 2; return __scriptdelay; }
(scr_doom, 45, id, 30, true);
73
        }
74
        global.charinstance[0].x = 2256;
75
        global.charinstance[0].y = 1961;
76
        global.charinstance[1].x = 2208;
77
        global.charinstance[1].y = 1945;
78
        global.charinstance[2].x = 2172;
79
        global.charinstance[2].y = 1950;
80
        with (obj_afterimage)
81
            instance_destroy();
82
        with (obj_battlecontroller)
83
            dancing_jackolantern_con = 0;
84
        if (i_ex(obj_ch4_DCA08D))
85
        {
86
            with (obj_ch4_DCA08D.jackenstein)
87
                stopdrawing = true;
88
        }
89
        obj_battlecontroller.skipvictory = 1;
90
        global.flag[39 dojo_abort?] = 1;
91
        global.turntimer = 0;
92
        with (obj_lightsource_heartlight)
93
            instance_destroy();
94
        instance_destroy();
95
    }
96
    exit;
97
}
98
var _tick_speed = 7;
99
if (mercy >= 80)
100
    _tick_speed = 9;
101
if (mercy >= 90)
102
    _tick_speed = 10;
103
if (feared || scare_con >= 1)
104
    obj_lightsource_heartlight.biggerrad = ceil(lerp(obj_lightsource_heartlight.biggerrad, 300, 0.5));
105
if (scare_con >= 1)
106
{
107
    if (scare_con == 1 && timer >= 10)
108
        event_user(1);
109
    if (scare_con == 2 && timer >= 35)
110
    {
111
        event_user(1);
112
        if (i_ex(obj_jackenstein_enemy))
113
            obj_jackenstein_enemy.spooked = true;
114
        with (instance_create(obj_battlesolid.x - 120 - (58 * (variable_global_exists("lang") && global.lang == "ja")), obj_battlesolid.y - 134, obj_takingtoolong))
115
            bright = 1;
116
        if (variable_global_exists("lang") && global.lang == "ja")
117
            snd_play(snd_your_too_bright_jp);
118
        else
119
            snd_play(snd_your_too_bright);
120
    }
121
    if (scare_con == 3 && timer >= 75)
122
    {
123
        timer = 0;
124
        scare_con = -1;
125
        obj_heart.wspeed = global.sp;
126
        if (screamcon == 0)
127
        {
128
            screamsound = snd_loop(snd_pumpkin_scream_mama);
129
            sprite_index = spr_jackolantern_cry;
130
            screamcon = 2;
131
        }
132
        event_user(10);
133
        event_user(2);
134
        quick_start = true;
135
    }
136
    if (scare_con >= 1)
137
        exit;
138
}
139
if (feared && screamcon > 0 && mercy < 99)
140
{
141
    jumptimer++;
142
    if (jumptimer >= jumpthreshold)
143
    {
144
        var audiopos = audio_sound_get_track_position(screamsound);
145
        audio_sound_set_track_position(screamsound, audiopos + random_range(-3, 3));
146
        jumptimer = 0;
147
        jumpthreshold = 2 + random(17);
148
    }
149
}
150
prog = clamp01(total_ticks / (run_threshold * 7));
151
if (screamcon > 0)
152
{
153
    siner++;
154
    if (end_con == 3)
155
    {
156
        snd_pitch(screamsound, 0.75);
157
    }
158
    else if (prog >= 1 || end_con == 1)
159
    {
160
        var _sine = cos(siner / 6) * 0.5;
161
        snd_pitch(screamsound, (size * 2) + _sine);
162
    }
163
    else
164
    {
165
        snd_pitch(screamsound, (size * 2) + 1);
166
    }
167
}
168
image_speed = lerp(0.25, 1, size);
169
if (ticks < 0)
170
    ticks += 1;
171
var _sizze = size;
172
if (mercy > 70)
173
    _sizze = -size;
174
if (mercy >= 99)
175
{
176
    if (screamcon != 2)
177
    {
178
        if (screamcon == 0)
179
            screamsound = snd_loop(snd_pumpkin_scream_mama);
180
        else
181
            snd_resume(screamsound);
182
        screamcon = 2;
183
        sprite_index = spr_jackolantern_cry;
184
    }
185
    if (end_con == 2)
186
    {
187
        direction = point_direction(x, y, targ_x, targ_y);
188
        var _heart_distance = point_distance(x, y, targ_x, targ_y);
189
        if (_heart_distance < (light_distance - (_sizze * 30)) || _heart_distance > last_distance)
190
        {
191
            snd_stop(global.batmusic[1]);
192
            snd_pause(screamsound);
193
            sprite_index = spr_jackolantern_stunned;
194
            size = 1;
195
            end_con = 3;
196
            timer = 0;
197
            speed = 0;
198
            var _damage = 1;
199
            obj_heart.wspeed = 1;
200
            snd_play(snd_graze);
201
            with (obj_jackenstein_enemy)
202
            {
203
                if (!i_ex(obj_dmgwriter_boogie))
204
                {
205
                    global.mercymod[myself] += _damage;
206
                    __mercydmgwriter = instance_create_depth(global.monsterx[myself], global.monstery[myself] + 40, depth - 99999, obj_dmgwriter_boogie);
207
                    __mercydmgwriter.damage = _damage;
208
                    __mercydmgwriter.type = 5;
209
                    global.hittarget[myself]++;
210
                    snd_play_x(snd_mercyadd, 0.8, 1.4);
211
                }
212
                else if (global.mercymod[myself] < 100)
213
                {
214
                    obj_dmgwriter_boogie.damage += _damage;
215
                    obj_dmgwriter_boogie.init = 0;
216
                    global.mercymod[myself] += _damage;
217
                }
218
                if (i_ex(obj_dmgwriter_boogie))
219
                    obj_dmgwriter_boogie.damage -= (global.mercymod[myself] - 100);
220
                global.mercymod[myself] = 100;
221
            }
222
        }
223
        else
224
        {
225
            last_distance = _heart_distance;
226
        }
227
    }
228
    if (end_con == 3)
229
    {
230
        if (timer == 45)
231
        {
232
            snd_resume(screamsound);
233
            sprite_index = spr_jackolantern_cry;
234
            audio_sound_set_track_position(screamsound, 7.9);
235
        }
236
        else if (timer == 93)
237
        {
238
            debug_print("battle_end");
239
            shake_power = 4;
240
            fader = instance_create(0, 0, obj_marker);
241
            fader.image_blend = c_white;
242
            fader.image_alpha = 0;
243
            fader.sprite_index = spr_pixel_white;
244
            fader.image_xscale = room_width / 4;
245
            fader.image_yscale = room_height / 4;
246
            fader.depth = -100;
247
            obj_heart.wspeed = 1;
248
            snd_play_pitch(snd_great_shine, 1.4);
249
            timer = 0;
250
            speed = 0;
251
            snd_volume(screamsound, 0, 30);
252
            snd_volume(global.batmusic[1], 0, 60);
253
            end_con = 4;
254
        }
255
    }
256
}
257
else if (ticks >= 0 && point_distance(x, y, obj_heart.x + 4, obj_heart.y + 4) < (light_distance - (_sizze * 30)) && alarm[0]
 == -1)
gml_Object_obj_ghosthouse_jackolantern_merciful_Alarm_0.gml

sprite_index = spr_jackolantern_cry; image_speed = 0.25;
258
{
259
    if (mercy >= 90)
260
        ticks += 0.1;
261
    else if (mercy >= 80)
262
        ticks += 0.15;
263
    else
264
        ticks += 0.2;
265
    if (fleetype == 1)
266
        accelmultiplier += 0.31;
267
    size_cooldown += 0.2;
268
    if (ticks >= 1)
269
    {
270
        size_cooldown = 1;
271
        if (!feared && scare_con == 0)
272
        {
273
            if (!quick_start)
274
            {
275
                speed = 0;
276
                scare_con = 1;
277
                debug_print(string(obj_heart.wspeed));
278
                obj_heart.wspeed = 0;
279
            }
280
            else
281
            {
282
                scare_con = -1;
283
            }
284
            bright = true;
285
            exit;
286
        }
287
        ticks = 0.2;
288
        total_ticks++;
289
        sizer++;
290
        tick_chain++;
291
        snd_play(snd_graze);
292
        var _damage = burst_damage ? 7 : 1;
293
        if (screamcon != 2)
294
        {
295
            if (screamcon == 0)
296
                screamsound = snd_loop(snd_pumpkin_scream_mama);
297
            else
298
                snd_resume(screamsound);
299
            screamcon = 2;
300
            sprite_index = spr_jackolantern_cry;
301
        }
302
        if (tick_chain >= 7)
303
        {
304
            ticks = 0;
305
            completed_ticks++;
306
            if (!feared && tick_chain < 99)
307
            {
308
                feared = true;
309
                if (fleetype == 0)
310
                    event_user(0);
311
                else if (fleetype == 1)
312
                    event_user(10);
313
                else
314
                    event_user(12);
315
                event_user(2);
316
            }
317
        }
318
        if (tick_chain == 3 && fleetype != 0)
319
        {
320
            if (fleetype == 1)
321
                event_user(10);
322
            else
323
                event_user(12);
324
            event_user(2);
325
        }
326
        if (!burst_damage || tick_chain >= 7)
327
        {
328
            if (tick_chain >= 7)
329
            {
330
                if (fleetype == 2)
331
                    event_user(12);
332
                event_user(2);
333
                tick_chain = 0;
334
            }
335
            with (obj_jackenstein_enemy)
336
            {
337
                if (!i_ex(obj_dmgwriter_boogie))
338
                {
339
                    global.mercymod[myself] += _damage;
340
                    __mercydmgwriter = instance_create_depth(global.monsterx[myself], global.monstery[myself] + 40, depth - 99999, obj_dmgwriter_boogie);
341
                    __mercydmgwriter.damage = _damage;
342
                    __mercydmgwriter.type = 5;
343
                    global.hittarget[myself]++;
344
                    snd_play_x(snd_mercyadd, 0.8, 1.4);
345
                }
346
                else if (global.mercymod[myself] < 99)
347
                {
348
                    obj_dmgwriter_boogie.damage += _damage;
349
                    obj_dmgwriter_boogie.init = 0;
350
                    global.mercymod[myself] += _damage;
351
                }
352
                if (global.mercymod[myself] >= 99 && other.end_con == 0)
353
                {
354
                    global.turntimer += 300;
355
                    if (i_ex(obj_dmgwriter_boogie))
356
                        obj_dmgwriter_boogie.damage -= (global.mercymod[myself] - 99);
357
                    global.mercymod[myself] = 99;
358
                    with (obj_dmgwriter_boogie)
359
                    {
360
                        if (damage == 0)
361
                            instance_destroy();
362
                    }
363
                    other.end_con = 1;
364
                    debug_print("PANIC");
365
                    exit;
366
                }
367
            }
368
        }
369
        if (!quick_start && completed_ticks == 1)
370
        {
371
            quick_start = true;
372
            exit;
373
        }
374
        if (total_ticks >= (run_threshold * 7) && scare_con == -1)
375
        {
376
            debug_print_persistent("state", "flee");
377
            ticks = -100;
378
            global.turntimer = 60;
379
            snd_volume(screamsound, 0, 60);
380
            speed = 8;
381
            friction = -0.1;
382
            direction = point_direction(x, y, obj_heart.x + 4, obj_heart.y + 4);
383
        }
384
    }
385
}
386
else if (total_ticks < (run_threshold * 7))
387
{
388
    if (size_cooldown > 0)
389
    {
390
        size_cooldown -= 0.05;
391
        if (size_cooldown <= 0)
392
        {
393
            sprite_index = spr_jackolantern_frown;
394
            size_offset = 0;
395
        }
396
    }
397
    else if (sizer > 0)
398
    {
399
        sizer = 
scr_movetowards
scr_movetowards

function
scr_movetowards(arg0, arg1, arg2)
{ if (arg0 == arg1) return arg0; else if (arg0 > arg1) return max(arg0 - arg2, arg1); else return min(arg0 + arg2, arg1); } function scr_obj_movetowards_obj(arg0, arg1, arg2 = 0, arg3 = 0) { scr_obj_movetowards_point(arg0.x + arg2, arg0.y + arg3, arg1); } function scr_obj_movetowards_point(arg0, arg1, arg2) { var _distance = point_distance(x, y, arg0, arg1); if (arg2 >= _distance) { x = arg0; y = arg1; } else { var _direction = point_direction(x, y, arg0, arg1); x += lengthdir_x(arg2, _direction); y += lengthdir_y(arg2, _direction); } }
(sizer, 0, 0.5);
400
    }
401
    if (screamcon == 2 && ticks >= 0)
402
    {
403
        screamcon = 1;
404
        snd_pause(screamsound);
405
        sprite_index = spr_jackolantern_stunned;
406
    }
407
    if (ticks > 0)
408
        ticks -= 0.1;
409
    if (ticks == 0 && feared)
410
    {
411
    }
412
}
413
if (mercy >= 99)
414
{
415
    sizer = 
scr_movetowards
scr_movetowards

function
scr_movetowards(arg0, arg1, arg2)
{ if (arg0 == arg1) return arg0; else if (arg0 > arg1) return max(arg0 - arg2, arg1); else return min(arg0 + arg2, arg1); } function scr_obj_movetowards_obj(arg0, arg1, arg2 = 0, arg3 = 0) { scr_obj_movetowards_point(arg0.x + arg2, arg0.y + arg3, arg1); } function scr_obj_movetowards_point(arg0, arg1, arg2) { var _distance = point_distance(x, y, arg0, arg1); if (arg2 >= _distance) { x = arg0; y = arg1; } else { var _direction = point_direction(x, y, arg0, arg1); x += lengthdir_x(arg2, _direction); y += lengthdir_y(arg2, _direction); } }
(sizer, run_threshold * 7, 1);
416
    if (end_con >= 3)
417
        speed = 0;
418
    else
419
        speed = remap_clamped(100, 190, 20, 60, mercy);
420
}
421
else if (total_ticks >= (run_threshold * 7) && end_con == 0)
422
{
423
    sizer = 
scr_movetowards
scr_movetowards

function
scr_movetowards(arg0, arg1, arg2)
{ if (arg0 == arg1) return arg0; else if (arg0 > arg1) return max(arg0 - arg2, arg1); else return min(arg0 + arg2, arg1); } function scr_obj_movetowards_obj(arg0, arg1, arg2 = 0, arg3 = 0) { scr_obj_movetowards_point(arg0.x + arg2, arg0.y + arg3, arg1); } function scr_obj_movetowards_point(arg0, arg1, arg2) { var _distance = point_distance(x, y, arg0, arg1); if (arg2 >= _distance) { x = arg0; y = arg1; } else { var _direction = point_direction(x, y, arg0, arg1); x += lengthdir_x(arg2, _direction); y += lengthdir_y(arg2, _direction); } }
(sizer, run_threshold * 7, 1);
424
}
425
else if (speed != 0)
426
{
427
    speed = lerp(3, 20, size);
428
}
429
size = clamp01(sizer / (run_threshold * 7));
430
prog = clamp01(total_ticks / (run_threshold * 7));
431
if (completed_ticks < run_threshold)
432
{
433
    var _mercymod;
434
    if (!i_ex(obj_jackenstein_enemy))
435
        _mercymod = 0;
436
    else
437
        _mercymod = global.mercymod[obj_jackenstein_enemy.myself];
438
    var _mm = 1;
439
    var lower = 2;
440
    var upper = 3;
441
    var mult = 1;
442
    if (fleetype == 1)
443
    {
444
        lower = 1.4;
445
        upper = 1.8;
446
        mult = 0.7;
447
    }
448
    if (!first_turn)
449
    {
450
        if (_mercymod < 70)
451
            _mm = remap_clamped(0, 70, 1, lower, _mercymod);
452
        else
453
            _mm = remap_clamped(70, 100, lower, upper, _mercymod);
454
    }
455
    if (feared && alarm[0]
 == -1 && end_con < 3)
gml_Object_obj_ghosthouse_jackolantern_merciful_Alarm_0.gml

sprite_index = spr_jackolantern_cry; image_speed = 0.25;
456
    {
457
        reset_timer++;
458
        var _target_distance = point_distance(x, y, targ_x, targ_y);
459
        if (reset_timer > 90 || _target_distance < 15 || _target_distance > last_distance)
460
        {
461
            if (end_con >= 2)
462
            {
463
                debug_print("snapping to player");
464
                end_con = 3;
465
                x = targ_x;
466
                y = targ_y;
467
                speed = 0;
468
            }
469
            else
470
            {
471
                if (fleetype == 0)
472
                    event_user(0);
473
                else if (fleetype == 1)
474
                    event_user(10);
475
                else
476
                    event_user(11);
477
                reset_timer = 0;
478
                last_distance = point_distance(x, y, targ_x, targ_y);
479
            }
480
        }
481
        else
482
        {
483
            last_distance = _target_distance;
484
        }
485
        
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() { }
("state", "feared");
486
        if (end_con >= 3)
487
        {
488
            x = targ_x;
489
            y = targ_y;
490
            speed = 0;
491
        }
492
        else if (end_con == 0)
493
        {
494
            speed = 3 + log2(max(1, abs(ticks))) + (mult * completed_ticks * _mm);
495
        }
496
        speed *= accelmultiplier;
497
        if (end_con == 2)
498
            direction = point_direction(x, y, obj_heart.x, obj_heart.y);
499
        else if (end_con < 2)
500
            direction = point_direction(x, y, targ_x, targ_y);
501
    }
502
    else if (alarm[0])
503
    {
504
        debug_print("alarm 0");
505
        speed *= 0.95;
506
        speed -= 0.125;
507
    }
508
    else
509
    {
510
        
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() { }
("state", "unfeared");
511
        speed = min(sqrt(max(0, timer - 30)), 4) / (1 + ticks + (completed_ticks * _mm));
512
        direction = 
scr_at_player
scr_at_player

function
scr_at_player(arg0 = x, arg1 = y)
{ return point_direction(arg0, arg1, obj_heart.x + (obj_heart.sprite_width / 2), obj_heart.y + (obj_heart.sprite_height / 2)); }
(x, y);
513
    }
514
}