Deltarune (Chapter 3) script viewer

← back to main script listing

gml_Object_obj_knight_split_growtangle_Step_0

(view raw script w/o annotations or w/e)
1
if (!init)
2
{
3
    if (difficulty == 2)
4
    {
5
        split_wait = 4;
6
        split_hold = 26;
7
    }
8
    init = true;
9
}
10
timer++;
11
old_distance = distance;
12
if (con == 1)
13
{
14
    if (timer <= 1)
15
    {
16
        effect = instance_create(x, y, obj_knight_split_growtangle_effect);
17
        effect.angle = angle;
18
        effect.diagonal = diagonal;
19
        effect.xoffset = xoffset;
20
        effect.yoffset = yoffset;
21
        effect.depth = depth - 100;
22
        effect.vertical = vertical;
23
        debug_print("SLASH");
24
    }
25
    if (timer >= (split_wait + split_delay))
26
    {
27
        if (disable_on_close)
28
        {
29
            with (split_bullet)
30
                active = false;
31
            child_bullet = [];
32
            count = 0;
33
        }
34
        snd_play_x(snd_knight_boxbreak, 1, 1.1);
35
        var _speed = 0;
36
        event_user(0);
37
        if (diagonal)
38
        {
39
            var _heartdir = point_direction(x + xoffset, y + yoffset, obj_heart.x + 10, obj_heart.y + 10);
40
            var _angle = angle + (vertical ? 45 : -45);
41
            if (abs(angle_difference(_angle, _heartdir)) < 90)
42
            {
43
                heart_x = 1;
44
                heart_y = vertical ? -1 : 1;
45
            }
46
            else
47
            {
48
                heart_x = -1;
49
                heart_y = vertical ? 1 : -1;
50
            }
51
            debug_print("angle difference is " + string(abs(angle_difference(_angle, _heartdir))));
52
        }
53
        else
54
        {
55
            if ((obj_heart.x + 10) < (x + xoffset))
56
                heart_x = -1;
57
            else
58
                heart_x = 1;
59
            if ((obj_heart.y + 10) < (y + yoffset))
60
                heart_y = -1;
61
            else
62
                heart_y = 1;
63
        }
64
        debug_print("initial heartxy is (" + string(heart_x) + "," + string(heart_y) + ")");
65
        if (split_delay > 0)
66
            snd_play_pitch(snd_chargeshot_fire, 0.5);
67
        snd_play(snd_chargeshot_fire);
68
        split_delay = 0;
69
        var _range = bullet_range;
70
        var _total = bullet_count;
71
        var _odd = false;
72
        if ((bullet_count % 2) == 1)
73
        {
74
            _odd = true;
75
            _total += 1;
76
        }
77
        var _flip = choose(true, false);
78
        var _shift = _range / ((_total / 2) - 1);
79
        var _trueangle = vertical ? (angle + 90) : angle;
80
        var _xrange = lengthdir_x(_range, _trueangle);
81
        var _yrange = lengthdir_y(_range, _trueangle);
82
        var _xshift = _xrange / ((_total / 2) - 1);
83
        var _yshift = _yrange / ((_total / 2) - 1);
84
        var _xstart = x - (_xrange / 2);
85
        var _ystart = y - (_yrange / 2);
86
        var _weight = 0;
87
        var _direction = 0;
88
        for (var _i = 0; _i < bullet_count; _i++)
89
        {
90
            if (!diagonal && _i == (_total / 2))
91
            {
92
                _xstart = x - (_xrange / 2);
93
                _ystart = y - (_yrange / 2);
94
                if (_odd)
95
                {
96
                    _xstart += (_xshift / 2);
97
                    _ystart += (_yshift / 2);
98
                }
99
                _weight = 0;
100
                _flip = !_flip;
101
            }
102
            if (_weight == 0)
103
                _weight = choose(-2, -1, 1, 2);
104
            _speed = inverselerp(-1, 1, sign(-_weight));
105
            if (diagonal)
106
                _b = instance_create(x, y, split_bullet);
107
            else
108
                _b = instance_create(_xstart, _ystart, split_bullet);
109
            _b.friction = (_speed == 1) ? -0.2 : -0.05;
110
            var _topspeed = (_speed == 1) ? 4 : 2;
111
            _b.top_speed = _topspeed + random_range(-0.2, 0.2);
112
            _b.image_speed = 0.5;
113
            _b.depth = depth + 1;
114
            _b.image_xscale = 2;
115
            _b.image_yscale = 2;
116
            _b.active = false;
117
            _b.speed = 0;
118
            if (diagonal)
119
                _direction += (360 / bullet_count);
120
            else if (vertical)
121
                _direction = _flip ? 180 : 0;
122
            else
123
                _direction = _flip ? 90 : -90;
124
            _b.direction = _direction;
125
            _b.image_angle = _direction;
126
            
scr_bullet_inherit
scr_bullet_inherit

function
scr_bullet_inherit(arg0)
{ if (i_ex(arg0)) { if (damage != -1) arg0.damage = damage; if (grazepoints != -1) arg0.grazepoints = grazepoints; if (timepoints != -1) arg0.timepoints = timepoints; if (inv != -1) arg0.inv = inv; if (target != -1) arg0.target = target; if (grazed != -1) arg0.grazed = 0; if (grazetimer != -1) arg0.grazetimer = 0; if (object_index == obj_dbulletcontroller) { arg0.creatorid = creatorid; arg0.creator = creator; } arg0.element = element; } }
(_b);
127
            _b.grazed = -1;
128
            child_bullet[count] = _b;
129
            count++;
130
            if (abs(_weight) == 1)
131
                _weight = choose(1, 2) * sign(-_weight);
132
            else
133
                _weight = 
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); } }
(_weight, 0, 1);
134
            _xstart += _xshift;
