Deltarune (Chapter 3) script viewer

← back to main script listing

gml_Object_obj_board_enemy_monster_Step_0

(view raw script w/o annotations or w/e)
1
var shoot_wait_time = 15;
2
if (type == 1)
3
    shoot_wait_time = 22;
4
if (room == room_board_1_sword)
5
{
6
    if (obj_mainchara_board.swordlv > 1)
7
    {
8
        image_speed = 0.2;
9
        spd = 3;
10
        active_hitbox = true;
11
    }
12
    if (obj_mainchara_board.swordlv == 1)
13
    {
14
        image_speed = 0.1;
15
        spd = 2;
16
    }
17
    if (obj_mainchara_board.swordlv > 2)
18
        hp = 1;
19
}
20
if (type == 3)
21
    image_speed = 0;
22
var chaseplayer = true;
23
if (136 && obj_mainchara_board.swordlv > 1)
24
    aggressive = true;
25
if (!aggressive)
26
{
27
    active_hitbox = false;
28
    chaseplayer = false;
29
}
30
updatetimer++;
31
if ((room == room_board_dungeon_2 || room == room_board_dungeon_3) && type == 2)
32
{
33
}
34
else if (spearbosscon < 2)
35
{
36
    if (updatetimer == 2)
37
    {
38
        if (move_type == 1 && movecon == 1)
39
            path_speed = 0;
40
        updatetimer = 0;
41
        exit;
42
    }
43
    else if (move_type == 1 && movecon == 1)
44
    {
45
        path_speed = spd;
46
        if (bulletimer > shoot_wait_time || delay > 0)
47
            path_speed = 0;
48
    }
49
}
50
scr_board_enemy_step_init
scr_board_enemy_step_init

function
scr_board_enemy_step_init()
{ if (state == "init") state = "move"; }
();
51
if (room == room_board_dungeon_3 && type == 0)
52
    state = "init";
53
if (delay > 0)
54
    delay--;
