Deltarune (Chapter 4) script viewer

← back to main script listing

gml_Object_obj_rotating_tower_controller_new_Create_0

(view raw script w/o annotations or w/e)
1
depth = 1000100;
2
tower_falls_apart_i = 0;
3
tower_falls_apart_con = 0;
4
tower_falls_apart_timer = 0;
5
tower_angle_add = 0;
6
tower_falls_apart_i_dog = 0;
7
tower_falls_apart_timer_dog = 0;
8
fall_speed = 0;
9
fall_speed_dog = 0;
10
fall_limit_min = 0;
11
valid_tile_indices = [];
12
instance_create_depth(0, 0, depth - 5, obj_rotating_kris_controller_new);
13
u_iTime = shader_get_uniform(shd_fountaineffect, "iTime");
14
u_iPosOffset = shader_get_uniform(shd_fountaineffect, "iPosOffset");
15
u_iResolution = shader_get_uniform(shd_fountaineffect, "iResolution");
16
u_uvs = shader_get_uniform(shd_fountaineffect, "uvs");
17
s_uvs = sprite_get_uvs(bg_fountain1, 0);
18
u_extents = shader_get_uniform(shd_fakedepth, "iExtents");
19
u_centerx = shader_get_uniform(shd_fakedepth, "iCenterX");
20
tilesurface = surface_create(640, 480);
21
endclimb = false;
22
endclimbtimer = 0;
23
tower_x = 320;
24
tower_y = 0;
25
player_starting_y = 320;
26
destroy_climbstarter = true;
27
turnobjectsintotilevariants = true;
28
tiledefaultclimbable = false;
29
cull_objects = false;
30
tile_dark_color = 8421504;
31
if (appearance == 1)
32
    tile_dark_color = make_color_rgb(5, 5, 5);
33
if (appearance == 1)
34
{
35
    
scr_losechar
scr_losechar

function
scr_losechar()
{ global.char[2] = 0; global.char[1] = 0; with (obj_darkcontroller) { chartotal = 0; havechar[0] = 0; havechar[1] = 0; havechar[2] = 0; havechar[3] = 0; for (i = 0; i < 3; i += 1) { global.faceaction[i] = 0; if (global.char[i] != 0) chartotal += 1; if (global.char[i] == 1) { havechar[0] = 1; charpos[0] = i; } if (global.char[i] == 2) { havechar[1] = 1; charpos[1] = i; } if (global.char[i] == 3) { havechar[2] = 1; charpos[2] = i; } if (global.char[i] == 4) { havechar[3] = 1; charpos[3] = i; } } } global.submenu = 0; global.charselect = -1; for (i = 0; i < 36; i += 1) global.submenucoord[i] = 0; }
();
36
    bgsiner = 0;
37
    siner = 100;
38
    colcol = 0;
39
    hscroll = 0;
40
    eyebody = 1;
41
    nowcolor = c_lime;
42
}
43
if (room == room_rotating_tower_new_test)
44
    tiledefaultclimbable = true;
45
if (room == room_dw_churchb_rotatingtower || instance_exists(obj_dw_churchb_rotatingtower))
46
{
47
    tower_x = 780;
48
    verticaltilecount = 93;
49
}
50
if (room == room_dw_churchb_rotatingtower2 || instance_exists(obj_dw_churchb_rotatingtower2))
51
{
52
    tower_x = 1600;
53
    verticaltilecount = 191;
54
}
55
if (room == room_dw_church_dogclimb || instance_exists(obj_tower_dog_controller))
56
    verticaltilecount = 215;
