depth = 999990; event_inherited(); performs_culling_checks = true; if (!instance_exists(obj_castlereflect_manager)) instance_create(0, 0, obj_castlereflect_manager); floortex = -4; u_uvs = shader_get_uniform(shd_castlereflect_layerblend, "u_object_surface_uvs"); u_uvs2 = shader_get_uniform(shd_castlereflect_layerblend, "u_tile_surface_uvs"); u_uvs3 = shader_get_uniform(shd_castlereflect_layerblend, "u_mask_surface_uvs"); u_bounds = shader_get_uniform(shd_castlereflect_layerblend, "u_bounds"); cachelist = ds_list_create(); generate_tiles = function() { if (tilesurf == undefined || !surface_exists(tilesurf)) tilesurf = surface_create(sprite_width, sprite_height); else exit; var falloff = obj_castlereflect_manager.shadow_falloff * 0.5; surface_set_target(tilesurf); draw_clear_alpha(c_black, 0); draw_set_color(c_white); gpu_set_blendmode_ext_sepalpha(bm_src_alpha, bm_inv_src_alpha, bm_one, bm_one); for (var i = 0; i < array_length(reflect_tiles); i++) { var _lay = layer_get_id(reflect_tiles[i]); if (layer_exists(_lay)) { var map_id = scr_layer_tilemap_get_id_fixed(_lay); if (map_id != -1) { var _tileset = tilemap_get_tileset(map_id); var xx = floor(x / 40); while (xx < floor((x + sprite_width) / 40)) { var yy = floor((y - falloff) / 40); while (yy < floor(y)) { var _tiledata = tilemap_get(map_id, xx, yy); if (_tiledata >= 0) { var b = !tile_get_flip(_tiledata); _tiledata = tile_set_flip(_tiledata, b); draw_tile(_tileset, _tiledata, 0, (xx * 40) - x, y - (yy * 40) - 40); } yy++; } xx++; } } else { var a = layer_get_all_elements(_lay); for (var j = 0; j < array_length(a); j++) { if (layer_get_element_type(a[j]) == 4) { var _x = layer_sprite_get_x(a[j]) - x; var _y = -(layer_sprite_get_y(a[j]) - y); var _spr = layer_sprite_get_sprite(a[j]); var _img = layer_sprite_get_index(a[j]); var _xscale = layer_sprite_get_xscale(a[j]); var _yscale = layer_sprite_get_yscale(a[j]); var _angle = layer_sprite_get_angle(a[j]); var _blend = layer_sprite_get_blend(a[j]); var _alpha = layer_sprite_get_alpha(a[j]); draw_sprite_ext(_spr, _img, _x, _y, _xscale, -_yscale, _angle, _blend, _alpha); } } } } } draw_set_blend_mode(bm_subtract); draw_sprite_ext(spr_gradient20, 0, 0, falloff, 10000, falloff / 15, 0, c_black, 1); draw_sprite_ext(spr_pxwhite, 0, 0, falloff, 10000, 10000, 0, c_black, 1); draw_set_blend_mode(bm_normal); surface_reset_target(); }; tilesurf = -4; surf = -4; scr_platswap_init(self, false); init = 0;