Code:
# * Single Quest Title ACE * #
# Scripter : Kyonides Arkanthes
# 2023-05-21
# This scriptlet lets you show the Current Quest Title on the map using a
# given Game Variable. The state of a certain Game Switch determines
# whether or not the window will be visible on screen.
# * Script Calls * #
# - Set New Title
# new_quest_title("Quest Name")
# - Repeat the Most Recent Title
# repeat_quest_title!
module SingleQuest
HIDE_WHEN_ZERO = nil
SWITCH_ID = 1
VAR_ID = 1
WINDOW_X = 0
WINDOW_Y = 0
WINDOW_WIDTH = 240
WINDOW_HEIGHT = 56
class TitleWindow < Window_Base
include SingleQuest
def initialize
super(WINDOW_X, WINDOW_Y, window_width, WINDOW_HEIGHT)
$game_variables[VAR_ID] = "" if $game_variables[VAR_ID] == 0
self.opacity = 0
self.contents_opacity = 0
@back_color1 = Color.new(0, 0, 0, 192)
@back_color2 = Color.new(0, 0, 0, 0)
@show_count = 0
refresh
end
def window_width
Graphics.width - WINDOW_WIDTH
end
def refresh
contents.clear
return if $game_variables[VAR_ID].empty?
rect = contents.rect
draw_background(rect)
draw_text(rect, $game_variables[VAR_ID])
end
def draw_background(rect)
temp_rect = rect.dup
temp_rect.width /= 2
contents.gradient_fill_rect(temp_rect, @back_color2, @back_color1)
temp_rect.x = temp_rect.width
contents.gradient_fill_rect(temp_rect, @back_color1, @back_color2)
end
def update_fadein
self.contents_opacity += 16
end
def update_fadeout
self.contents_opacity -= 16
end
def update
super
self.visible = $game_switches[SWITCH_ID]
if self.visible && @show_count > 0
update_fadein
@show_count -= 1
elsif HIDE_WHEN_ZERO
update_fadeout
end
end
def open
refresh
@show_count = 150
self.contents_opacity = 0
self
end
def close
@show_count = 0
self
end
end
end
module SceneManager
extend self
attr_accessor :quest_window
end
class Game_Interpreter
def new_quest_title(title)
$game_variables[SingleQuest::VAR_ID] = title
repeat_quest_title!
end
def repeat_quest_title!
SceneManager.quest_window.open
end
end
class Scene_Map
alias :kyon_single_quest_scn_map_create_all_win :create_all_windows
def create_all_windows
kyon_single_quest_scn_map_create_all_win
make_single_quest_window
end
def make_single_quest_window
@quest_window = SingleQuest::TitleWindow.new
SceneManager.quest_window = @quest_window
@quest_window.open
end
attr_reader :quest_window
end