57
col_blend = 1;
58
visible_indices = [];
59
backface_indices = [];
60
tower_xshake = 0;
61
tower_yshake = 0;
62
tower_angle_prev = -1;
63
tower_angle_prev2 = -1;
64
tile_width = 40;
65
tile_height = 40;
66
tile_width_fine = tile_width;
67
tile_height_fine = tile_height;
68
if (appearance == 1)
69
{
70
    tile_width_fine = tile_width * 0.5;
71
    tile_height_fine = tile_height * 0.5;
72
}
73
tower_height = verticaltilecount * tile_height_fine;
74
tower_radius = tower_width / 2;
75
tower_circumference = (2 * pi) * tower_radius;
76
tower_ystart = tower_y;
77
tower_y_prev = tower_y;
78
maincharayprevious = obj_mainchara.y;
79
towertype = 0;
80
timer = 0;
81
angle_extra = 0;
82
checkdamagefloor = 0;
83
krisx = 0;
84
krisy = 0;
85
kristilex = 1;
86
kristiley = 1;
87
px = 0;
88
py = 0;
89
reticle_i = 0;
90
found = 0;
91
i = 0;
92
ii = 0;
93
dodraw = false;
94
95
obj_rotating_tower_controller_new.xy = function(arg0, arg1)
96
{
97
    return (arg1 * horizontaltilecount) + arg0;
98
};
99
100
tower_circumference = round(tower_circumference);
101
if ((tower_circumference % tile_width_fine) != 0)
102
{
103
    repeat (tile_width_fine)
104
    {
105
        tower_circumference++;
106
        if ((tower_circumference % tile_width_fine) == 0)
107
            break;
108
    }
109
    tower_radius = tower_circumference / (2 * pi);
110
    tower_width = tower_radius * 2;
111
}
112
horizontaltilecount = tower_circumference / tile_width_fine;
113
tile_angle_difference = 360 / horizontaltilecount;
114
var default_tile = 5180;
115
if (tiledefaultclimbable)
116
    default_tile = 2715;
117
if (appearance == 2)
118
    default_tile = 4168;
119
var a = 16;
120
var _index = 0;
121
var _b = 0;
122
if (appearance == 1)
123
{
124
    use_background_map = true;
125
    use_collision_map = true;
126
    use_tilesets = true;
127
}
128
if (use_tilesets)
129
{
130
    for (tmidx = 0; tmidx < tileset_count; tmidx++)
131
    {
132
        var layer_id = layer_get_id(tileset_name + string(tmidx + 1));
133
        layer_set_visible(layer_id, false);
134
        tm_tileset[tmidx] = 
scr_layer_tilemap_get_id_fixed
scr_layer_tilemap_get_id_fixed

function
scr_layer_tilemap_get_id_fixed(arg0)
{ var els = layer_get_all_elements(arg0); var n = array_length_1d(els); for (var i = 0; i < n; i++) { var el = els[i]; if (layer_get_element_type(el) == 5) return el; } return -1; }
(layer_id);
135
    }
136
}
137
if (use_collision_map)
138
{
139
    var collision_id = layer_get_id(collision_name);
140
    layer_set_visible(collision_id, false);
141
    tm_collision = 
scr_layer_tilemap_get_id_fixed
scr_layer_tilemap_get_id_fixed

function
scr_layer_tilemap_get_id_fixed(arg0)
{ var els = layer_get_all_elements(arg0); var n = array_length_1d(els); for (var i = 0; i < n; i++) { var el = els[i]; if (layer_get_element_type(el) == 5) return el; } return -1; }
(collision_id);
142
}
143
var tileset = 3604;
144
if (appearance == 1)
145
    tileset = 5101;
