Загрузка данных



function scr_pause()
	{
		selmax = 3
		menu = [
			"CONTINUE",
			"RETRY",
			"OPTIONS",
			"EXIT"
		]
		if (keyboard_check_pressed(vk_escape)) instance_destroy()
		
		if (keyboard_check_pressed(ord("Z")))  || (gamepad_button_check_pressed(0,gp_face1))
		{
			switch select
			{
				case 0:
					instance_destroy()
					break;
				case 1:
					var isValid = false
					var roomToGo = noone
					if global.current_level != levels.none
					{
						roomToGo = global.level_list[global.current_level].begining
						isValid = true
					}
					if !isValid exit;
					instance_destroy(self)
					reset_player()
					gotoroom(roomToGo,"A")
					global.spdr_timer = 0
					break;
				case 2:
					if (menu_state != menus.options)
					{	
						instance_create(x,y,obj_pausefadeout)
						select = 0
						menu_state = menus.options
						shit = false
					}
						
					break;
				case 3:
					room_goto(rm_mainmenu)
					isValid = true
					reset_player()
					instance_destroy(self)
					global.timergo = false
					global.spdr_timer = 0
					global.savefile = 0
					global.showtitle = true
					break;
			}
		}
	}
	function scr_draw_pause()
	{
		draw_sprite_ext(spr_noise, frame, 0,0,1,1,0,c_white,noiselerp);
		draw_set_font(global.options_font);
		draw_set_halign(fa_center);
		draw_set_color(c_white);
		draw_sprite_ext(spr_tv_thing,0,960,540,tvscale,tvscale,0,c_white,255);
		draw_sprite_ext(spr_remote, 0, 960,540,xsuper,xsuper,0,c_white,255);
		
		var positions = [220, 320, 420, 520];
		var shift_start = select; 
		var shift_amount = 25;

		for (var i = 0; i < 4; i++) {
		    var y_pos = positions[i];
    
		    if (i > shift_start) {
		        y_pos += shift_amount; 
		    }
    
		    var scale_x = (i == select) ? xscl * 0.8 : minxscl;
		    var scale_y = (i == select) ? yscl * 0.8 : minxscl;
			var shakin_x = (i == select) ? 960+random_range(-2,2) : 960;
			var shakin_y = (i == select) ? y_pos+random_range(-2,2) : y_pos;
			draw_text_transformed(shakin_x, shakin_y, menu[i], scale_x, scale_y, 0);
			
		}
		draw_set_halign(fa_left)
		draw_set_color(c_white)
	}
	function scr_draw_afterpause()
	{
		
		draw_sprite_ext(spr_noise, frame, 0,0,1,1,0,c_white,lerp(1, 0, 0.2))
		draw_set_halign(fa_center)
		draw_set_color(c_white)
		draw_sprite_ext(spr_tv_thing,0,960,540,lerp(1, 10, 0.25),lerp(1, 10, 0.25),0,c_white,255)
		draw_sprite_ext(spr_tuny_pause_menu, 0, lerp(1375,0,0.1),480,1,1,0,c_white,255)
	}
	function scr_options()
	{
		
		selmax = 4
		menu = [
			"CONTROLS",
			"AUDIO",
			"VIDEO",
			"GAME",
			"BACK"
		]
		if (keyboard_check_pressed(vk_escape))
		{
			if menu_state != menus.pause
			{
				targetX = 0
				targetY = 0
				xscl = 1.3
				yscl = 1.3
				minxscl = 1
				minyscl = 1
				xsuper = 4
				xsuper2 = 0
				noiselerp = 0
				frame = 0

				xscale = 1
				yscale = 1
				y_pos = 840

				tvscale = 10
				select = 0
				drawpauseanim = true
				menu_state = menus.pause
			}
			instance_activate_object(obj_menu_spawner)
		}
			
		if (keyboard_check_pressed(ord("Z"))) || (gamepad_button_check_pressed(0,gp_face1))
		{
			
			switch select
			{
				case 0:
					menu_state = menus.controls
					break;
				case 1:
					menu_state = menus.audio
					break;
				case 2:
					menu_state = menus.video
					break;
				case 3:
					menu_state = menus.game
					break;
				case 4:
					if menu_state != menus.pause
					{
							targetX = 0
							targetY = 0
							xscl = 1.3
							yscl = 1.3
							minxscl = 1
							minyscl = 1
							xsuper = 4
							xsuper2 = 0
							noiselerp = 0
							frame = 0

							xscale = 1
							yscale = 1
							y_pos = 840

							tvscale = 10
							drawpauseanim = true
						menu_state = menus.pause
						select = 0
						instance_activate_object(obj_menu_spawner)
					}
					
					break;
			}

		}
		
	}
	
	function scr_draw_options()
	{
	    draw_set_font(global.options_font);
	    draw_set_halign(fa_center);
		draw_sprite(spr_tvthing,0,0,0)
	    var positions = [400, 500, 600, 700, 830];
	    var shift_start = select; 
	    var shift_amount = 25;

	    var max_iter = min(selmax + 1, array_length(positions));

	    for (var i = 0; i < max_iter; i++) {
	        var y_pos = positions[i];

	        if (i > shift_start) {
	            y_pos += shift_amount;
	        }

	        var scale_x = (i == select) ? xscl : minxscl;
	        var scale_y = (i == select) ? yscl : minxscl;
			var shakin_x = (i == select) ? 960+random_range(-2,2) : 960;
			var shakin_y = (i == select) ? y_pos+random_range(-2,2) : y_pos;
	        draw_text_transformed(shakin_x,shakin_y, menu[i], scale_x, scale_y, 0);
	    }
	    draw_set_halign(fa_left);
	    draw_set_color(c_white);
	}

	function scr_controls()
	{
		if (keyboard_check_pressed(vk_escape))
			if menu_state != menus.options
				menu_state = menus.options
		selmax = 1
		menu = [
			"GOVNO",
			"BACK"
		]
		if keyboard_check_pressed(ord("Z")) || gamepad_button_check_pressed(0,gp_face1)
		{
			switch select
			{
				case 0:
					switch hozselect
					{
						case 0:
						menu_state = menus.controls_keyboard
						break;
						case 1:
						menu_state = menus.controls_gamepad
						break;
					}
					break;
				case 1:
					menu_state = menus.options
				break;
			}
		}
		if select == 0
		{
			if keyboard_check_pressed(vk_left)
			{
				hozselect--
				csgo = choose(0,1)
					if csgo
					{
						xscl = 1.8
						yscl = 0.2
					}
					else 
					{
						xscl = 0.2
						yscl = 1.8
					}
					select_random = random_range(0,array_length(select_sounds))
					select_sound = select_sounds[select_random]
					scr_playsound(select_sound,false)
			}
			if keyboard_check_pressed(vk_right)
			{
				hozselect++
				csgo = choose(0,1)
					if csgo
					{
						xscl = 1.8
						yscl = 0.2
					}
					else 
					{
						xscl = 0.2
						yscl = 1.8
					}
					select_random = random_range(0,array_length(select_sounds))
					select_sound = select_sounds[select_random]
					scr_playsound(select_sound,false)
			}
			if hozselect < 0
				hozselect = 1
			if hozselect > 1
				hozselect = 0
		}
		else
		{
			hozselect = 0
		}
	}
	function scr_controls_keyboard()
	{
		
		if (keyboard_check_pressed(vk_escape))
		{
			if menu_state != menus.options
			{
				menu_state = menus.options
				obj_game.save_icon_alphatarget = 1
				obj_game.alarm[1] = 140
			}
		}
		
		selmax = 8
		menu = [
			"BACK",
			"LEFT",
			"RIGHT",
			"UP",
			"DOWN",
			"JUMP",
			"GROUNDPOUND",
			"THROW",
			"RESET TO DEFAULT"
			
		]
		if keyboard_check_pressed(ord("Z"))
		{
			switch select
			{
			case 0:
				if menu_state != menus.options
				{
					menu_state = menus.options
					obj_game.save_icon_alphatarget = 1
					obj_game.alarm[1] = 140
				}
				break
			}
		}
		
		if select == 8 && keyboard_check_pressed(ord("Z"))
		{
			var file = file_text_open_write("Keybinds.ini");
			file_text_close(file);
		}
				if keyboard_check_pressed(vk_anykey) && setkey == 1
				{
					var key_names = ["key_left", "key_right", "key_up", "key_down", "key_jump", "key_groundpound", "key_attack"];

					if (select >= 1 && select <= array_length(key_names)) 
					{
					    ini_open("Keybinds.ini");
    
					    var key_name = key_names[select - 1]; 
					    var last_key = scr_keyboard_key_name(keyboard_lastkey);
					    var check = global.keys[? last_key];
    
					    ini_write_string("keybinds", key_name, last_key);
    
					    ini_close();
					}

					setkey = 0
					time = 35
				}
					if (keyboard_check_pressed(vk_enter))  && (setkey == 0)
					{
						setkey = 1
					}
	}
	function scr_controls_gamepad()
	{
		if (gamepad_button_check_pressed(0, gp_face3)) && setkey == 0  
		{
		    if (menu_state != menus.options)
		    {
		        menu_state = menus.options;
				obj_game.save_icon_alphatarget = 1
				obj_game.alarm[1] = 140
		    }
		}

		selmax = 5
		menu = [
		    "BACK",
		    "JUMP",
		    "SLIDE", 
		    "GROUNDPOUND",
		    "THROW",
		    "RESET TO DEFAULT"
		];

		if (select == 0 && gamepad_button_check_pressed(0, gp_face1) || (keyboard_check_pressed(ord("Z"))))
		{
		    if (menu_state != menus.options)
		    {
		        menu_state = menus.options;
				obj_game.save_icon_alphatarget = 1
				obj_game.alarm[1] = 140
		    }
		}

		if (select == 8 && gamepad_button_check_pressed(0, gp_start))
		{
		    var file = file_text_open_write("Keybinds.ini");
		    file_text_close(file);
		}
		
		
		
		
		
		if (gp_anykey(0) && setkey == 1)
		{
		    var key_names = ["key_jumpC", "key_slideC", "key_groundpoundC", "key_attackC"]
    
		    if (select >= 1 && select <= array_length(key_names)) 
		    {
		        ini_open("Keybinds.ini");
        
		        var key_name = key_names[select - 1];
		        var last_button = gamepad_last_button(0);  
		        
				var button_name = "";
				
				switch (last_button)
				{
				    case gp_face1: button_name = "gp_face1"; break;
				    case gp_face2: button_name = "gp_face2"; break;
				    case gp_face3: button_name = "gp_face3"; break;
				    case gp_face4: button_name = "gp_face4"; break;
				    case gp_shoulderl: button_name = "gp_shoulderl"; break;
				    case gp_shoulderr: button_name = "gp_shoulderr"; break;
				    case gp_shoulderlb: button_name = "gp_shoulderlb"; break;
				    case gp_shoulderrb: button_name = "gp_shoulderrb"; break;
				    case gp_select: button_name = "gp_select"; break;
				    case gp_start: button_name = "gp_start"; break;
				    case gp_stickl: button_name = "gp_stickl"; break;
				    case gp_stickr: button_name = "gp_stickr"; break;
				    case gp_padu: button_name = "gp_padu"; break;
				    case gp_padd: button_name = "gp_padd"; break;
				    case gp_padl: button_name = "gp_padl"; break;
				    case gp_padr: button_name = "gp_padr"; break;
				    default: button_name = "gp_face1"; break;
				}
				var check = global.keys[? button_name];
		        ini_write_string("keybinds", key_name, button_name);
        
		        ini_close();
		    }
    
		    setkey = 0;
		    time = 35;
		}
		if (gamepad_button_check_pressed(0, gp_start) && setkey == 0)
		{
		    setkey = 1;
		}
	}
	function scr_draw_controls()
	{
		draw_set_font(global.options_font)
		draw_set_alpha(1)
	    draw_set_halign(fa_center)
		draw_sprite(spr_tvthing,0,0,0)
		if select == 0 
		{
		if hozselect == 0
			draw_sprite_ext(spr_keyboard,0,736+random_range(-3,3),608+random_range(-3,3),xscl,yscl,0,c_white,1)
		else
			draw_sprite_ext(spr_keyboard,0,736,608,minxscl,minyscl,0,c_white,1)
		if hozselect == 1
			draw_sprite_ext(spr_gamepad,0,1152+random_range(-3,3),608+random_range(-3,3),xscl,yscl,0,c_white,1)
		else
			draw_sprite_ext(spr_gamepad,0,1152,608,minxscl,minyscl,0,c_white,1)
		}
		else 
		{
			draw_sprite_ext(spr_keyboard,0,736,608,minxscl,minyscl,0,c_white,1)
			draw_sprite_ext(spr_gamepad,0,1152,608,minxscl,minyscl,0,c_white,1)
		}
		if select == 1
			draw_text_transformed(960+random_range(-3,3),740+random_range(-3,3),menu[1],xscl,yscl,0)
		else
			draw_text_transformed(960,740,menu[1],minxscl,minyscl,0)
			
		
	}