135
            _ystart += _yshift;
136
        }
137
    }
138
}
139
var _hold = diagonal ? (split_hold + 2) : split_hold;
140
if (con == 2)
141
{
142
    split = true;
143
    if (timer == 7)
144
    {
145
        for (i = 0; i < count; i++)
146
        {
147
            if (i_ex(child_bullet[i]))
148
            {
149
                child_bullet[i].depth = depth - 10;
150
                child_bullet[i].active = true;
151
                child_bullet[i].grazed = 0;
152
            }
153
        }
154
    }
155
    if (timer <= (_hold / 2))
156
    {
157
        distance = 
scr_ease_out
scr_ease_out

function
scr_ease_out(arg0, arg1)
{ if (arg1 < -3 || arg1 > 7) return arg0; switch (arg1) { case -3: return ease_out_bounce(arg0, 0, 1, 1); case -2: return ease_out_elastic(arg0, 0, 1, 1); case -1: return ease_out_back(arg0, 0, 1, 1); case 0: return arg0; case 1: return sin(arg0 * 1.5707963267948966); case 2: return -arg0 * (arg0 - 2); case 6: return -power(2, -10 * arg0) + 1; case 7: arg0--; return sqrt(1 - (arg0 * arg0)); default: arg0--; if (arg1 == 4) { return -1 * (power(arg0, arg1) - 1); break; } return power(arg0, arg1) + 1; } }
(timer / (split_hold / 2), 3) * max_distance;
158
        if (diagonal)
159
        {
160
            obj_heart.x += ((distance - old_distance) * heart_x * 1);
161
            obj_heart.y += ((distance - old_distance) * heart_y * 1);
162
        }
163
        else if (vertical)
164
        {
165
            obj_heart.x += ((distance - old_distance) * heart_x * 1.25);
166
        }
167
        else
168
        {
169
            obj_heart.y += ((distance - old_distance) * heart_y * 1.25);
170
        }
171
    }
172
    else
173
    {
174
        event_user(0);
175
    }
176
}
177
if (con == 3)
178
{
179
    distance = max_distance - (
scr_ease_in
scr_ease_in

function
scr_ease_in(arg0, arg1)
{ if (arg1 < -3 || arg1 > 7) return arg0; switch (arg1) { case -3: return ease_in_bounce(arg0, 0, 1, 1); case -2: return ease_in_elastic(arg0, 0, 1, 1); case -1: var _s = 1.70158; return arg0 * arg0 * (((_s + 1) * arg0) - _s); case 0: return arg0; case 1: return -cos(arg0 * 1.5707963267948966) + 1; case 6: return power(2, 10 * (arg0 - 1)); case 7: return -(sqrt(1 - sqr(arg0)) - 1); default: return power(arg0, arg1); } }
(timer / (split_hold / 2), 3) * max_distance);
180
    if (timer >= (_hold / 2))
181
    {
182
        if (vertical || diagonal)
183
            vshift = irandom_range(-3, 3);
184
        else
185
            hshift = irandom_range(-3, 3);
186
        if (diagonal)
187
            hshift = vshift;
188
        event_user(0);
189
    }
190
}
191
if (con == 4)
192
{
193
    distance = 
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); } }
(distance, 0, 12);
194
    if (distance == 0)
195
    {
196
        con = 0;
197
        split = false;
198
        if (difficulty == 3)
199
        {
200
            if (split_wait > 3)
201
                split_wait--;
202
            if (split_hold > 26)
203
                split_hold -= 2;
204
        }
205
        else
206
        {
207
            if (split_wait > 5)
208
                split_wait--;
209
            if (split_hold > 30)
210
                split_hold -= 2;
211
        }
212
        snd_play(snd_locker);
213
    }
214
}
215
var _dist = round(distance);
216
if (vertical)
217
{
218
    marker[0].image_angle = -90;
219
    marker[1].image_angle = 90;
220
    marker[0].x = x - _dist - 1;
221
    marker[1].x = x + _dist + 3;
222
    marker[0].y = y - 1;
223
    marker[1].y = y + 3;
224
}
225
else
226
{
227
    marker[0].image_angle = 180;
228
    marker[1].image_angle = 0;
229
    marker[0].y = y - _dist - 1;
230
    marker[1].y = y + _dist + 3;
231
    marker[0].x = x - 1;
232
    marker[1].x = x + 3;
233
}
234
if (distance > 0)
235
    obj_growtangle.x = -9999;
236
else
237
    obj_growtangle.x = obj_growtangle.xstart;