Deltarune (Chapter 4) script viewer

← back to main script listing

gml_Object_obj_ow_pathingenemy_Step_0

(view raw script w/o annotations or w/e)
1
scr_depth
scr_depth

function
scr_depth(arg0 = id, arg1 = 0)
{ with (arg0) depth = 100000 - ((y * 10) + (sprite_height * 10) + (arg1 * 10)); }
();
2
if (init == 0)
3
{
4
    if (r_movetype != -1)
5
        movetype = r_movetype;
6
    if (r_dir != -1)
7
        dir = r_dir;
8
    if (r_waittime != -1)
9
        waittime = r_waittime;
10
    if (r_waittimer != -1)
11
        waittimer = r_waittimer;
12
    if (r_movetime != -1)
13
        movetime = r_movetime;
14
    if (r_movetimer != -1)
15
        movetimer = r_movetimer;
16
    if (r_influenceable != -1)
17
        influenceable = r_influenceable;
18
    if (r_homedistance != -1)
19
        homedistance = r_homedistance;
20
    if (r_movevistype != -1)
21
        movevistype = r_movevistype;
22
    if (r_prefdir != "none")
23
        prefdir = r_prefdir;
24
    init = 1;
25
}
26
event_inherited();
27
var _blocked = 0;
28
if (global.interact != 0)
29
    _blocked = 1;