146
for (ii = 0; ii < verticaltilecount; ii++)
147
{
148
    if (use_collision_map)
149
    {
150
        for (i = 0; i <= 22; i++)
151
        {
152
            var idx = tilemap_get_at_pixel(tm_collision, (i * tile_width) + 1, (ii * tile_height) + 1);
153
            if (idx > 0)
154
                instance_create((i - 1) * tile_width, ii * tile_height, obj_climb_climbable);
155
        }
156
    }
157
    for (i = a; i < (horizontaltilecount + a + 1); i++)
158
    {
159
        tile_x[i - a] = 0;
160
        tile_angle[i - a] = 360 - (i * (360 / horizontaltilecount));
161
        tile_xscale[i - a] = 1;
162
        tile_color[i - a] = 16777215;
163
        if (use_tilesets == 1)
164
        {
165
            for (tmidx = 0; tmidx < tileset_count; tmidx++)
166
            {
167
                tile_sprite[xy(i - a, ii)][tmidx] = tileset;
168
                var __index = tilemap_get_at_pixel(tm_tileset[tmidx], ((i - a) * tile_width_fine) + 1, (ii * tile_height_fine) + 1);
169
                if (__index <= 0)
170
                {
171
                    __index = 0;
172
                    tile_sprite[xy(i - a, ii)][tmidx] = spr_nothing;
173
                }
174
                tile_index[xy(i - a, ii)][tmidx] = __index;
175
                if (__index != 0 && (array_length(valid_tile_indices) == 0 || valid_tile_indices[array_length(valid_tile_indices) - 1] != xy(i - a, ii)))
176
                    array_push(valid_tile_indices, xy(i - a, ii));
177
            }
178
            if (tileset_count == 1)
179
            {
180
                tile_sprite[xy(i - a, ii)][1] = spr_nothing;
181
                tile_index[xy(i - a, ii)][1] = 0;
182
            }
183
        }
184
        else if (appearance != 2)
185
        {
186
            if (_b == 0)
187
                tile_sprite[xy(i - a, ii)][0] = spr_bookshelves_climb1_a2;
188
            if (_b == 1)
189
                tile_sprite[xy(i - a, ii)][0] = spr_bookshelves_climb1_b2;
190
            if (_b == 2)
191
                tile_sprite[xy(i - a, ii)][0] = spr_bookshelves_climb1_c2;
192
            if (_b == 3)
193
                tile_sprite[xy(i - a, ii)][0] = spr_bookshelves_climb1_d2;
194
            var __index = _index;
195
            if (__index == 0)
196
                __index = 2;
197
            else if (__index == 2)
198
                __index = 0;
199
            tile_index[xy(i - a, ii)][0] = __index;
200
            _index++;
201
            if (_index == 3)
202
                _index = 0;
203
            tile_sprite[xy(i - a, ii)][1] = spr_nothing;
204
            tile_index[xy(i - a, ii)][1] = 0;
205
        }
206
        else
207
        {
208
            tile_sprite[xy(i - a, ii)][0] = spr_nothing;
209
            tile_index[xy(i - a, ii)][0] = 0;
210
            tile_sprite[xy(i - a, ii)][1] = spr_nothing;
211
            tile_index[xy(i - a, ii)][1] = 0;
212
        }
213
    }
214
    _index = 0;
215
    _b++;
216
    if (_b == 4)
217
        _b = 0;
218
}
219
default_tile = 4084;
220
if (appearance == 1)
221
    default_tile = 5408;
222
if (appearance == 2)
223
    default_tile = 5546;
