Undertale Yellow script viewer

← back to main script listing

gml_GlobalScript_scr_walk_ai

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

function scr_walk_ai(arg0, arg1, arg2, arg3, arg4) { dalv_walk_speed = arg3; condition_1 = false; if (no_loop_destination_dalv == false) { var destination_x = abs(x - arg0); var destination_y = abs(y - arg1); var axis_override = arg4; if (axis_override == "x" || axis_override == "y") { dalv_walk_axis = axis_override; } else { var result = sign(destination_x - destination_y); switch (result) { case 1: dalv_walk_axis = "x"; break; case -1: dalv_walk_axis = "y"; break; default: dalv_walk_axis = "y"; } } dalv_walk_speed_x = sign(arg0 - x) * dalv_walk_speed; dalv_walk_speed_y = sign(arg1 - y) * dalv_walk_speed; no_loop_destination_dalv = true; } if (x == arg0 && y == arg1) { npc_walking = false; path_speed = 0; image_speed = 0; image_index = 0; exit; } switch (dalv_walk_axis) { case "x": x_previous = x; x += dalv_walk_speed_x; if (abs(arg0 - x) < dalv_walk_speed && place_free(arg0, y) && !place_meeting(arg0, y, arg2)) x = arg0; if (place_free(x, y) && !place_meeting(x, y, arg2) && x_previous != arg0) { npc_walking = true; image_speed = 0.2; if (dalv_walk_speed_x == -dalv_walk_speed) direction = 180; else if (dalv_walk_speed_x == dalv_walk_speed) direction = 0; } if (!place_free(x, y) || place_meeting(x, y, arg2) || x_previous == arg0) { x = x_previous; dalv_walk_axis = "y"; exit; } dalv_walk_speed_y = sign(arg1 - y) * dalv_walk_speed; i = x + dalv_walk_speed_x; j = y; if (abs(arg0 - i) < dalv_walk_speed) i = arg0; while (j != arg1) { j += dalv_walk_speed_y; if (abs(arg1 - j) < dalv_walk_speed) j = arg1; if (!place_free(i, j) || place_meeting(i, j, arg2)) { condition_1 = true; break; } } if (condition_1 == true) { while (i != arg0) { i += dalv_walk_speed_x; j = y; if (abs(arg0 - i) < dalv_walk_speed) i = arg0; while (j != arg1) { j += dalv_walk_speed_y; if (abs(arg1 - j) < dalv_walk_speed) j = arg1; if (i == arg0 && j == arg1) exit; else if (!place_free(i, j) || place_meeting(i, j, arg2)) break; else if (j == arg1) exit; } } dalv_walk_axis = "y"; exit; ...
(arg0, arg1, arg2, arg3, arg4)
2
{
3
    dalv_walk_speed = arg3;
4
    condition_1 = false;
5
    if (no_loop_destination_dalv == false)
6
    {
7
        var destination_x = abs(x - arg0);
8
        var destination_y = abs(y - arg1);
9
        var axis_override = arg4;
10
        if (axis_override == "x" || axis_override == "y")
11
        {
12
            dalv_walk_axis = axis_override;
13
        }
14
        else
15
        {
16
            var result = sign(destination_x - destination_y);
17
            switch (result)
18
            {
19
                case 1:
20
                    dalv_walk_axis = "x";
21
                    break;
22
                case -1:
23
                    dalv_walk_axis = "y";
24
                    break;
25
                default:
26
                    dalv_walk_axis = "y";
27
            }
28
        }
29
        dalv_walk_speed_x = sign(arg0 - x) * dalv_walk_speed;
30
        dalv_walk_speed_y = sign(arg1 - y) * dalv_walk_speed;
31
        no_loop_destination_dalv = true;
32
    }
33
    if (x == arg0 && y == arg1)
34
    {
35
        npc_walking = false;
36
        path_speed = 0;
37
        image_speed = 0;
38
        image_index = 0;
39
        exit;
40
    }
41
    switch (dalv_walk_axis)
42
    {
43
        case "x":
44
            x_previous = x;
45
            x += dalv_walk_speed_x;
46
            if (abs(arg0 - x) < dalv_walk_speed && place_free(arg0, y) && !place_meeting(arg0, y, arg2))
47
                x = arg0;
48
            if (place_free(x, y) && !place_meeting(x, y, arg2) && x_previous != arg0)
49
            {
50
                npc_walking = true;
51
                image_speed = 0.2;
52
                if (dalv_walk_speed_x == -dalv_walk_speed)
53
                    direction = 180;
54
                else if (dalv_walk_speed_x == dalv_walk_speed)
55
                    direction = 0;
56
            }
57
            if (!place_free(x, y) || place_meeting(x, y, arg2) || x_previous == arg0)
58
            {
59
                x = x_previous;
60
                dalv_walk_axis = "y";
61
                exit;
62
            }
63
            dalv_walk_speed_y = sign(arg1 - y) * dalv_walk_speed;
64
            i = x + dalv_walk_speed_x;
65
            j = y;
66
            if (abs(arg0 - i) < dalv_walk_speed)
67
                i = arg0;
68
            while (j != arg1)
69
            {
70
                j += dalv_walk_speed_y;
71
                if (abs(arg1 - j) < dalv_walk_speed)
72
                    j = arg1;
73
                if (!place_free(i, j) || place_meeting(i, j, arg2))
74
                {
75
                    condition_1 = true;
76
                    break;
77
                }
78
            }
79
            if (condition_1 == true)
80
            {
81
                while (i != arg0)
82
                {
83
                    i += dalv_walk_speed_x;
84
                    j = y;
85
                    if (abs(arg0 - i) < dalv_walk_speed)
86
                        i = arg0;
87
                    while (j != arg1)
88
                    {
89
                        j += dalv_walk_speed_y;
90
                        if (abs(arg1 - j) < dalv_walk_speed)
91
                            j = arg1;
92
                        if (i == arg0 && j == arg1)
93
                            exit;
94
                        else if (!place_free(i, j) || place_meeting(i, j, arg2))
95
                            break;
96
                        else if (j == arg1)
97
                            exit;
98
                    }
99
                }
100
                dalv_walk_axis = "y";
101
                exit;
102
            }
103
            break;
104
        case "y":
105
            y_previous = y;
106
            y += dalv_walk_speed_y;
107
            if (abs(arg1 - y) < dalv_walk_speed && place_free(x, arg1) && !place_meeting(x, arg1, arg2))
108
                y = arg1;
109
            if (place_free(x, y) && !place_meeting(x, y, arg2) && y_previous != arg1)
110
            {
111
                npc_walking = true;
112
                image_speed = 0.2;
113
                if (dalv_walk_speed_y == -dalv_walk_speed)
114
                    direction = 90;
115
                else if (dalv_walk_speed_y == dalv_walk_speed)
116
                    direction = 270;
117
            }
118
            if (!place_free(x, y) || place_meeting(x, y, arg2) || y_previous == arg1)
119
            {
120
                y = y_previous;
121
                dalv_walk_axis = "x";
122
                exit;
123
            }
124
            dalv_walk_speed_x = sign(arg0 - x) * dalv_walk_speed;
125
            i = x;
126
            j = y + dalv_walk_speed_y;
127
            if (abs(arg1 - j) < dalv_walk_speed)
128
                j = arg1;
129
            while (i != arg0)
130
            {
131
                i += dalv_walk_speed_x;
132
                if (abs(arg0 - i) < dalv_walk_speed)
133
                    i = arg0;
134
                if (!place_free(i, j) || place_meeting(i, j, arg2))
135
                {
136
                    condition_1 = true;
137
                    break;
138
                }
139
            }
140
            if (condition_1 == true)
141
            {
142
                while (j != arg1)
143
                {
144
                    i = x;
145
                    j += dalv_walk_speed_y;
146
                    if (abs(arg1 - j) < dalv_walk_speed)
147
                        j = arg1;
148
                    while (i != arg0)
149
                    {
150
                        i += dalv_walk_speed_x;
151
                        if (abs(arg0 - i) < dalv_walk_speed)
152
                            i = arg0;
153
                        if (i == arg0 && j == arg1)
154
                            exit;
155
                        else if (!place_free(i, j) || place_meeting(i, j, arg2))
156
                            break;
157
                        else if (i == arg0)
158
                            exit;
159
                    }
160
                }
161
                dalv_walk_axis = "x";
162
                exit;
163
            }
164
            break;
165
    }
166
    if (x == arg0 && y == arg1)
167
    {
168
        npc_walking = false;
169
        path_speed = 0;
170
        image_speed = 0;
171
        image_index = 0;
172
    }
173
}