55
if (type == 3)
56
{
57
    spd = 0;
58
    type = 0;
59
    state = "stationary";
60
}
61
if (state == "move" && delay == 0 && ((hurttimer == 0 && movecon < 3) || movecon == 3))
62
{
63
    if (movecon == 0)
64
    {
65
        if (spearbosscon == 2)
66
        {
67
            move_type = 1;
68
            spd = 6;
69
        }
70
        if (spearboss == true || spearbosscon == 1)
71
            move_type = 0;
72
        if (obj_board_controller.kris_object.atdoorway == true)
73
            move_type = 0;
74
        if (chaseplayer == false)
75
            move_type = 0;
76
        if (move_type == 1)
77
        {
78
            is_moving = true;
79
            var x_cell = floor(obj_board_controller.kris_object.x / global.cell_size);
80
            var y_cell = floor((obj_board_controller.kris_object.y + 18) / global.cell_size);
81
            var position_x = (x_cell * global.cell_size) + (global.cell_size / 2);
82
            var position_y = (y_cell * global.cell_size) + (global.cell_size / 2);
83
            if (mp_grid_path(global.grid, path, x + 16, y + 16, position_x, position_y, false))
84
            {
85
                path_start(path, spd, path_action_stop, false);
86
                movecon = 1;
87
            }
88
            else
89
            {
90
                move_type = 0;
91
            }
92
        }
93
        if (move_type == 0)
94
        {
95
            movedir = choose(0, 1, 2, 3);
96
            if (spearboss == true)
97
                movedir = choose(0, 2);
98
            repeat (4)
99
            {
100
                if (movedir == 0 && place_meeting(x + 32, y, obj_board_solid))
101
                    movedir = 1;
102
                if (movedir == 1 && place_meeting(x, y - 32, obj_board_solid))
103
                    movedir = 2;
104
                if (movedir == 2 && place_meeting(x - 32, y, obj_board_solid))
105
                    movedir = 3;
106
                if (movedir == 3 && place_meeting(x, y + 32, obj_board_solid))
107
                    movedir = 0;
108
            }
109
            movecon = 1;
110
        }
111
        if (move_type == 3)
112
        {
113
        }
114
    }
115
    if (movecon == 1)
116
    {
117
        movetimer++;
118
        if (move_type == 0 && bulletimer <= shoot_wait_time && delay == 0)
119
        {
120
            var stop = 0;
121
            repeat (spd)
122
            {
123
                if (stop == 0)
124
                {
125
                    if (movedir == 0)
126
                        x += 1;
127
                    if (movedir == 1)
128
                        y -= 1;
129
                    if (movedir == 2)
130
                        x -= 1;
131
                    if (movedir == 3)
132
                        y += 1;
133
                    if (place_meeting(x, y, obj_board_solid) || place_meeting(x, y, obj_board_solid_monster) || x < 160 || x > 448 || y < 96 || y > 256)
134
                    {
135
                        if (movedir == 0)
136
                        {
137
                            x -= 1;
138
                            movedir = 2;
139
                        }
140
                        else if (movedir == 1)
141
                        {
142
                            y += 1;
143
                            movedir = 3;
144
                        }
145
                        else if (movedir == 2)
146
                        {
147
                            x += 1;
148
                            movedir = 0;
149
                        }
150
                        else if (movedir == 3)
151
                        {
152
                            y -= 1;
153
                            movedir = 1;
154
                        }
155
                    }
156
                    if (movedir == 0 || movedir == 2)
157
                    {
158
                        if ((x % 32) == 0)
159
                        {
160
                            movecon = 0;
161
                            movetimer = 0;
162
                            stop = 1;
163
                            if (distance_to_object(obj_board_controller.kris_object) < distance_to_become_aggressive && spearboss == false && image_blend != c_gray)
164
                                move_type = 1;
165
                        }
166
                    }
167
                    if (movedir == 1 || movedir == 3)
168
                    {
169
                        if ((y % 32) == 0)
170
                        {
171
                            movecon = 0;
172
                            movetimer = 0;
173
                            stop = 1;
174
                            if (distance_to_object(obj_board_controller.kris_object) < distance_to_become_aggressive && spearboss == false && image_blend != c_gray)
175
                                move_type = 1;
176
                        }
177
                    }
178
                }
179
            }
180
        }
181
        if (move_type == 1)
182
        {
183
            is_moving_timer++;
184
            if (bulletimer > shoot_wait_time || delay > 0)
185
            {
186
                is_moving_timer--;
187
            }
188
            else if ((is_moving_timer >= 16 && spd == 2) || (is_moving_timer >= 12 && spd == 3) || (is_moving_timer >= 9 && spd == 4) || (is_moving_timer >= 5 && spd == 6) || (is_moving_timer >= 5 && spd == 8))
189
            {
190
                var x_cell = floor((x + 16) / global.cell_size);
191
                var y_cell = floor((y + 16) / global.cell_size);
192
                x = x_cell * global.cell_size;
193
                y = y_cell * global.cell_size;
194
                movecon = 0;
195
                movetimer = 0;
196
                is_moving_timer = 0;
197
                is_moving = false;
198
                path_end();
199
                speed = 0;
200
                if (distance_to_object(obj_board_controller.kris_object) >= (distance_to_become_aggressive - 20))
201
                    move_type = 0;
202
            }
203
        }
204
    }
205
}
206
scr_depth_board
scr_depth_board

function
scr_depth_board()
{ depth = 1000000 - ((y * 10) + ((sprite_height - sprite_yoffset) * 10)); } function scr_board_depth() {
scr_depth_board();
}
();
207
scr_board_enemy_sword_collision
scr_board_enemy_sword_collision

