Загрузка данных
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();
}