224
eye_sprite_width = sprite_get_width(spr_climb_eyeenemy_noeye);
225
eye_sprite_height = sprite_get_height(spr_climb_eyeenemy_noeye);
226
227
obj_rotating_tower_controller_new.render_big_eye = function(arg0)
228
{
229
    var indent = 0.98;
230
    with (arg0)
231
    {
232
        var alpha = 0.12 * image_alpha;
233
        if (object_index == obj_climb_evilgrowth)
234
            alpha = 0.75 * image_alpha;
235
        var camy = cameray();
236
        if ((y + 400) < camy || (y - 300) > (camy + cameraheight()))
237
            continue;
238
        var h = other.eye_sprite_height;
239
        var adjustment = 0;
240
        if (other.appearance == 1)
241
            adjustment = 2;
242
        var xx = other.eye_sprite_width - 20;
243
        var w = 20;
244
        for (i = 0; i < 20; i++)
245
        {
246
            var adj = adjustment + i;
247
            _tilex = (x / other.tile_width_fine) + adj;
248
            if (_tilex > (other.horizontaltilecount - 1))
249
                _tilex -= (other.horizontaltilecount - 1);
250
            if (_tilex < 0)
251
                _tilex += (other.horizontaltilecount - 1);
252
            if (other.tile_vis[_tilex] == 1)
253
                draw_sprite_part_ext(sprite_index, image_index, xx, 0, w, h, other.tower_x + (other.tile_x[_tilex] * indent), y, (other.tile_xscale[_tilex] / other.tile_width_fine) * indent, 1, other.tile_color[_tilex], alpha);
254
            xx -= 20;
255
        }
256
        if (eyetimer == 0)
257
        {
258
            adjustment = 0;
259
            if (other.appearance == 1)
260
                adjustment = 2;
261
            var kris = 27;
262
            var goback = 0;
263
            if (i_ex(kris))
264
            {
265
                if (point_distance(x + (0.5 * h), y + (0.5 * h), kris.x, kris.y) > 640)
266
                {
267
                    goback = 1;
268
                }
269
                else
270
                {
271
                    var dirtokris = point_direction(x + (0.5 * h), y + (0.5 * h), kris.x, kris.y);
272
                    eyex = lerp(eyex, lengthdir_x(70, dirtokris), 0.25);
273
                    eyey = lerp(eyey, lengthdir_y(20, dirtokris), 0.25);
274
                }
275
            }
276
            else
277
            {
278
                goback = 1;
279
            }
280
            if (goback == 1)
281
            {
282
                eyex = lerp(eyex, 0, 0.1);
283
                eyey = lerp(eyey, 0, 0.1);
284
            }
285
        }
286
        var _tilex = (((x + (other.eye_sprite_width * 0.5)) / other.tile_width_fine) + adjustment) - 4;
287
        if (_tilex > (other.horizontaltilecount - 1))
288
            _tilex -= (other.horizontaltilecount - 1);
289
        else if (_tilex < 0)
290
            _tilex += (other.horizontaltilecount - 1);
291
        var tile_angle1 = other.tile_angle[_tilex] + (other.tile_angle_difference * (-eyex / other.tile_width_fine)) + other.tower_angle;
292
        while (tile_angle1 < 0)
293
            tile_angle1 += 360;
294
        while (tile_angle1 > 360)
295
            tile_angle1 -= 360;
296
        if (tile_angle1 < 207 && tile_angle1 >= 25)
297
        {
298
            var x1 = lengthdir_x(other.tower_radius, tile_angle1);
299
            _tilex = ((x + (other.eye_sprite_width * 0.5)) / other.tile_width_fine) + adjustment + 2;
300
            if (_tilex > (other.horizontaltilecount - 1))
301
                _tilex -= (other.horizontaltilecount - 1);
302
            else if (_tilex < 0)
303
                _tilex += (other.horizontaltilecount - 1);
304
            var tile_angle2 = other.tile_angle[_tilex] + (other.tile_angle_difference * (-eyex / other.tile_width_fine)) + other.tower_angle;
305
            while (tile_angle2 < 0)
306
                tile_angle2 += 360;
307
            while (tile_angle2 > 360)
308
                tile_angle2 -= 360;
309
            var xscale = lengthdir_x(other.tower_radius, tile_angle2) - x1;
310
            var xxscale = abs(xscale);
311
            var color = merge_color(c_white, other.tile_dark_color, other.col_blend * clamp(abs(x1 + (0.5 * xxscale)) / 190, 0, 1));
312
            var yscale = 1;
313
            draw_sprite_ext(spr_climb_eyeenemy_eye, 0, other.tower_x + (x1 * 1.05), ((y + (0.5 * h)) - 70) + (eyey * yscale) + 4, xxscale / (6 * other.tile_width_fine), yscale, 0, color, alpha);
314
        }
315
    }
316
};
317
318
obj_rotating_tower_controller_new.draw_tilemap_tile = function(arg0, arg1, arg2, arg3, arg4, arg5)
319
{
320
    var t = tile_index[arg4][arg5];
321
    var idx = tile_get_index(t);
322
    var yflip = 1;
323
    var rotation = 0;
324
    var xscale = -tile_xscale[arg0] / tile_width_fine;
325
    if (tile_get_mirror(t))
326
        xscale = -xscale;
327
    if (tile_get_flip(t))
328
        yflip = -1;
329
    if (tile_get_rotate(t))
330
    {
331
        rotation = -90;
332
        var yf = yflip;
333
        yflip *= abs(xscale);
334
        xscale = sign(xscale);
335
    }
336
    draw_sprite_ext(tile_sprite[arg4][arg5], idx, arg1, arg2, xscale, yflip, rotation, arg3, 1);
337
};
338
339
obj_rotating_tower_controller_new.copy_tilemap_image_index = function(arg0, arg1, arg2, arg3)
340
{
341
    var changed = 0;
342
    for (i = 0; i < 2; i++)
343
    {
344
        for (ii = 0; ii < 2; ii++)
345
        {
346
            var tilex = (arg2 / tile_width_fine) + i;
347
            var tiley = (arg3 / tile_height_fine) + ii;
348
            for (tmidx = 0; tmidx < tileset_count; tmidx++)
349
            {
350
                var idx = xy(tilex, tiley);
351
                var ti = tile_index[idx][tmidx];
352
                tile_index[idx][tmidx] = tilemap_get_at_pixel(tm_tileset[tmidx], arg0 + (tile_width_fine * (i + 2)), arg1 + (tile_height_fine * ii));
353
                if (tile_index[idx][tmidx] != ti)
354
                    changed = changed | (i + 1 + (ii * 4));
355
                if (tile_index[idx][tmidx] < 0)
356
                {
357
                    tile_index[idx][tmidx] = 0;
358
                    tile_sprite[idx][tmidx] = spr_nothing;
359
                }
360
                else
361
                {
362
                    tile_sprite[idx][tmidx] = spr_rotating_tower_tileset_sliced;
363
                }
364
            }
365
        }
366
    }
367
    return changed;
368
};
369
370
obj_rotating_tower_controller_new.set_tilemap_sprite = function(arg0)
371
{
372
    var tilex = arg0.x / tile_width_fine;
373
    var tiley = arg0.y / tile_height_fine;
374
    for (tmidx = 0; tmidx < tileset_count; tmidx++)
375
    {
376
        tile_index[xy(tilex, tiley)][tmidx] = tilemap_get_at_pixel(tm_tileset[tmidx], arg0.x, arg0.y);
377
        if (tile_index[xy(tilex, tiley)][tmidx] < 0)
378
        {
379
            tile_index[xy(tilex, tiley)][tmidx] = 0;
380
            tile_sprite[xy(tilex, tiley)][tmidx] = spr_nothing;
381
        }
382
        else
383
        {
384
            tile_sprite[xy(tilex, tiley)][tmidx] = spr_rotating_tower_tileset_sliced;
385
        }
386
    }
387
};
388
389
obj_rotating_tower_controller_new.set_tile_sprite = function(arg0, arg1)
390
{
391
    if (appearance == 1)
392
        return set_tilemap_sprite(arg0);
393
    var tilex = arg0.x / tile_width_fine;
394
    var tiley = arg0.y / tile_height_fine;
395
    tile_sprite[xy(tilex, tiley)][0] = arg1;
396
};
397
398
obj_rotating_tower_controller_new.set_tilemap_sprite_ext = function(arg0)
399
{
400
    var tilex = arg0.x / tile_width_fine;
401
    var tiley = arg0.y / tile_height_fine;
402
    tilex++;
403
    var xx = 0;
404
    var yy = 0;
405
    for (iii = 0; iii < round(arg0.image_yscale); iii++)
406
    {
407
        for (iiii = 0; iiii < round(arg0.image_xscale); iiii++)
408
        {
409
            var _tilex = tilex + xx;
410
            var _tiley = tiley + yy;
411
            if (_tilex > horizontaltilecount)
412
                _tilex -= horizontaltilecount;
413
            if (_tilex < 0)
414
                _tilex += horizontaltilecount;
415
            for (tmidx = 0; tmidx < tileset_count; tmidx++)
416
            {
417
                tile_sprite[xy(_tilex, _tiley)][tmidx] = spr_rotating_tower_tileset_sliced;
418
                tile_index[xy(_tilex, _tiley)][tmidx] = tilemap_get_at_pixel(tm_tileset[tmidx], _tilex * tile_width_fine, _tiley * tile_height_fine);
419
                xx++;
420
                if (tile_index[xy(_tilex, _tiley)][tmidx] == -1)
421
                {
422
                    tile_index[xy(_tilex, _tiley)][tmidx] = 0;
423
                    tile_sprite[xy(_tilex, _tiley)][tmidx] = spr_nothing;
424
                }
425
            }
426
        }
427
        xx = 0;
428
        yy++;
429
    }
430
};
431
432
obj_rotating_tower_controller_new.set_tile_sprite_ext = function(arg0, arg1, arg2)
433
{
434
    if (arg2)
435
        arg0.x -= 40;
436
    if (use_tilesets && arg2)
437
        return set_tilemap_sprite_ext(arg0);
438
    var tilex = arg0.x / tile_width_fine;
439
    tilex++;
440
    var tiley = arg0.y / tile_height_fine;
441
    var xx = 0;
442
    var yy = 0;
443
    for (iii = 0; iii < round(arg0.image_yscale); iii++)
444
    {
445
        for (iiii = 0; iiii < round(arg0.image_xscale); iiii++)
446
        {
447
            var _tilex = tilex + xx;
448
            var _tiley = tiley + yy;
449
            if (_tilex > horizontaltilecount)
450
                _tilex -= horizontaltilecount;
451
            if (_tilex < 0)
452
                _tilex += horizontaltilecount;
453
            tile_sprite[xy(_tilex, _tiley)][0] = arg1;
454
            if (appearance == 2)
455
                tile_index[xy(_tilex, _tiley)][0] = 4;
456
            xx++;
457
        }
458
        xx = 0;
459
        yy++;
460
    }
461
};
462
463
if (turnobjectsintotilevariants == true)
464
{
465
    with (obj_climb_wall)
466
    {
467
        var item = self;
468
        with (obj_rotating_tower_controller_new)
469
            set_tile_sprite(item, default_tile);
470
        instance_destroy();
471
    }
472
    with (obj_climb_spiketile)
473
    {
474
        var item = self;
475
        with (obj_rotating_tower_controller_new)
476
            set_tile_sprite(item, spr_climb_spike_2scale);
477
        instance_destroy();
478
    }
479
}
480
if (appearance == 0)
481
    default_tile = 2715;
