Deltarune (Chapter 4) script viewer

← back to main script listing

gml_Object_obj_rotating_tower_controller_new_Step_0

(view raw script w/o annotations or w/e)
1
if (i_ex(obj_climb_kris))
2
{
3
    krisx = camerax() + tower_x;
4
    krisy = obj_climb_kris.y + obj_climb_kris.drawoffsety;
5
    if (obj_climb_kris.onrotatingtower == true)
6
    {
7
        var adjustment = tower_x - tower_angle_fine_tune;
8
        var last_angle = tower_angle;
9
        tower_angle = lerp(0, 360, (obj_climb_kris.x - adjustment) / tower_circumference) - (tile_angle_difference / 2);
10
        tower_angle = (tower_angle + 360) % 360;
11
        if (abs(tower_angle - last_angle) > 100)
12
            tower_angle_add += (360 * sign(tower_angle - last_angle));
13
        tower_y = lerp(tower_ystart, tower_height, obj_climb_kris.y / tower_height);
14
    }
15
    if (destroy_climbstarter == true && i_ex(climbstarter_obj))
16
    {
17
        with (climbstarter_obj)
18
            instance_destroy();
19
    }
20
}
21
if (i_ex(obj_climb_kris))
22
{
23
    kristilex = (obj_climb_kris.x / tile_width_fine) + 1;
24
    kristiley = obj_climb_kris.y / tile_width_fine;
25
    if (kristiley > (verticaltilecount - 1))
26
        kristiley = verticaltilecount - 1;
27
    if (kristilex > horizontaltilecount)
28
        kristilex -= horizontaltilecount;
29
    if (kristilex < 0)
30
        kristilex += horizontaltilecount;
31
}
32
if (tile_sprite[xy(kristilex, kristiley)][1] == spr_climb_spike_2scale && checkdamagefloor)
33
{
34
    with (obj_climb_kris)
35
    {
36
        damage = 30;
37
        damagecon = 1;
38
    }
39
}
40
checkdamagefloor = 0;
41
if (i_ex(obj_rotating_bg_controller_new))
42
{
43
    if (i_ex(obj_climb_kris))
44
    {
45
        obj_rotating_bg_controller_new.tunnel_offset_x += ((obj_climb_kris.x - obj_climb_kris.xprevious) * 2);
46
        obj_rotating_bg_controller_new.tunnel_offset_y -= ((obj_climb_kris.y - obj_climb_kris.yprevious) * 0.4);
47
    }
48
    else if (i_ex(obj_mainchara))
49
    {
50
        obj_rotating_bg_controller_new.tunnel_offset_x += ((obj_mainchara.x - obj_mainchara.xprevious) * 0.2);
51
        obj_rotating_bg_controller_new.tunnel_offset_y -= ((obj_mainchara.y - obj_mainchara.yprevious) * 0.3);
52
    }
53
}
54
if (
scr_debug
scr_debug

function
scr_debug()
{ if (global.debug == 1) return 1; }
() && keyboard_check_pressed(ord("V")))
55
    dodraw = !dodraw;
56
if (endclimb)
57
    endclimbtimer++;