function
scr_board_enemy_sword_collision()
{ var deer_following = false; if (object_index == obj_board_enemy_deer && follow == true) deer_following = true; if (place_meeting(x, y, obj_board_swordhitbox) && hurttimer == 0 && obj_board_controller.kris_object.swordlv >= sword_immunity_lv && deer_following == false) { var hitbox = instance_place(x, y, obj_board_swordhitbox); if (hitbox.detectiononly == true) { with (obj_mainchara_board) { if (swordbuffer <= 0) { swordbuffer = 8; canfreemove = 0; snd_play(choose(snd_board_sword1, snd_board_sword2, snd_board_sword3)); } } } else if ((object_index == obj_board_enemy_monster && image_blend == c_gray) || (object_index == obj_board_enemy_bluebird && room == room_board_dungeon_2)) { snd_stop(snd_board_sword_metal); snd_play(snd_board_sword_metal); hitdir = -1; hurttimer = 10; } else { path_end(); hurttimer = 10; snd_stop(snd_board_damage); snd_play(snd_board_damage); active_hitbox = false; hitdir = obj_board_controller.kris_object.facing; if (hp != 999) hp--; } } if (place_meeting(x, y, obj_board_enemy_deer_ice_spell) && object_index != obj_board_enemy_deer) { snd_stop(snd_board_splash); snd_play(snd_board_splash); if (object_index != obj_board_enemy_bluefish && object_index != obj_board_enemy_yellowflower) { block = instance_create(x, y, obj_pushableblock_board); block.sprite_index = spr_board_pushableblock_ice; block.custom_sprite = spr_board_pushableblock_ice; block.image_xscale = 1; block.image_yscale = 1; var x_cell = floor(block.x / global.cell_size); var y_cell = floor((block.y + 18) / global.cell_size); var position_x = (x_cell * global.cell_size) + (global.cell_size / 2); var position_y = (y_cell * global.cell_size) + (global.cell_size / 2); block.x = position_x - 16; block.y = position_y - 16; var count = 6; for (var i = 0; i < count; i++) { var fx =
scr_board_marker((block.x + 16) - 2, (block.y + 16) - 2, spr_board_snowflake, 0.3, 100000, 2);
fx.direction = ((360 / count) * i) + 45; fx.speed = 8; fx.friction = 0.6;
scr_doom(fx, 10);
fx =
scr_board_marker((block.x + 16) - 2, (block.y + 16) - 2, spr_board_snowflake, 0.3, 100000, 2);
fx.direction = (360 / count) * i; fx.speed = 4; fx.friction = 0.3;
scr_doom(fx, 10);
} } else { var count = 6; for (var i = 0; i < count; i++) { var fx =
scr_board_marker((x + 16) - 2, (y + 16) - 2, spr_board_snowflake, 0.3, 100000, 2);
fx.direction = ((360 / count) * i) + 45; fx.speed = 8; fx.friction = 0.6;
scr_doom(fx, 10);
fx =
scr_board_marker((x + 16) - 2, (y + 16) - 2, spr_board_snowflake, 0.3, 100000, 2);
fx.direction = (360 / count) * i; fx.speed = 4; fx.friction = 0.3;
scr_doom(fx, 10);
} } instance_destroy(); if (spawnerid != -1 && i_ex(spawnerid)) { if (object_index != obj_board_enemy_yellowflower && object_index != obj_board_enemy_bluefish) spawnerid.image_index = 20; else safe_delete(spawnerid); } } if (place_meeting(x, y, obj_board_swordhitbox) && hurttimer == 0 && obj_board_controller.kris_object.swordlv < sword_immunity_lv && deer_following == false) { snd_stop(snd_board_sword_metal); snd_play(snd_board_sword_metal); ...
();
208
scr_board_enemy_hurt_state
scr_board_enemy_hurt_state

function
scr_board_enemy_hurt_state()
{ if (hurttimer > 0) { hurttimer--; active_hitbox = false; if (hurttimer == 0 && hp != maxhp) active_hitbox = true; if (hurttimer == 9 && hp <= 0) { splash = instance_create_depth(centerx(), centery(), depth - 2, obj_board_enemydefeatsplash); splash.depth = depth - 1; global.flag[1255 sword_route_kills]++; obj_board_controller.kris_object.xp += xp_given; instance_destroy(); var a = true; if (object_index == obj_board_enemy_monster && hp == 999) a = false; if (spawnerid != -1 && i_ex(spawnerid) && a == true) { with (spawnerid) instance_destroy(); } if (drop_candy == true) { var drop_rate = 5; if (obj_board_controller.kris_object.myhealth < 8) drop_rate += 20; if (obj_board_controller.kris_object.myhealth < 3) drop_rate += 30; if (obj_board_controller.kris_object.myhealth == obj_board_controller.kris_object.maxhealth) drop_rate = 0; if (irandom(100) < drop_rate || (obj_board_controller.kris_object.monstersdefeated >= 6 && drop_rate > 0) || (obj_board_controller.kris_object.monstersdefeated >= 3 && obj_board_controller.kris_object.myhealth < 3 && drop_rate > 0)) { splash.drop_candy = true; obj_board_controller.kris_object.monstersdefeated = 0; } else { obj_board_controller.kris_object.monstersdefeated++; } } } var dontmove = false; if (object_index == obj_board_enemy_lizard && movecon == 3) dontmove = true; if (hurttimer > 6 && dontmove == false) { if (hitdir == 0) { repeat (20) { if (!place_meeting(x, y + 1, obj_board_solid)) y += 1; else break; } } if (hitdir == 1) { repeat (20) { if (!place_meeting(x + 1, y, obj_board_solid)) x += 1; else break; } } if (hitdir == 2) { repeat (20) { if (!place_meeting(x, y - 1, obj_board_solid)) y -= 1; else break; } } if (hitdir == 3) { repeat (20) { if (!place_meeting(x - 1, y, obj_board_solid)) x -= 1; else break; } } } } if (object_index == obj_board_enemy_lizard && movecon == 3) { if (x < 160) x = 160; if (x > 448) x = 448; if (y < 0) y = 0; if (y > 256) y = 256; } ...
();
209
if (bulletimer > shoot_wait_time)
210
{
211
    if (show_outline == false)
212
        sprite_index = _sprAngry;
213
    else
214
        sprite_index = _sprAngryOutline;
215
}
216
else if (show_outline == false)
217
{
218
    sprite_index = _sprIdle;
219
}
220
else
221
{
222
    sprite_index = _sprIdleOutline;
223
}
224
if (delay > 0)
225
{
226
    movetimer = 0;
227
    movecon = 0;
228
    if (bulletimer > 10)
229
        bubbletimer = 10;
230
}
231
if (type == 1 && movecon == 1 && hurttimer == 0 && obj_board_controller.kris_object.leftdoorway == true && spearbosscon != 2 && chaseplayer == true)
232
{
233
    bulletimer++;
234
    if (bulletimer >= 30)
235
    {
236
        bulletimer = choose(-20, -10, 0);
237
        if (spearboss == true)
238
            bulletimer = choose(0, 5, 10);
239
        var shoot_dir = movedir;
240
        inst = collision_rectangle(x - 40, y, x + 32 + 40, y + 500, obj_mainchara_board, false, true);
241
        if (inst != -4)
242
            shoot_dir = 3;
243
        inst = collision_rectangle(x + 32, y - 40, x - 500, y + 32 + 40, obj_mainchara_board, false, true);
244
        if (inst != -4)
245
            shoot_dir = 2;
246
        inst = collision_rectangle(x, y - 40, x + 500, y + 32 + 40, obj_mainchara_board, false, true);
247
        if (inst != -4)
248
            shoot_dir = 0;
249
        inst = collision_rectangle(x - 40, y + 32, x + 32 + 40, y - 500, obj_mainchara_board, false, true);
250
        if (inst != -4)
251
            shoot_dir = 1;
252
        if (shoot_dir == 3 || spearboss == true)
253
        {
254
            bullet = instance_create(x + 16, y + 16 + 32, obj_board_enemy_spear);
255
            bullet.image_angle = 270;
256
            bullet.direction = 270;
257
            bullet.spd = 20;
258
        }
259
        else if (shoot_dir == 2)
260
        {
261
            bullet = instance_create((x + 16) - 2 - 4 - 32, y + 16, obj_board_enemy_spear);
262
            bullet.image_angle = 180;
263
            bullet.direction = 180;
264
            bullet.spd = 20;
265
        }
266
        else if (shoot_dir == 0)
267
        {
268
            bullet = instance_create(((x + 16) - 2 - 4) + 32, y + 16, obj_board_enemy_spear);
269
            bullet.image_angle = 0;
270
            bullet.direction = 0;
271
            bullet.spd = 20;
272
        }
273
        else if (shoot_dir == 1)
274
        {
275
            bullet = instance_create(x + 16, (y + 16) - 32, obj_board_enemy_spear);
276
            bullet.image_angle = 90;
277
            bullet.direction = 90;
278
            bullet.spd = 20;
279
        }
280
    }
281
}
282
if (type == 2 && movecon == 1 && hurttimer == 0 && obj_board_controller.kris_object.leftdoorway == true)
283
{
284
    bulletimer++;
285
    if (bulletimer >= 30)
286
    {
287
        bulletimer = choose(-30, -35, -40);
288
        if (spearboss == true)
289
            bulletimer = choose(0, 5);
290
        bullet = instance_create(x + 16, y + 16, obj_board_enemy_fire);
291
    }
292
}
293
if (spearboss == true && spearbosscon == 0 && obj_mainchara_board.x < board_tilex(10))
294
{
295
    spearbosscon = 1;
296
    active_hitbox = true;
297
    wall = instance_create(board_tilex(11), board_tiley(3), obj_board_puzzle_wall);
298
    wall.sprite_index = spr_board_door_left;
299
    wall.image_xscale = 2;
300
    wall.image_yscale = 2;
301
    wall.image_speed = 0.5;
302
    wall = instance_create(board_tilex(11), board_tiley(4), obj_board_puzzle_wall);
303
    wall.sprite_index = spr_board_door_left;
304
    wall.image_xscale = 2;
305
    wall.image_yscale = 2;
306
    wall.image_speed = 0.5;
307
    snd_stop(snd_board_door_close);
308
    snd_play_pitch(snd_board_door_close, 1.2);
309
    with (obj_board_puzzle_wall)
310
        scr_board_depth();
311
}