482
if (appearance == 1)
483
    default_tile = 5408;
484
if (appearance != 1)
485
{
486
    if (tiledefaultclimbable == false)
487
    {
488
        with (obj_climb_climbable)
489
        {
490
            x -= 40;
491
            var item = self;
492
            with (obj_rotating_tower_controller_new)
493
                set_tile_sprite_ext(item, default_tile);
494
            x += 40;
495
        }
496
    }
497
    if (tiledefaultclimbable == true)
498
    {
499
        climbable_obj = instance_create(0, 0, obj_climb_climbable);
500
        climbable_obj.image_xscale = horizontaltilecount;
501
        climbable_obj.image_yscale = verticaltilecount;
502
    }
503
}
504
climbstarter_obj = instance_create((tower_x + (tower_radius * 0.5)) - (3.5 * tile_width_fine), (tower_y + tower_height) - player_starting_y, obj_climbstarter);
505
climbstarter_obj.exitmarkerflag = "towerstart";
506
climbstarter_obj.visible = false;
507
tower_y = tower_height - player_starting_y;
508
for (iii = 0; iii < 75; iii += 1)
509
{
510
    tower_angle_record[iii] = tower_angle;
511
    yoffset_record[iii] = tower_y;
512
}
513
using_rotating_caterpillars = false;