var _man = 126; if (!instance_exists(_man)) { scr_debug_print("CASTLEREFLECT MANAGER MISSING. DESTROYING."); instance_destroy(); exit; } if (is_culled) exit; generate_tiles(); var ys = scr_platswap_yscale(); var _final_alpha = 0.5 * image_alpha * (1 - ys[0]); if (_final_alpha <= 0) exit; draw_set_blend_mode(bm_add); var _has_ts = surface_exists(tilesurf); var _has_os = surface_exists(_man.surf); var _has_ms = surface_exists(_man.masking_surf); if (_has_ts && _has_os && _has_ms) { shader_replace_simple_set_hook(6); var _cx = camera_get_view_x(view_camera[0]); var _cy = camera_get_view_y(view_camera[0]); var _uvs = _man.surface_uvs; shader_set_uniform_f_array(u_bounds, [_cx / room_width, _cy / room_height, 640 / room_width, 480 / room_height]); var t_sampler = shader_get_sampler_index(shd_castlereflect_layerblend, "u_object_surface"); texture_set_stage(t_sampler, surface_get_texture(_man.surf)); var t_mask = shader_get_sampler_index(shd_castlereflect_layerblend, "u_mask_surface"); texture_set_stage(t_mask, surface_get_texture(_man.masking_surf)); shader_set_uniform_f_array(u_uvs, [_uvs[0], _uvs[1], _uvs[2] - _uvs[0], _uvs[3] - _uvs[1]]); var _uvs2 = texture_get_uvs(surface_get_texture(tilesurf)); shader_set_uniform_f_array(u_uvs2, [_uvs2[0], _uvs2[1], _uvs2[2] - _uvs2[0], _uvs2[3] - _uvs2[1]]); var _uvs3 = texture_get_uvs(surface_get_texture(_man.masking_surf)); shader_set_uniform_f_array(u_uvs3, [_uvs3[0], _uvs3[1], _uvs3[2] - _uvs3[0], _uvs3[3] - _uvs3[1]]); draw_surface_ext(tilesurf, x, y, 1, ys[1], 0, c_white, 1 - ((1 - _final_alpha) * (1 - _final_alpha))); shader_replace_simple_reset_hook(); } else if (_has_ts && !_has_os) { draw_surface_ext(tilesurf, x, y, 1, ys[1], 0, c_white, _final_alpha); } else if (_has_os && !_has_ts) { draw_surface_part_ext(_man.surf, x - _man._cx, y - _man._cy, sprite_width, sprite_height, x, y, 1, ys[1], 16777215, _final_alpha); } draw_set_blend_mode(bm_normal);