From b1b907a6e64e44eba31b2cbe600d5e5a0d673aa9 Mon Sep 17 00:00:00 2001 From: mshirt Date: Sun, 1 Jan 2017 05:04:21 -0600 Subject: [PATCH] Settings menu script additions Settings menu now fully works, but will need to add more changes in a bit to make it save a settings file (so user won't have to change settings every relaunch) --- scripts/Game_Player.rb | 6 +- scripts/Game_Temp.rb | 2 + scripts/Scene_Map.rb | 21 ++- scripts/Window_MainMenu.rb | 6 +- scripts/Window_Settings.rb | 308 +++++++++++++++++++++++++++++++++++++ scripts/_scripts.txt | 1 + 6 files changed, 338 insertions(+), 6 deletions(-) create mode 100644 scripts/Window_Settings.rb diff --git a/scripts/Game_Player.rb b/scripts/Game_Player.rb index 522859b..8cc98ed 100644 --- a/scripts/Game_Player.rb +++ b/scripts/Game_Player.rb @@ -177,7 +177,11 @@ class Game_Player < Game_Character unless $game_system.map_interpreter.running? or @move_route_forcing or $game_temp.message_window_showing or $game_temp.menus_visible # Adjust move speed - @move_speed = Input.press?(Input::RUN) ? 4 : 3 + if $game_switches[251] == false + @move_speed = Input.press?(Input::RUN) ? 4 : 3 + else + @move_speed = Input.press?(Input::RUN) ? 3 : 4 + end unless moving? # Move player in the direction the directional button is being pressed case Input.dir4 diff --git a/scripts/Game_Temp.rb b/scripts/Game_Temp.rb index b2d2cd6..8bfd83f 100644 --- a/scripts/Game_Temp.rb +++ b/scripts/Game_Temp.rb @@ -45,6 +45,7 @@ class Game_Temp attr_accessor :menu_calling # menu calling flag attr_accessor :item_menu_calling # item menu calling flag attr_accessor :travel_menu_calling # fast travel menu calling flag + attr_accessor :window_settings_calling # fast travel menu calling flag attr_accessor :menu_beep # menu: play sound effect flag attr_accessor :save_calling # save calling flag attr_accessor :debug_calling # debug calling flag @@ -102,6 +103,7 @@ class Game_Temp @menu_calling = false @item_menu_calling = false @travel_menu_calling = false + @window_settings_calling = false @menu_beep = false @save_calling = false @debug_calling = false diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index 4a52775..d0c25af 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -41,6 +41,7 @@ class Scene_Map @item_icon_flash_wait = 100 # Make fast travel menu @fast_travel = FastTravel.new + @window_settings = Window_Settings.new # Fade to black transition @blackfade = Sprite.new @blackfade.bitmap = Bitmap.new(640, 480) @@ -76,6 +77,7 @@ class Scene_Map @menu.dispose @item_menu.dispose @fast_travel.dispose + @window_settings.dispose # Dispose of item icon @item_icon.dispose @item_icon_flash.dispose @@ -118,7 +120,7 @@ class Scene_Map return end $game_system.map_interpreter.update - $game_temp.menus_visible = @menu.visible || @item_menu.visible || @fast_travel.visible + $game_temp.menus_visible = @menu.visible || @item_menu.visible || @fast_travel.visible || @window_settings.visible $game_player.update $game_followers.each{|f| f.update} # Update system (timer), screen @@ -233,6 +235,7 @@ class Scene_Map end # Update fast travel @fast_travel.update + @window_settings.update if Input.trigger?(Input::F8) && !$game_switches[123] if Graphics.fullscreen == true @@ -242,6 +245,10 @@ class Scene_Map Graphics.fullscreen = true $console = true end + if @window_settings.visible + sleep(0.100) + @window_settings.redraw_setting_index(2) + end end # If showing message window if $game_temp.message_window_showing || @ed_message.visible || @doc_message.visible || @desktop_message.visible || @credits_message.visible @@ -250,7 +257,7 @@ class Scene_Map # Process menu opening unless $game_system.map_interpreter.running? || $game_system.menu_disabled || - @fast_travel.visible || $game_temp.menu_calling == true || $game_temp.item_menu_calling == true + @fast_travel.visible || @window_settings.visible || $game_temp.menu_calling == true || $game_temp.item_menu_calling == true if !@menu.visible && Input.trigger?(Input::MENU) $game_temp.menu_calling = true $game_temp.menu_beep = true @@ -288,6 +295,8 @@ class Scene_Map call_item_menu elsif $game_temp.travel_menu_calling call_travel_menu + elsif $game_temp.window_settings_calling + call_window_settings elsif $game_temp.save_calling call_save elsif $game_temp.debug_calling @@ -379,6 +388,14 @@ class Scene_Map # Open the menu @fast_travel.open end + def call_window_settings + # Clear menu call flag + $game_temp.window_settings_calling = false + # Straighten player position + $game_player.straighten + # Open the menu + @window_settings.open + end #-------------------------------------------------------------------------- # * Save Call #-------------------------------------------------------------------------- diff --git a/scripts/Window_MainMenu.rb b/scripts/Window_MainMenu.rb index 28f8adc..905183f 100644 --- a/scripts/Window_MainMenu.rb +++ b/scripts/Window_MainMenu.rb @@ -134,9 +134,9 @@ class Window_MainMenu < Window_Selectable $game_temp.common_event_id = 15 @fade_out = true else - $game_system.se_play($data_system.buzzer_se) - self.active = true - self.opacity = 255 + $game_system.se_play($data_system.decision_se) + $game_temp.window_settings_calling = true + @fade_out = true end return end diff --git a/scripts/Window_Settings.rb b/scripts/Window_Settings.rb new file mode 100644 index 0000000..8e1b6cf --- /dev/null +++ b/scripts/Window_Settings.rb @@ -0,0 +1,308 @@ +class Window_Settings + MARGIN = 30 + TITLE_TOP_MARGIN = 32 + TITLE_MARGIN = 100 + ITEM_SPACING = 28 + ACTIVE_MARGIN = MARGIN * 2 + 20 + + def initialize + @viewport = Viewport.new(0, 0, 640, 480) + @bg = Sprite.new(@viewport) + @bg.bitmap = Bitmap.new(640, 480) + @bg.bitmap.fill_rect(0, 0, 640, 480, Color.new(0, 0, 0, 128)) + @title = Sprite.new(@viewport) + @title.bitmap = Bitmap.new(320, TITLE_MARGIN) + @title.bitmap.font.size = 40 + @title.y = TITLE_TOP_MARGIN + @title.x = MARGIN + @data_sprites = [] + @viewport.z = 9998 + + @left_hold_timer = 0 + @right_hold_timer = 0 + + self.visible = false + @index = 0 + @fade_in = false + @fade_out = false + + @transfer_player = nil + end + + def dispose + @bg.dispose + @title.dispose + @data_sprites.each do |spr| + spr.dispose + end + @viewport.dispose + end + + def open + self.visible = true + self.opacity = 0 + @fade_in = true + @data = [ + tr('BGM Volume'), + tr('SFX Volume'), + tr('Fullscreen'), + tr('Default movement'), + tr('Colorblind mode'), + tr('Frameskip'), + tr('Configure Controls (Press F1)'), + ] + + @index = 0 + + # Create title + @title.bitmap.clear + @title.bitmap.draw_text(0, 0, @title.bitmap.width, @title.bitmap.height, tr("Settings")) + + # Create menu options + @data.each_with_index do |item, i| + spr = Sprite.new(@viewport) + spr.bitmap = Bitmap.new(320, ITEM_SPACING) + spr.x = MARGIN + spr.y = TITLE_MARGIN + TITLE_TOP_MARGIN + ITEM_SPACING * i + spr.opacity = 0 + redraw_setting(spr, i) + + @data_sprites << spr + end + end + + def redraw_setting(spr, i) + spr.bitmap.clear + spr.bitmap.draw_text(0, 0, spr.bitmap.width, spr.bitmap.height, @data[i]) + spr.bitmap.draw_text(0, 0, spr.bitmap.width, spr.bitmap.height, @data[i]) + case i + when 0 + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, Audio.bgm_volume.to_s) + when 1 + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, Audio.sfx_volume.to_s) + when 2 #fullscreen + if(Graphics.fullscreen == true) + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("ON")) + else + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("OFF")) + end + when 3 #default movement + if($game_switches[251] == true) + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("RUN")) + else + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("WALK")) + end + when 4 #colorblind mode + if($game_switches[252] == true) + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("ON")) + else + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("OFF")) + end + when 5 #frameskip + if(Graphics.frameskip == true) + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("ON")) + else + spr.bitmap.draw_text(260, 0, spr.bitmap.width, spr.bitmap.height, tr("OFF")) + end + end + end + + def redraw_setting_index(i) + redraw_setting(@data_sprites[i], i) + end + + def update + if @fade_in + self.opacity += 20 + active_spr = nil + @data_sprites.each do |spr| + spr.opacity += 10 + spr.opacity = 128 if spr.opacity > 128 + active_spr = spr if !active_spr && spr.x < MARGIN * 2 + end + if active_spr + active_spr.x += 6 + active_spr.x = MARGIN * 2 if active_spr.x > MARGIN * 2 + elsif self.opacity == 255 + @fade_in = false + end + return + end + + if @fade_out + self.opacity -= 20 + @data_sprites.each do |spr| + spr.opacity -= 10 + end + if self.opacity == 0 + @fade_out = false + self.visible = false + @data_sprites.each do |spr| + spr.dispose + end + @data_sprites = [] + + if @transfer_player + $game_temp.player_transferring = true + $game_temp.player_new_map_id = @transfer_player.id + $game_temp.player_new_x = @transfer_player.x + $game_temp.player_new_y = @transfer_player.y + $game_temp.player_new_direction = @transfer_player.dir + Graphics.freeze + $game_temp.transition_processing = true + $game_temp.transition_name = "black" + @transfer_player = nil + end + end + return + end + + return if !self.visible + + # Adjust position and visibility + @data_sprites.each_with_index do |spr, i| + if i == @index + if spr.x < ACTIVE_MARGIN + spr.x += 6 + spr.x = ACTIVE_MARGIN if spr.x > ACTIVE_MARGIN + end + spr.opacity += 10 if spr.opacity < 255 + else + if spr.x > MARGIN * 2 + spr.x -= 6 + spr.x = MARGIN * 2 if spr.x < MARGIN * 2 + end + spr.opacity -= 10 if spr.opacity > 128 + spr.opacity = 128 if spr.opacity < 128 + end + end + + if Input.trigger?(Input::UP) + @index = (@index - 1) % @data.size + $game_system.se_play($data_system.cursor_se) + end + if Input.trigger?(Input::DOWN) + @index = (@index + 1) % @data.size + $game_system.se_play($data_system.cursor_se) + end + + if Input.press?(Input::LEFT) + @left_hold_timer += 1 + else + @left_hold_timer = 0 + end + + if Input.press?(Input::RIGHT) + @right_hold_timer += 1 + else + @right_hold_timer = 0 + end + + case @index + when 0 #bgm vol + old_vol = Audio.bgm_volume + if Input.trigger?(Input::LEFT) || (Input.press?(Input::LEFT) && (@left_hold_timer >= 15)) + @left_hold_timer -= 2 + Audio.bgm_volume -= 1 + if old_vol > 1 + Audio.se_play("Audio/SE/text_robot.wav", 70, (Audio.bgm_volume/2) + 75) + end + elsif Input.trigger?(Input::RIGHT) || (Input.press?(Input::RIGHT) && (@right_hold_timer >= 15)) + @right_hold_timer -= 2 + Audio.bgm_volume += 1 + if old_vol < 100 + Audio.se_play("Audio/SE/text_robot.wav", 70, (Audio.bgm_volume/2) + 75) + end + end + redraw_setting_index(0) + + when 1 #sfx vol + old_vol = Audio.sfx_volume + if Input.trigger?(Input::LEFT) || (Input.press?(Input::LEFT) && (@left_hold_timer >= 15)) + @left_hold_timer -= 2 + Audio.sfx_volume -= 1 + if old_vol > 1 + Audio.se_play("Audio/SE/text_robot.wav", 70, (Audio.sfx_volume/2) + 75) + end + elsif Input.trigger?(Input::RIGHT) || (Input.press?(Input::RIGHT) && (@right_hold_timer >= 15)) + @right_hold_timer -= 2 + Audio.sfx_volume += 1 + if old_vol < 100 + Audio.se_play("Audio/SE/text_robot.wav", 70, (Audio.sfx_volume/2) + 75) + end + end + redraw_setting_index(1) + + when 2 #fullscreen + if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) + + $game_system.se_play($data_system.decision_se) + if Graphics.fullscreen == true + Graphics.fullscreen = false + $console = false + else + Graphics.fullscreen = true + $console = true + end + sleep(0.100) + redraw_setting_index(2) + end + + when 3 #default movement + if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) + + $game_system.se_play($data_system.decision_se) + if $game_switches[251] == true + $game_switches[251] = false + else + $game_switches[251] = true + end + redraw_setting_index(3) + end + + when 4 #colorblind mode + if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) + + $game_system.se_play($data_system.decision_se) + if $game_switches[252] == true + $game_switches[252] = false + else + $game_switches[252] = true + end + redraw_setting_index(4) + end + + when 5 #frameskip + if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) + + $game_system.se_play($data_system.decision_se) + if Graphics.frameskip == true + Graphics.frameskip = false + else + Graphics.frameskip = true + end + redraw_setting_index(5) + end + end + + if Input.trigger?(Input::CANCEL) + $game_system.se_play($data_system.cancel_se) + @fade_out = true + end + end + + # Attributes + def visible + @viewport.visible + end + def visible=(val) + @viewport.visible = val + end + def opacity=(val) + @bg.opacity = val + @title.opacity = val + end + def opacity + @bg.opacity + end +end diff --git a/scripts/_scripts.txt b/scripts/_scripts.txt index 55df880..e4e58ea 100644 --- a/scripts/_scripts.txt +++ b/scripts/_scripts.txt @@ -56,6 +56,7 @@ Window_EquipRight Window_EquipItem Window_Status Window_SaveFile +Window_Settings Window_ShopCommand Window_ShopBuy Window_ShopSell