Undertale Yellow script viewer

← back to main script listing

gml_GlobalScript_lines_intersect

(view raw script w/o annotations or w/e)
1
function lines_intersect(argument0, argument1, argument2, argument3, argument4, argument5, argument6, argument7) //gml_Script_lines_intersect
2
{
3
    var _x1 = argument0
4
    var _y1 = argument1
5
    var _x2 = argument2
6
    var _y2 = argument3
7
    var _x3 = argument4
8
    var _y3 = argument5
9
    var _x4 = argument6
10
    var _y4 = argument7
11
    var _dir1 = point_direction(_x1, _y1, _x2, _y2)
12
    var _dir2 = point_direction(_x1, _y1, _x3, _y3)
13
    var _dir3 = point_direction(_x1, _y1, _x4, _y4)
14
    var _dir4 = point_direction(_x3, _y3, _x4, _y4)
15
    var _dir5 = point_direction(_x3, _y3, _x1, _y1)
16
    var _dir6 = point_direction(_x3, _y3, _x2, _y2)
17
    var _diff1 = sign(angle_difference(_dir1, _dir2))
18
    var _diff2 = sign(angle_difference(_dir1, _dir3))
19
    if (abs(_diff1 + _diff2) > 1)
20
        return -1;
21
    _diff1 = sign(angle_difference(_dir4, _dir5))
22
    _diff2 = sign(angle_difference(_dir4, _dir6))
23
    if (abs(_diff1 + _diff2) > 1)
24
        return -1;
25
    var _C = 90
26
    var _A = _dir2 - _dir1
27
    var _B = 180 - _A - _C
28
    var _c = point_distance(_x1, _y1, _x3, _y3)
29
    _a = _c / dsin(_C) * dsin(_A)
30
    var _b = _c / dsin(_C) * dsin(_B)
31
    var _l = _b
32
    _B = _dir4 - _dir1 - 90
33
    _A = 180 - _B - _C
34
    if (dsin(_A) == 0)
35
    {
36
        var _x = mean(max(min(_x1, _x2), min(_x3, _x4)), min(max(_x1, _x2), max(_x3, _x4)))
37
        var _y = mean(max(min(_y1, _y2), min(_y3, _y4)), min(max(_y1, _y2), max(_y3, _y4)))
38
        _l = point_distance(_x1, _y1, _x, _y)
39
        return (_l / (point_distance(_x1, _y1, _x2, _y2)));
40
    }
41
    _b = _a / dsin(_A) * dsin(_B)
42
    _l += _b
43
    var _sc = _l / (point_distance(_x1, _y1, _x2, _y2))
44
    return _sc;
45
}