58
if (tower_angle != tower_angle_prev2)
59
{
60
    tower_angle_prev2 = tower_angle;
61
    visible_indices = [];
62
    backface_indices = [];
63
    last_tile_angle = tile_angle[0] + tower_angle;
64
    if (last_tile_angle < 0)
65
        last_tile_angle += 360;
66
    else if (last_tile_angle > 360)
67
        last_tile_angle -= 360;
68
    for (i = 0; i < horizontaltilecount; i++)
69
    {
70
        var tile_angle1 = tile_angle[i] + tower_angle;
71
        if (tile_angle1 >= 360)
72
            tile_angle1 -= 360;
73
        else if (tile_angle1 < 0)
74
            tile_angle1 += 360;
75
        if (appearance < 2)
76
            tile_vis[i] = tile_angle1 > 350 || tile_angle1 <= 170;
77
        else
78
            tile_vis[i] = tile_angle1 >= 345 || tile_angle1 <= 165;
79
        if (appearance == 1 && tile_vis[i] == false && (tile_angle1 >= 340 || tile_angle1 <= 190))
80
            tile_vis[i] = 2;
81
        if (tile_vis[i] == false)
82
            continue;
83
        tile_x[i] = lengthdir_x(tower_radius, tile_angle1);
84
        var tile_angle2 = tile_angle1 + tile_angle_difference;
85
        if (tile_angle2 > 360)
86
            tile_angle2 -= 360;
87
        else if (tile_angle2 < 0)
88
            tile_angle2 += 360;
89
        tile_xscale[i] = lengthdir_x(tower_radius, tile_angle2) - tile_x[i];
90
        tile_color[i] = merge_color(c_white, tile_dark_color, col_blend * clamp(abs(tile_x[i] + (tile_xscale[i] * 0.5)) / 190, 0, 1));
91
        if (tile_vis[i] == 1)
92
            array_push(visible_indices, i);
93
        else if (tile_vis[i] == 2)
94
            array_push(backface_indices, i);
95
    }
96
}
97
if (appearance == 2 && tower_falls_apart_con == 1 && tower_falls_apart_i >= 0)
98
{
99
    var yoffset = (verticaltilecount * tile_height_fine) - (cameray() + cameraheight());
100
    var render_ypos = round(cameray() / tile_height_fine);
101
    var last = tower_falls_apart_timer;
102
    if (tower_falls_apart_i >= (fall_limit_min / 40))
103
    {
104
        if (abs(render_ypos - tower_falls_apart_i) > 3)
105
            tower_falls_apart_timer += (fall_speed * 4);
106
        else
107
            tower_falls_apart_timer += fall_speed;
108
    }
109
    if (last == 0 && tower_falls_apart_timer > last)
110
    {
111
        if (tower_falls_apart_i == 0)
112
        {
113
            tower_falls_apart_i = render_ypos + 8;
114
            layer_set_visible(layer_get_id("TILES"), 0);
115
            i = render_ypos + 13;
116
            while (i < 160)
117
            {
118
                for (ii = 0; ii < horizontaltilecount; ii++)
119
                    tile_sprite[xy(ii, i)][0] = spr_nothing;
120
                i++;
121
            }
122
        }
123
        else
124
        {
125
            tower_falls_apart_i--;
126
        }
127
        var deathY = (tile_height * (tower_falls_apart_i + 7)) + tower_ystart;
128
        for (var _i = 0; _i < horizontaltilecount; _i++)
129
        {
130
            if (tile_sprite[xy(_i, tower_falls_apart_i + 7)][0] != spr_nothing)
131
            {
132
                if ((tower_falls_apart_i + 7) < verticaltilecount)
133
                    tile_sprite[xy(_i, tower_falls_apart_i + 7)][0] = spr_nothing;
134
            }
135
        }
136
        with (obj_climb_climbable)
137
        {
138
            while ((y + (image_yscale * 40)) > deathY)
139
                image_yscale -= 1;
140
            if (y >= deathY)
141
                instance_destroy();
142
        }
143
        var rotating_piece = instance_nearest(0, 0, obj_tower_dog_fx1);
144
        var instances = [];
145
        deathY += 40;
146
        var aaa = ds_list_create();
147
        ds_list_add(aaa, 1, 6, 11, 16);
148
        ds_list_shuffle(aaa);
149
        var bottom = cameray() + cameraheight();
150
        while (rotating_piece.image_yscale > 0 && (rotating_piece.y + (rotating_piece.image_yscale * 40)) >= deathY)
151
        {
152
            rotating_piece.image_yscale -= 1;
153
            if ((rotating_piece.y + (rotating_piece.image_yscale * 40)) <= bottom)
154
            {
155
                for (var _i = 0; _i < 4; _i++)
156
                {
157
                    instances[_i] = instance_create_depth(rotating_piece.x, rotating_piece.y + (rotating_piece.image_yscale * 40), depth + 100, obj_tower_falling_piece);
158
                    if (_i == 0)
159
                        instances[_i].sprite_index = spr_tower_rotating_piece1_strip1;
160
                    if (_i == 1)
161
                        instances[_i].sprite_index = spr_tower_rotating_piece1_strip2;
162
                    if (_i == 2)
163
                        instances[_i].sprite_index = spr_tower_rotating_piece1_strip3;
164
                    if (_i == 3)
165
                        instances[_i].sprite_index = spr_tower_rotating_piece1_strip4;
166
                    instances[_i].image_index = rotating_piece.image_index;
167
                    instances[_i].delay = ds_list_find_value(aaa, _i);
168
                    instances[_i].depth = depth;
169
                }
170
            }
171
            if (rotating_piece.image_yscale <= 0)
172
            {
173
                instance_destroy(rotating_piece);
174
                fall_speed = 0;
175
                break;
176
            }
177
        }
178
        ds_list_destroy(aaa);
179
    }
180
    if (tower_falls_apart_i > 0 && obj_climb_kris.y >= ((tile_height * (tower_falls_apart_i + 7)) + tower_ystart) && obj_climb_kris.fallingtimer < 900)
181
    {
182
        obj_climb_kris.fallingcon = 1;
183
        obj_climb_kris.fallingtimer = 999;
184
        snd_play_pitch(snd_fall, 0.8);
185
        with (instance_create(0, 0, obj_tower_falling_kris_falls))
186
            con = 0.5;
187
    }
188
    if (tower_falls_apart_timer >= 65)
189
        tower_falls_apart_timer = 0;
190
    last = tower_falls_apart_timer_dog;
191
    if (tower_falls_apart_i_dog >= (fall_limit_min / 40))
192
    {
193
        if (abs(render_ypos - tower_falls_apart_i) <= 3 && fall_speed == fall_speed_dog)
194
            tower_falls_apart_timer_dog += fall_speed_dog;
195
        else
196
            tower_falls_apart_timer_dog += (fall_speed_dog * 4);
197
    }
198
    if (last == 0 && tower_falls_apart_timer_dog > last)
199
    {
200
        if (tower_falls_apart_i_dog == 0)
201
        {
202
            tower_falls_apart_i_dog = render_ypos + 6;
203
            with (obj_tower_dog_ladder_fake)
204
            {
205
                if (y >= (cameray() + cameraheight()))
206
                    instance_destroy();
207
            }
208
        }
209
        else
210
        {
211
            tower_falls_apart_i_dog--;
212
        }
213
        var deathY = (tile_height * (tower_falls_apart_i_dog + 8)) + tower_ystart;
214
        with (obj_tower_dog_ladder_fake)
215
        {
216
            if ((y + 40) >= deathY)
217
                instance_destroy(self);
218
        }
219
        var rotating_piece = instance_nearest(tower_x + 600, deathY, obj_tower_dog_fx1);
220
        var instances = [];
221
        var aaa = ds_list_create();
222
        ds_list_add(aaa, 1, 6, 11, 16);
223
        ds_list_shuffle(aaa);
224
        if (rotating_piece != -4 && rotating_piece.x >= (tower_x + 200))
225
        {
226
            var bottom = cameray() + cameraheight();
227
            while (rotating_piece.image_yscale > 0 && ((rotating_piece.image_yscale * 40) + rotating_piece.y) >= deathY)
228
            {
229
                rotating_piece.image_yscale -= 1;
230
                if ((rotating_piece.y + (rotating_piece.image_yscale * 40)) <= bottom)
231
                {
232
                    for (var _i = 0; _i < 4; _i++)
233
                    {
234
                        instances[_i] = instance_create_depth(rotating_piece.x, rotating_piece.y + (rotating_piece.image_yscale * 40), depth + 100, obj_tower_falling_piece);
235
                        if (_i == 0)
236
                            instances[_i].sprite_index = spr_tower_rotating_piece1_strip1;
237
                        if (_i == 1)
238
                            instances[_i].sprite_index = spr_tower_rotating_piece1_strip2;
239
                        if (_i == 2)
240
                            instances[_i].sprite_index = spr_tower_rotating_piece1_strip3;
241
                        if (_i == 3)
242
                            instances[_i].sprite_index = spr_tower_rotating_piece1_strip4;
243
                        instances[_i].image_index = rotating_piece.image_index;
244
                        instances[_i].delay = ds_list_find_value(aaa, _i);
245
                    }
246
                }
247
                if (rotating_piece.image_yscale <= 0)
248
                {
249
                    instance_destroy(rotating_piece);
250
                    fall_speed_dog = 0;
251
                    break;
252
                }
253
            }
254
            ds_list_destroy(aaa);
255
            if (i_ex(obj_tower_dog) && obj_tower_dog.fallingoff == false && obj_tower_dog.draw_y >= deathY)
256
            {
257
                with (obj_tower_dog)
258
                    fallingoff = true;
259
            }
260
        }
261
    }
262
    if (endclimb == false)
263
    {
264
        if (tower_falls_apart_timer_dog >= 65)
265
            tower_falls_apart_timer_dog = 0;
266
    }
267
}