function scr_draw_controls_keyboard()
{
    draw_sprite(spr_tvthing,0,0,0);
    draw_set_font(global.options_font);
    draw_set_alpha(1);
    draw_set_halign(fa_center);
    
    static smooth_scroll_offset = 0;
    var visible_items = 4;
    var item_height = 135;
    var start_y = 360;
    
    var target_scroll_offset = 0;
    if (select >= visible_items) {
        target_scroll_offset = select - visible_items + 1;
    }
    
    smooth_scroll_offset = lerp(smooth_scroll_offset, target_scroll_offset, 0.15);
    
    gpu_set_scissor(300, 300, 1500, 600);
    
    var menu_items = [
        "BACK",
        "LEFT",
        "RIGHT",
        "UP",
        "DOWN",
        "JUMP",
        "POUND",
        "THROW",
        "RESET"
    ];
    
    static cached_keys = undefined;
    static last_setkey = 0;
    
    if (cached_keys == undefined || (last_setkey == 1 && setkey == 0)) {
        cached_keys = {
            key_1: "vk_left", key_2: "vk_right", key_3: "vk_up", key_4: "vk_down",
            key_5: "Z", key_6: "vk_shift", key_7: "X"
        };
        ini_open("Keybinds.ini");
        cached_keys.key_1 = ini_read_string("keybinds", "key_left", "vk_left");
        cached_keys.key_2 = ini_read_string("keybinds", "key_right", "vk_right");
        cached_keys.key_3 = ini_read_string("keybinds", "key_up", "vk_up");
        cached_keys.key_4 = ini_read_string("keybinds", "key_down", "vk_down");
        cached_keys.key_5 = ini_read_string("keybinds", "key_jump", "Z");
        cached_keys.key_6 = ini_read_string("keybinds", "key_groundpound", "vk_shift");
        cached_keys.key_7 = ini_read_string("keybinds", "key_attack", "X");
        ini_close();
    }
    last_setkey = setkey;
    
    for (var i = 0; i < array_length(menu_items); i++) {
        var y_pos = start_y + (i - smooth_scroll_offset) * item_height;
        
        if (y_pos > 200 && y_pos < 900) {
            var is_selected = (i == select);
            
            var current_xscl = is_selected ? xscl : minxscl;
            var current_yscl = is_selected ? yscl : minyscl;
            
            var shake_x = is_selected ? random_range(-2, 2) : 0;
            var shake_y = is_selected ? random_range(-2, 2) : 0;
            
            if (i == 0) {
                if (is_selected) {
                    draw_text_transformed(700 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(700, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
            }
            else if (i == 8) {
                if (is_selected) {
                    draw_text_transformed(960 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(960, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
            }
            else {
                if (is_selected) {
                    draw_text_transformed(700 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(700, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
                
                var key_value = "";
                if (i == 1) key_value = cached_keys.key_1;
                else if (i == 2) key_value = cached_keys.key_2;
                else if (i == 3) key_value = cached_keys.key_3;
                else if (i == 4) key_value = cached_keys.key_4;
                else if (i == 5) key_value = cached_keys.key_5;
                else if (i == 6) key_value = cached_keys.key_6;
                else if (i == 7) key_value = cached_keys.key_7;
                
                if (is_selected) {
                    draw_sprite_ext(scr_iconinput(key_value), 0, 1350 + shake_x, y_pos + 25 + shake_y, current_xscl, current_yscl, 0, c_white, 1);
                } else {
                    draw_sprite_ext(scr_iconinput(key_value), 0, 1350, y_pos + 25, current_xscl, current_yscl, 0, c_white, 1);
                }
            }
        }
    }
    
    gpu_set_scissor(0, 0, display_get_gui_width(), display_get_gui_height());
    
    if (array_length(menu_items) > visible_items) {
        var max_scroll = max(0, array_length(menu_items) - visible_items);
        var scroll_percent = smooth_scroll_offset / max_scroll;
        scroll_percent = clamp(scroll_percent, 0, 1);
        
        var scrollbar_y = 380 + (scroll_percent * 400);
        draw_sprite(spr_scrollhuina, 0, 1440, 640);
        draw_set_color(c_white);
        draw_sprite(spr_scrollxuy, 0, 1440, scrollbar_y);
    }
    
    if (setkey == 1) {
        draw_set_colour(c_black);
        draw_set_alpha(0.95);
        draw_rectangle(0, 0, display_get_gui_width(), display_get_gui_height(), false);
        draw_set_colour(c_white);
        draw_set_alpha(1);
        scr_wavy_text("WAITING FOR KEY...", 960, 450, 15, 0.01, 20, 60);
    }
}


	function scr_draw_controls_gamepad()
{
    draw_sprite(spr_tvthing,0,0,0);
    draw_set_font(global.options_font);
    draw_set_alpha(1);
    draw_set_halign(fa_center);

    static smooth_scroll_offset = 0;
    var visible_items = 4;
    var item_height = 135;
    var start_y = 360;

    var target_scroll_offset = 0;
    if (select >= visible_items) {
        target_scroll_offset = select - visible_items + 1;
    }

    smooth_scroll_offset = lerp(smooth_scroll_offset, target_scroll_offset, 0.15);

    gpu_set_scissor(300, 300, 1500, 600);

    var menu_items = [
        "BACK",
        "JUMP",
        "SLIDE",
        "POUND",
        "THROW",
        "RESET"
    ];

    static cached_gp_keys = undefined;
    static last_setkey_gp = 0;

    if (cached_gp_keys == undefined || (last_setkey_gp == 1 && setkey == 0)) {
        cached_gp_keys = {
            gp_1: "gp_face1", gp_2: "gp_face2", gp_3: "gp_shoulderr", gp_4: "gp_face3"
        };
        ini_open("Keybinds.ini");
        cached_gp_keys.gp_1 = ini_read_string("keybinds", "key_jumpC", "gp_face1");
        cached_gp_keys.gp_2 = ini_read_string("keybinds", "key_slideC", "gp_face2");
        cached_gp_keys.gp_3 = ini_read_string("keybinds", "key_groundpoundC", "gp_shoulderr");
        cached_gp_keys.gp_4 = ini_read_string("keybinds", "key_attackC", "gp_face3");
        ini_close();
    }
    last_setkey_gp = setkey;

    for (var i = 0; i < array_length(menu_items); i++) {
        var y_pos = start_y + (i - smooth_scroll_offset) * item_height;
    
        if (y_pos > 200 && y_pos < 900) {
            var is_selected = (i == select);
        
            var current_xscl = is_selected ? xscl : minxscl;
            var current_yscl = is_selected ? yscl : minyscl;
        
            var shake_x = is_selected ? random_range(-2, 2) : 0;
            var shake_y = is_selected ? random_range(-2, 2) : 0;
        
            if (i == 0) {
                if (is_selected) {
                    draw_text_transformed(700 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(700, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
            }
            else if (i == 5) {
                if (is_selected) {
                    draw_text_transformed(960 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(960, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
            }
            else {
                if (is_selected) {
                    draw_text_transformed(700 + shake_x, y_pos + shake_y, menu_items[i], current_xscl, current_yscl, 0);
                } else {
                    draw_text_transformed(700, y_pos, menu_items[i], current_xscl, current_yscl, 0);
                }
            
                var key_value = "";
                if (i == 1) key_value = cached_gp_keys.gp_1;
                else if (i == 2) key_value = cached_gp_keys.gp_2;
                else if (i == 3) key_value = cached_gp_keys.gp_3;
                else if (i == 4) key_value = cached_gp_keys.gp_4;
            
                if (is_selected) {
                    draw_sprite_ext(scr_iconinput(key_value), 0, 1350 + shake_x, y_pos + 25 + shake_y, current_xscl, current_yscl, 0, c_white, 1);
                } else {
                    draw_sprite_ext(scr_iconinput(key_value), 0, 1350, y_pos + 25, current_xscl, current_yscl, 0, c_white, 1);
                }
            }
        }
    }

    gpu_set_scissor(0, 0, display_get_gui_width(), display_get_gui_height());

    if (array_length(menu_items) > visible_items) {
        var max_scroll = max(0, array_length(menu_items) - visible_items);
        var scroll_percent = smooth_scroll_offset / max_scroll;
        scroll_percent = clamp(scroll_percent, 0, 1);
        
        var scrollbar_y = 380 + (scroll_percent * 400);
        draw_sprite(spr_scrollhuina, 0, 1440, 640);
        draw_set_color(c_white);
        draw_sprite(spr_scrollxuy, 0, 1440, scrollbar_y);
    }

    if (setkey == 1) {
        draw_set_colour(c_black);
        draw_set_alpha(0.95);
        draw_rectangle(0, 0, display_get_gui_width(), display_get_gui_height(), false);
        draw_set_colour(c_white);
        draw_set_alpha(1);
        scr_wavy_text("WAITING FOR KEY...", 960, 450, 15, 0.01, 20, 60);
    }
}

	
	function scr_audio()
	{
		selmax = 3
		menu = [
			"MST",
			"SFX",
			"MUS",
			"BACK"
		]
		var _left, _right;
		ini_open("Keybinds.ini")
		switch global.inputmethod
		{
			case inputmethods.keyboard:
			var check = global.keys[? ini_read_string("keybinds", "key_left", "vk_left")]
			if !is_undefined(check)
			{
				_left = keyboard_check_pressed(global.keys[? ini_read_string("keybinds", "key_left", "vk_left")])
			}
			else
			{
			    _left = keyboard_check_pressed(ord(ini_read_string("keybinds", "key_left", "A")))
			}
			var check = global.keys[? ini_read_string("keybinds", "key_right", "vk_right")]
			if !is_undefined(check)
			{
				_right = keyboard_check_pressed(global.keys[? ini_read_string("keybinds", "key_right", "vk_right")])
			}
			else
			{
			    _right = keyboard_check_pressed(ord(ini_read_string("keybinds", "key_right", "D")))
			}
			break
			case inputmethods.gamepad:
			_right =gamepad_axis_value(0, gp_axislh) > 0.5
			_left  = (gamepad_axis_value(0, gp_axislh) < -0.5) 
			break;
		}
		ini_close()
		
		
		if _left || _right
		{
			switch select
			{
				case 0:
					global.mastervol = changeAudioOpt("MasterVol", clamp(global.mastervol + ((_right - _left) * 10), 0, 100))
					break;
				case 1: 
					global.sfxvol = changeAudioOpt("SoundVol", clamp(global.sfxvol + ((_right - _left) * 10), 0, 100))
					break;
				case 2: 
					global.musvol = changeAudioOpt("MusicVol", clamp(global.musvol + ((_right - _left) * 10), 0, 100) )
					break;
			}
		}
		if ((keyboard_check_pressed(ord("Z"))) || (gamepad_button_check_pressed(0,gp_face1))) && select == 3
		{
			if menu_state != menus.options
				{
					menu_state = menus.options
					select = 0
					obj_game.save_icon_alphatarget = 1
					obj_game.alarm[1] = 140
				}
		}
	}
	function scr_draw_audio()
	{
		draw_sprite(spr_tvthing,0,0,0)
		draw_set_font(global.options_font)
		draw_set_halign(fa_center)


		var positions = [400, 560, 720, 840];
		var shift_start = select; 
		var shift_amount = 25;

		for (var i = 0; i < 3; i++) {
		    var y_pos = positions[i];
    
		    if (i > shift_start) {
		        y_pos += shift_amount; 
		    }
    
		    var scale_x = (i == select) ? xscl : minxscl;
		    var scale_y = (i == select) ? yscl : minxscl;
			var shakin_x = (i == select) ? 655+random_range(-2,2) : 655;
			var shakin_y = (i == select) ? y_pos+random_range(-2,2) : y_pos;
		    draw_text_transformed(shakin_x, shakin_y, menu[i], scale_x, scale_y, 0);
		}
		draw_set_halign(fa_center)
		var scale_x1 = (select == 3) ? xscl : minxscl;
		var scale_y1 = (select == 3) ? yscl : minxscl;
			draw_sprite_ext(spr_volume,floor(global.mastervol/10),1216,416,1,1,0,c_white,1)
			draw_sprite_ext(spr_volume,floor(global.sfxvol/10),1216,576,1,1,0,c_white,1)
			draw_sprite_ext(spr_volume,floor(global.musvol/10),1216,736,1,1,0,c_white,1)
		draw_set_font(global.options_font)
		if select == 3
			draw_text_transformed(960+random_range(-2,2), positions[3]+random_range(-2,2), menu[3], scale_x1, scale_y1, 0);
		else
			draw_text_transformed(960, positions[3], menu[3], scale_x1, scale_y1, 0);
		draw_set_color(c_white)
		
		
	}
	function scr_video()
	{
	   selmax = 5;
		menu = ["VSYNC", "INTERPOLATION", "RESOLUTION", "FULLSCREEN", "SHOW HUD", "BACK"];

		var RESOLUTIONS = [
		    [480, 270], [960, 540], [1024, 576],
		    [1280, 720], [1600, 900], [1920, 1080]
		];


		var change_resolution = function(dir) {
				var RESOLUTIONS = [
			    [480, 270], [960, 540], [1024, 576],
			    [1280, 720], [1600, 900], [1920, 1080]
			];
		    var current_res_index = -1;
		    var length = array_length(RESOLUTIONS);
    
		    for (var i = 0; i < length; i++) {
		        if (global.screen_width == RESOLUTIONS[i][0] && global.screen_heigth == RESOLUTIONS[i][1]) {
		            current_res_index = i;
		            break;
		        }
		    }
    
		    if (current_res_index == -1) current_res_index = 0;
		    current_res_index += dir;
    
		    if (current_res_index < 0) current_res_index = length - 1;
		    if (current_res_index >= length) current_res_index = 0;
    
		    global.screen_width = RESOLUTIONS[current_res_index][0];
		    global.screen_heigth = RESOLUTIONS[current_res_index][1];
    
		    if (global.fullscreen != 2) {
		        window_set_size(global.screen_width, global.screen_heigth);
		        window_center();
		    }
		};

		var toggle_value = function(value, dir) {
		    var new_value = value + dir;
		    if (new_value < 0) return 1;
		    if (new_value > 1) return 0;
		    return new_value;
		};

		var _left_pressed = (global.inputmethod == inputmethods.keyboard) ? 
		    keyboard_check_pressed(vk_left) : gamepad_button_check_pressed(0, gp_shoulderl);
		var _right_pressed = (global.inputmethod == inputmethods.keyboard) ? 
		    keyboard_check_pressed(vk_right) : gamepad_button_check_pressed(0, gp_shoulderr);

		if (_left_pressed || _right_pressed) {
		    var dir = _left_pressed ? -1 : 1;
    
		    switch (select) {
		        case 0: // VSYNC
		            global.vsync = (dir == 1) ? 1 : 0;
		            display_set_timing_method((dir == 1) ? tm_countvsyncs : tm_sleep);
		            break;
            
		        case 1: // Texture Filtering
		            global.texture_filtering = (dir == 1) ? 1 : 0;
		            break;
            
		        case 2: // Resolution
		            change_resolution(dir);
		            break;
            
		        case 3: // Fullscreen Mode
		            global.fullscreen = toggle_value(global.fullscreen, dir);
		            apply_fullscreen_mode();
		            break;
            
		        case 4: // Show Hud
		            global.showhud = toggle_value(global.showhud, dir);
		            break;
		    }
    
		    scr_playsound(sfx_step, false);
		    scr_save_video_settings();
		}

		if (keyboard_check_pressed(ord("Z")) || gamepad_button_check_pressed(0, gp_face1)) {
		    if (select == 5 && menu_state != menus.options) {
		        menu_state = menus.options;
		        obj_game.save_icon_alphatarget = 1;
		        obj_game.alarm[1] = 140;
		        select = 2;
		    }
		}

		if (keyboard_check_pressed(vk_escape) && menu_state != menus.options) {
		    menu_state = menus.options;
		    select = 2;
		}
		
	}
	function scr_draw_video()
	{
	    draw_sprite(spr_tvthing,0,0,0);
	    draw_set_font(global.options_font);
	    draw_set_halign(fa_center);
	    draw_set_color(c_white);

	    var positions = [340, 440, 540, 640, 740, 810];
	    var shift_start = select;
	    var shift_amount = 25;

	    for (var i = 0; i < array_length(menu); i++)
	    {
	        var y_pos = positions[i];
        
	        if (i > shift_start)
	        {
	            y_pos += shift_amount;
	        }
        
	        var scale_x = (i == select) ? xscl * 0.8 : minxscl * 0.8;
	        var scale_y = (i == select) ? yscl * 0.8 : minxscl * 0.8;
        
	        var menu_x = 790;
        
	        var shakin_x = (i == select) ? menu_x + random_range(-2, 2) : menu_x;
	        var shakin_y = (i == select) ? y_pos + random_range(-2, 2) : y_pos;
        
	        draw_text_transformed(shakin_x, shakin_y, menu[i], scale_x, scale_y, 0);
			
        
	        var value_x = (i == select) ? 1300 + random_range(-2, 2) : 1300;
	        var value_scale = (i == select) ? xscl * 0.6 : minxscl * 0.6;
			var value_y = (i == select) ? y_pos + random_range(-2, 2) : y_pos;
        
	        switch (i)
	        {
	            case 0: // VSYNC
	                draw_text_transformed(value_x, value_y, global.vsync ? "ON" : "OFF", scale_x, scale_y, 0);
	                break;
                
	            case 1: // Texture Filtering
	                draw_text_transformed(value_x, value_y, global.texture_filtering ? "ON" : "OFF", scale_x, scale_y, 0);
	                break;
                
	            case 2: // Resolution
	                draw_text_transformed(value_x-10, value_y+21, string(global.screen_width) + "X" + string(global.screen_heigth), scale_x * 0.7, scale_y * 0.7, 0);
	                break;
                
	            case 3: // Fullscreen Mode
	                var mode_text = "";
	                switch (global.fullscreen)
	                {
	                    case 0: mode_text = "OFF"; break;
	                    case 1: mode_text = "ON"; break;
	                }
	                draw_text_transformed(value_x, value_y, mode_text, scale_x, scale_y, 0);
	                break;
				case 4: // Show hud
		                var mode_text_ = "";
		                switch (global.showhud)
		                {
		                    case 0: mode_text_ = "OFF"; break;
		                    case 1: mode_text_ = "ON"; break;
		                }
		                draw_text_transformed(value_x,value_y, mode_text_, scale_x, scale_y, 0);
		                break;
	        }
	    }

	    draw_set_halign(fa_left);
	}

	function apply_fullscreen_mode()
	{
	    switch (global.fullscreen)
	    {
	        case 0: // WINDOWED
	            window_enable_borderless_fullscreen(false);
	            window_set_fullscreen(false);
	            window_set_size(global.screen_width, global.screen_heigth);
	            window_center();
	            break;
            
	        case 1: // FULLSCREEN
	            window_enable_borderless_fullscreen(false);
	            window_set_fullscreen(true);
	            break;
	    }
	}

	function scr_save_video_settings()
	{
	    ini_open("Options.ini");
	    ini_write_real("video", "vsync", global.vsync);
	    ini_write_real("video", "texture_filtering", global.texture_filtering);
	    ini_write_real("video", "screen_width", global.screen_width);
	    ini_write_real("video", "screen_height", global.screen_heigth);
	    ini_write_real("video", "fullscreen", global.fullscreen);
		ini_write_real("video", "showhud", global.showhud);
	    ini_close();
	}

	function scr_load_video_settings()
	{
	        ini_open("Options.ini");
	        global.vsync = ini_read_real("video", "vsync", 0);
	        global.texture_filtering = ini_read_real("video", "texture_filtering", 0);
	        global.screen_width = ini_read_real("video", "screen_width", 1920);
	        global.screen_heigth = ini_read_real("video", "screen_height", 1080);
	        global.fullscreen = ini_read_real("video", "fullscreen", 0);
	        global.showhud = ini_read_real("video", "showhud", 1);
	        ini_close();
        
	        display_set_timing_method(global.vsync ? tm_countvsyncs : tm_sleep);
	        gpu_set_texfilter(global.texture_filtering == 1);
	        apply_fullscreen_mode();
	}
	function scr_load_audio_settings()
	{
	    ini_open("Options.ini");
	    global.mastervol = ini_read_real("Audio", "MasterVol", 100);
	    global.sfxvol = ini_read_real("Audio", "SoundVol", 100);
	    global.musvol = ini_read_real("Audio", "MusicVol", 100);
	    ini_close();
	}
	function scr_main()
{
    if (!saveFileChoosing) 
    {
        selmax = 2
        menu = [
            "PLAY",
            "OPTIONS",
            "EXIT"
        ]
    }
    else
    {
        selmax = 2
        menu = [
            "SAVE 1",
            "SAVE 2",
            "SAVE 3"
        ]
    }
    
    if (keyboard_check_pressed(ord("Z"))) || (gamepad_button_check_pressed(0,gp_face1))
    {
        if (!saveFileChoosing) 
        {
            switch select
            {
                case 0:
                    saveFileChoosing = true
                    select = 0
                    break;
                case 1:
                    if (menu_state != menus.options)
                    {   
						if menu_state ==  menus.pause
							instance_create(x,y,obj_pausefadeout)
                        select = 0
                        menu_state = menus.options
                        shit = false
						if instance_exists(obj_menu_puppet)
							instance_deactivate_object(obj_menu_puppet)
						if instance_exists(obj_menu_spawner)
							instance_deactivate_object(obj_menu_spawner)
                    }
                    break;
                case 2:
                    if (!destroying)
                        destroying = true
                    scr_playsound(sfx_subaluwa,false)
                    break;
            }
        }
        else 
        {
            global.savefile = select
			load_gamefile(global.savefile)
			if !global.firsttime
				room_goto(rm_cutscene)
			else	
				gotoroom(rm_w1Hub, "A")
        }
    }
}
function scr_draw_main()
{
	switch global.firsttime
	{
		case 0:
	    draw_set_halign(fa_center)
	    draw_set_color(c_white)
    
	        switch (select)
	        {
	            case 0:
	            _targetx = 256
	            _targety = 384
	            break;
	            case 1:
	            _targetx = 256
	            _targety = 672
	            break;
	            case 2:
	            _targetx = 256
	            _targety = 928
	            break;
	        }
        
	        if select == 0 && !saveFileChoosing
	        {
	            draw_sprite_ext(spr_play,0,256+random_range(-2,2),384+random_range(-2,2),xscl,yscl,0,c_white,1)
	        }
	        else
	        {
	            draw_sprite_ext(spr_play,0,256,384+yadd ,minxscl,minyscl,0,c_white,1)
	        }
        
	        if select == 1 && !saveFileChoosing
	        {
	            draw_sprite_ext(spr_options,0,256+random_range(-2,2),672+random_range(-2,2),xscl,yscl,0,c_white,1)
	        }
	        else
	            draw_sprite_ext(spr_options,0,256,672+yadd ,minxscl,minyscl,0,c_white,1)
        
	        if select == 2 && !saveFileChoosing
	        {
	            draw_sprite_ext(spr_exit,0,256+random_range(-7,7),928+random_range(-7,7),xscl,yscl,0,c_white,1)
	        }
	        else
	            draw_sprite_ext(spr_exit,0,256,928+yadd ,minxscl,minyscl,0,c_white,1)
	    if (saveFileChoosing)
	    {
			draw_set_colour(c_black)
			draw_set_alpha(0.7)
			draw_rectangle(0,0,1920,1080,false)
			draw_set_alpha(1)
		
	        var positions = [384, 672, 928];
        
	        for (var i = 0; i < 3; i++)
	        {
	            var y_pos = positions[i];
	            var is_selected = (i == select);
            
	            var scale_x = is_selected ? xscl : minxscl;
	            var scale_y = is_selected ? yscl : minyscl;
	            var shake_x = is_selected ? random_range(-2, 2) : 0;
	            var shake_y = is_selected ? random_range(-2, 2) : 0;
                        
	            draw_sprite_ext(spr_saveFile, i, 540 + shake_x, y_pos + shake_y, scale_x, scale_y, 0, c_white, 1);
	        }
	    }
	    if !saveFileChoosing
			draw_sprite_ext(spr_cursor,0,_x,_y,1,1,0,c_white,1)
			
		break
		case 1:
    if (!saveFileChoosing)
    {
        var col_0 = (select == 0) ? c_white : c_gray;
        var col_1 = (select == 1) ? c_white : c_gray;
        var col_2 = (select == 2) ? c_white : c_gray;

        if (select == 0) {
            var shake_x = random_range(-2, 2); var shake_y = random_range(-2, 2);
            draw_sprite_ext(spr_startmenu, 0, -85 + btn_x[0] + shake_x, 384 + shake_y, xscl, yscl, btn_ang[0], col_0, 1);
        } else {
            draw_sprite_ext(spr_startmenu, 0, -85 + btn_x[0], 384 , minxscl, minyscl, btn_ang[0], col_0, 1);
        }
        
        if (select == 1) {
            var shake_x = random_range(-2, 2); var shake_y = random_range(-2, 2);
            draw_sprite_ext(spr_optionsmenu, 0, -85 + btn_x[1] + shake_x, 672 + shake_y, xscl, yscl, btn_ang[1], col_1, 1);
        } else {
            draw_sprite_ext(spr_optionsmenu, 0, -85 + btn_x[1], 672 , minxscl, minyscl, btn_ang[1], col_1, 1);
        }
        
        if (select == 2) {
            var shake_x = random_range(-7, 7); var shake_y = random_range(-7, 7);
            draw_sprite_ext(spr_exitmenu, 0, -85 + btn_x[2] + shake_x, 928 + shake_y, xscl, yscl, btn_ang[2], col_2, 1);
        } else {
            draw_sprite_ext(spr_exitmenu, 0, -85 + btn_x[2], 928 , minxscl, minyscl, btn_ang[2], col_2, 1);
        }
    }


    if (saveFileChoosing)
    {
        draw_set_colour(c_black);
        draw_set_alpha(0.7);
        draw_rectangle(0, 0, 1920, 1080, false);
        draw_set_alpha(1);
		
        var positions = [100, 300, 500];
        for (var i = 0; i < 3; i++)
        {
            var y_pos = positions[i];
            var is_selected = (i == select);
            
            var scale_x = is_selected ? xscl : minxscl;
            var scale_y = is_selected ? yscl : minyscl;
            var shake_x = is_selected ? random_range(-2, 2) : 0;
            var shake_y = is_selected ? random_range(-2, 2) : 0;
            
            var file_x_offset = is_selected ? 60 : 0; 
            var file_col = is_selected ? c_white : c_gray;
            var file_angle = sin(menu_wobble_timer * 1.5 + i) * (is_selected ? 3 : 1);
                        
            draw_sprite_ext(spr_saveFile, i, 540 + file_x_offset + shake_x, y_pos + shake_y, scale_x, scale_y, file_angle, file_col, 1);
        }
    }
    
    
	


		break;
	}
}


	function scr_game_opt()
{
    selmax = 6;
    menu = [
        "SHAKE", 
        "GORE", 
        "BLOOD", 
        "SIREN NOISE SHAKE", 
        "STAGE TIMER", 
        "PHOTOSENSETIVE MODE",
        "BACK"
    ];

    var toggle_value = function(value, dir, maximum = 1, minimum = 0) {
        var new_value = value + dir;
        if (new_value < minimum) return maximum;
        if (new_value > maximum) return minimum;
        return new_value;
    };

    var _left_pressed = (global.inputmethod == inputmethods.keyboard) ? keyboard_check_pressed(vk_left) : gamepad_button_check_pressed(0, gp_shoulderl);
    var _right_pressed = (global.inputmethod == inputmethods.keyboard) ? keyboard_check_pressed(vk_right) : gamepad_button_check_pressed(0, gp_shoulderr);

    if (_left_pressed || _right_pressed) 
    {
        var dir = _left_pressed ? -1 : 1;
    
        switch (select) {
            case 0: // Shake
                global.shake_magnitude += ((dir == 1) ? 1 : -1) * 0.1;
                
                global.shake_magnitude = clamp(global.shake_magnitude, 0.1, 1);
                break;
            
            case 1: // Gore
                global.gore_type = toggle_value(global.gore_type, dir, 2, 0);
                break;
            
            case 2: // Blood
                global.blood_type = toggle_value(global.blood_type, dir, 2, 0);
                break;
            
            case 3: // Siren Noise Shake
                // neeed to add global.sirennoise
                // global.sirennoise = toggle_value(global.sirennoise, dir);
                break;
            
            case 4: // Stage timer
                global.showleveltimer = toggle_value(global.showleveltimer, dir);
                break;
            
            case 5: // Photosensitive mode
                global.photosensetive = toggle_value(global.photosensetive, dir);
                break;
        }
    
        scr_playsound(sfx_step, false);
        scr_save_game_settings();
    }

    if (keyboard_check_pressed(ord("Z")) || gamepad_button_check_pressed(0, gp_face1)) {
        if (select == 6 && menu_state != menus.options) {
            menu_state = menus.options;
            obj_game.save_icon_alphatarget = 1;
            obj_game.alarm[1] = 140;
            select = 2;
        }
    }

    if (keyboard_check_pressed(vk_escape) && menu_state != menus.options) {
        menu_state = menus.options;
        select = 2;
    }
}
function scr_game_opt_draw()
{
    draw_sprite(spr_tvthing,0,0,0);
    draw_set_font(global.options_font);
    draw_set_halign(fa_center);
    draw_set_color(c_white);

    static smooth_scroll_offset = 0;
    var visible_items = 4;
    var item_height = 110;
    var start_y = 360;
    
    var target_scroll_offset = 0;
    if (select >= visible_items) {
        target_scroll_offset = select - visible_items + 1;
    }
    
    smooth_scroll_offset = lerp(smooth_scroll_offset, target_scroll_offset, 0.15);
    
    gpu_set_scissor(300, 300, 1500, 600);

    for (var i = 0; i < array_length(menu); i++)
    {
        var y_pos = start_y + (i - smooth_scroll_offset) * item_height;
        if (y_pos > 200 && y_pos < 900)
        {
            var is_selected = (i == select);
            
            var scale_x = is_selected ? xscl * 0.8 : minxscl * 0.8;
            var scale_y = is_selected ? yscl * 0.8 : minxscl * 0.8;
            
            var menu_x = 790;
            
            var shakin_x = is_selected ? menu_x + random_range(-2, 2) : menu_x;
            var shakin_y = is_selected ? y_pos + random_range(-2, 2) : y_pos;
            
            if (i != 3) {
                draw_text_transformed(shakin_x, shakin_y, menu[i], scale_x, scale_y, 0);
            } else {
                draw_text_transformed(shakin_x, shakin_y, menu[i], scale_x * 0.75, scale_y * 0.75, 0);
            }
            
            var value_x = is_selected ? 1300 + random_range(-2, 2) : 1300;
            var value_y = is_selected ? y_pos + random_range(-2, 2) : y_pos;
            
            switch (i)
            {
                case 0: // SHAKE magnitude
                    draw_text_transformed(value_x, value_y, string(global.shake_magnitude), scale_x, scale_y, 0);
                    break;
                    
                case 1: // GORE
                    var gore_txt = "ON";
                    if (global.gore_type == 0) gore_txt = "OFF";
                    else if (global.gore_type == 2) gore_txt = "FILTERED";
                    draw_text_transformed(value_x, value_y, gore_txt, scale_x, scale_y, 0);
                    break;
                    
                case 2: // BLOOD
                    var blood_txt = "ON";
                    if (global.blood_type == 0) blood_txt = "OFF";
                    else if (global.blood_type == 2) blood_txt = "FILTERED";
                    draw_text_transformed(value_x, value_y, blood_txt, scale_x, scale_y, 0);
                    break;
                    
                case 3: // SIREN NOISE SHAKE
                    var siren_txt = global.sirennoiseshake ? "ON" : "OFF";
                    draw_text_transformed(value_x, value_y, siren_txt, scale_x, scale_y, 0);
                    break;
                    
                case 4: // STAGE TIMER
                    var timer_txt = global.showleveltimer ? "ON" : "OFF";
                    draw_text_transformed(value_x, value_y, timer_txt, scale_x, scale_y, 0);
                    break;
                    
                case 5: // PHOTOSENSETIVE MODE
                    var photo_txt = (global.photosensetive == 1) ? "ON" : "OFF";
                    draw_text_transformed(value_x, value_y, photo_txt, scale_x, scale_y, 0);
                    break;
            }
        }
    }

    gpu_set_scissor(0, 0, display_get_gui_width(), display_get_gui_height());
    
    if (array_length(menu) > visible_items) {
        var max_scroll = max(0, array_length(menu) - visible_items);
        var scroll_percent = smooth_scroll_offset / max_scroll;
        scroll_percent = clamp(scroll_percent, 0, 1);
        
        var scrollbar_y = 380 + (scroll_percent * 400); 
        
        draw_sprite(spr_scrollhuina, 0, 1440, 640);
        draw_sprite(spr_scrollxuy, 0, 1440, scrollbar_y);
    }

    draw_set_halign(fa_left);
}


	function scr_save_game_settings()
	{
		
	    ini_open("Options.ini");
	    ini_write_real("game", "shake_magnitude", global.shake_magnitude);
	    ini_write_real("game", "gore", global.gore_type);
	    ini_write_real("game", "blood", global.blood_type);
	    ini_write_real("game", "sirennoise", global.sirennoiseshake);
	    ini_write_real("game", "showleveltimer", global.showleveltimer);
	    ini_write_real("game", "photosensetive", global.photosensetive);
	    ini_close();
	}

	function scr_load_game_settings()
	{
	        ini_open("Options.ini");
			
	        global.shake_magnitude = ini_read_real("game", "shake_magnitude", 1);
	        global.gore_type = ini_read_real("game", "gore", 1);
	        global.sirennoiseshake = ini_read_real("game", "sirennoise", 1);
	        global.blood_type = ini_read_real("game", "blood", 1);
	        global.showleveltimer = ini_read_real("game", "showleveltimer", 0);
	        global.photosensetive = ini_read_real("game", "photosensetive", 0);
	        ini_close();
	}