30
if (!_blocked)
31
{
32
    if (neutralcon == 0)
33
    {
34
        waittimer++;
35
        if (waittimer >= waittime)
36
        {
37
            waittimer = 0;
38
            movetimer = 0;
39
            if (updmove != -1)
40
            {
41
                movetime = updmove;
42
                updmove = -1;
43
            }
44
            if (updwait != -1)
45
            {
46
                waittime = updwait;
47
                updwait = -1;
48
            }
49
            var domove = false;
50
            var normalpath = false;
51
            var seek = false;
52
            var kris = instance_find(obj_mainchara, 0);
53
            if (movetype == 0)
54
                normalpath = true;
55
            if (movetype == 1)
56
            {
57
                if (i_ex(kris))
58
                {
59
                    if (distance_to_point(kris.x, kris.y) <= homedistance)
60
                        seek = true;
61
                }
62
                if (seek == false)
63
                    normalpath = true;
64
            }
65
            if (movetype == 2)
66
            {
67
                seek = true;
68
                if (!i_ex(kris))
69
                    seek = false;
70
            }
71
            if (movetype == 3)
72
            {
73
                domove = true;
74
                if (place_meeting(x, y, obj_solidenemy_2))
75
                    doom = true;
76
            }
77
            if (influenceable)
78
            {
79
                var turn = instance_place(x, y, obj_climb_pathturner);
80
                if (i_ex(turn) && random_range(0, 1) <= turn.chance)
81
                {
82
                    with (turn)
83
                    {
84
                        visible = true;
85
                        scr_delay_var("visible", false, 5);
86
                    }
87
                    seek = false;
88
                    normalpath = false;
89
                    dir = turn.image_index;
90
                    domove = true;
91
                }
92
            }
93
            if (seek)
94
            {
95
                normalpath = false;
96
                var krisdir = point_direction(x + 20, y + 20, kris.x, kris.y);
97
                var card = round(krisdir / 90) + 1;
98
                if (card > 3)
99
                    card = 0;
100
                good[0] = true;
101
                good[1] = true;
102
                good[2] = true;
103
                good[3] = true;
104
                if (failmovecount < failmovethresh)
105
                {
106
                    if (lastdir == 0)
107
                        good[2] = false;
108
                    if (lastdir == 2)
109
                        good[0] = false;
110
                    if (lastdir == 1)
111
                        good[3] = false;
112
                    if (lastdir == 3)
113
                        good[1] = false;
114
                }
115
                for (i = 0; i < 4; i++)
116
                {
117
                    var px = 0;
118
                    var py = 0;
119
                    var potcard = card + i;
120
                    if (potcard > 3)
121
                        potcard = 0;
122
                    if (potcard == 0)
123
                        py = 40;
124
                    if (potcard == 1)
125
                        px = 40;
126
                    if (potcard == 2)
127
                        py = -40;
128
                    if (potcard == 3)
129
                        px = -40;
130
                    if (good[potcard])
131
                    {
132
                        if (place_meeting(x + px, y + py, obj_solidblock))
133
                            good[potcard] = false;
134
                        if (place_meeting(x + px, y + py, obj_solidenemy))
135
                            good[potcard] = false;
136
                    }
137
                }
138
                var i = 0;
139
                while (i < 4)
140
                    i++;
141
                if (good[card])
142
                {
143
                    dir = card;
144
                    domove = true;
145
                }
146
                if (!domove)
147
                {
148
                    var turnleft = 
scr_wrap
scr_wrap

function
scr_wrap()
{ var _val = argument[0]; var _max = argument[2]; var _min = argument[1]; if ((_val % 1) == 0) { while (_val > _max || _val < _min) { if (_val > _max) { _val = (_min + _val) - _max - 1; } else if (_val < _min) { _val = ((_max + _val) - _min) + 1; } else { } } return _val; } else { var _old = argument[0] + 1; while (_val != _old) { _old = _val; if (_val < _min) { _val = _max - (_min - _val); } else if (_val > _max) { _val = _min + (_val - _max); } else { } } return _val; } }
(card - 1, 0, 3);
149
                    var turnright = 
scr_wrap
scr_wrap

function
scr_wrap()
{ var _val = argument[0]; var _max = argument[2]; var _min = argument[1]; if ((_val % 1) == 0) { while (_val > _max || _val < _min) { if (_val > _max) { _val = (_min + _val) - _max - 1; } else if (_val < _min) { _val = ((_max + _val) - _min) + 1; } else { } } return _val; } else { var _old = argument[0] + 1; while (_val != _old) { _old = _val; if (_val < _min) { _val = _max - (_min - _val); } else if (_val > _max) { _val = _min + (_val - _max); } else { } } return _val; } }
(card + 1, 0, 3);
150
                    switch (card)
151
                    {
152
                        case 0:
153
                            turnleft = 3;
154
                            turnright = 1;
155
                            break;
156
                        case 1:
157
                            turnleft = 2;
158
                            turnright = 0;
159
                            break;
160
                        case 2:
161
                            turnleft = 3;
162
                            turnright = 1;
163
                            break;
164
                        case 3:
165
                            turnleft = 0;
166
                            turnright = 2;
167
                            break;
168
                    }
169
                    var px = 0;
170
                    var py = 0;
171
                    if (good[turnleft] && !good[turnright])
172
                    {
173
                        dir = turnleft;
174
                        domove = true;
175
                    }
176
                    if (good[turnright] && !good[turnleft])
177
                    {
178
                        dir = turnright;
179
                        domove = true;
180
                    }
181
                    if (good[turnleft] && good[turnright])
182
                    {
183
                        var leftdist = 0;
184
                        var rightdist = 0;
185
                        var potcard = turnleft;
186
                        if (potcard == 0)
187
                            py = 40;
188
                        if (potcard == 1)
189
                            px = 40;
190
                        if (potcard == 2)
191
                            py = -40;
192
                        if (potcard == 3)
193
                            px = -40;
194
                        leftdist = point_distance(x + 20 + px, y + 20 + py, kris.x, kris.y);
195
                        potcard = turnright;
196
                        if (potcard == 0)
197
                            py = 40;
198
                        if (potcard == 1)
199
                            px = 40;
200
                        if (potcard == 2)
201
                            py = -40;
202
                        if (potcard == 3)
203
                            px = -40;
204
                        rightdist = point_distance(x + 20 + px, y + 20 + py, kris.x, kris.y);
205
                        if (leftdist > rightdist)
206
                        {
207
                            dir = turnright;
208
                            domove = true;
209
                        }
210
                        else
211
                        {
212
                            dir = turnleft;
213
                            domove = true;
214
                        }
215
                    }
216
                }
217
                if (!domove)
218
                    failmovecount++;
219
            }
220
            if (normalpath)
221
            {
222
                for (var i = 0; i < 4; i++)
223
                {
224
                    if (domove)
225
                        continue;
226
                    var px = 0;
227
                    var py = 0;
228
                    if (dir == 0)
229
                        py = 40;
230
                    if (dir == 1)
231
                        px = 40;
232
                    if (dir == 2)
233
                        py = -40;
234
                    if (dir == 3)
235
                        px = -40;
236
                    if (!place_meeting(x + px, y + py, obj_solidblock) && !place_meeting(x + px, y + py, obj_solidenemy))
237
                        domove = true;
238
                    if (!domove)
239
                    {
240
                        if (prefdir == "left")
241
                            dir++;
242
                        if (prefdir == "right")
243
                            dir--;
244
                        if (dir > 3)
245
                            dir = 0;
246
                        if (dir < 0)
247
                            dir = 3;
248
                    }
249
                }
250
            }
251
            if (domove)
252
            {
253
                neutralcon = 1;
254
                safex = x;
255
                safey = y;
256
            }
257
        }
258
    }
259
    if (neutralcon == 1)
260
    {
261
        var px = 0;
262
        var py = 0;
263
        if (dir == 0)
264
            py = 40;
265
        if (dir == 1)
266
            px = 40;
267
        if (dir == 2)
268
            py = -40;
269
        if (dir == 3)
270
            px = -40;
271
        movetimer++;
272
        var prog = clamp(movetimer, 0, movetime) / movetime;
273
        var pointAx = safex;
274
        var pointBx = safex + px;
275
        var pointAy = safey;
276
        var pointBy = safey + py;
277
        if (movevistype == 0)
278
        {
279
            x = lerp(pointAx, pointBx, prog);
280
            y = lerp(pointAy, pointBy, prog);
281
        }
282
        if (movevistype == 1)
283
        {
284
            x = lerp_ease_inout(pointAx, pointBx, prog, 2);
285
            y = lerp_ease_inout(pointAy, pointBy, prog, 2);
286
        }
287
        var amblocked = false;
288
        if (place_meeting(pointBx, pointBy, obj_solidblock) || place_meeting(pointBx, pointBy, obj_solidenemy))
289
            amblocked = true;
290
        if (movetype == 3)
291
            amblocked = false;
292
        if (amblocked)
293
        {
294
            x = safex;
295
            y = safey;
296
            waittimer = 0;
297
            movetimer = 0;
298
            neutralcon = 0;
299
            lastdir = dir;
300
            failmovecount++;
301
        }
302
        if (movetimer >= movetime)
303
        {
304
            failmovecount = 0;
305
            lastdir = dir;
306
            x = safex + px;
307
            y = safey + py;
308
            waittimer = 0;
309
            movetimer = 0;
310
            neutralcon = 0;
311
            if (updmove != -1)
312
            {
313
                movetime = updmove;
314
                updmove = -1;
315
            }
316
            if (updwait != -1)
317
            {
318
                waittime = updwait;
319
                updwait = -1;
320
            }
321
        }
322
    }
323
}
324
if (x > xprevious)
325
    idir = 1;
326
if (x < xprevious)
327
    idir = 3;
328
if (y > yprevious)
329
    idir = 0;
330
if (y < yprevious)
331
    idir = 2;
332
if (doom == true)
333
{
334
    image_alpha = lerp(image_alpha, -0.1, 0.16666666666666666);
335
    if (image_alpha <= 0)
336
        instance_destroy();
337
}
338
else
339
{
340
    image_alpha = lerp(image_alpha, 1, 0.16666666666666666);
341
}