I.Ustawienia dostępne z poziomu komendy 'script' w zdarzeniach:
* ustawienia związane z czionką
ams.default_color = Color.new(r, g, b) <-- domyślny kolor czcionki w wiadomościach, gdzie r, g i b to liczby z przedziału 0-255 oznaczające wartości kolorów czerwonego, zielonego i niebieskiego;
ams.font_name = "Nazwa Czcionki" <-- zmiana czcionki;
ams.font_size = liczba <-- zmiana wielkości czcionki;
ams.bold = true / false <-- pogrubienie tekstu;
ams.italic = true / false <-- kursywa tekstu;
* inne ustawienia związane z tekstem
ams.letter_by_letter = true / false <-- tryb wyświetlania liter, true - po jednej, false - wszystkie na raz;
ams.beep_sound = "tekst" <-- nazwa dźwięku z folderu SE odtwarzanego przy każdej wypisanej literze, "" - brak;
ams.text_speed = liczba <-- szybkosc wyswietlania tekstu, im większa liczba, tym wolniej wyswietlane są literki;
ams.text_skipping = true / false <-- zezwolenie 'przyspieszania' wyświetlania tekstu z pomocą spacji, true - można przyspieszać, false - nie można;
ams.center = true / false <-- wycentrowanie tekstu do środka okienka, w poziomie;
ams.automatic_interpunction_waiting = true / false <-- automatyczne dodawanie pauz po każdym znaku interpunkcyjnym;
* ustawienia związane z oknem wiadomości
ams.event_nr = liczba <-- wskazanie, czy okienko ma być wyśrodkowane nad głową postaci, -2 - wyłączone, -1 - gracz, 0 - to zdarzenie, 1+ - zdarzenie o takim id;
ams.tail = true / false <-- wyświetlanie komiksowego 'ogonka' pod wiadomościami, do którego potrzeba dodatkowej grafiki w folderze Windowskins, true - wyświetlanie, false - brak;
ams.default_position = liczba <-- umiejscowienie okienka względem postaci, 0 - nad postacią, 1 - pod postacią;
ams.opacity = liczba <-- przezroczystość okna wiadomości, 0-255;
ams.back_opacity = liczba <-- przezroczystość tła okna wiadomości, 0-255;
ams.resizable = true / false <-- dostosowywanie wymiarów okna do ilości tekstu, true - dopasowywanie, false - brak;
ams.multipler = liczba <-- zaokrąglenie wymiarów okna (przydatne przy zapętlających się windowskinach), jeśli nie wiesz co to jest - ustaw 1;
ams.xy_modifiers = [x,y] <-- liczby oznaczające modyfikatory współrzędnych okna wiadomości, x - modyfikator x, y - modyfikator y;
* ustawienia związane z dodatkowym okienkiem imienia
ams.name = "tekst" <-- tekst, który będzie wyświetlany w okienku z imieniem, "" - brak okienka;
ams.name_config_same_as_message = true / false <-- przekopiowanie ustawień czcionki z okienka wiadomości do okienka z imieniem, true - przekopiowanie, false - ustawienie wartości z poniższych ustawień;
ams.name_default_color = Color.new(r, g, b) <-- domyślny kolor czcionki w okienku z imieniem, gdzie r, g i b to liczby z przedziału 0-255 oznaczające wartości kolorów czerwonego, zielonego i niebieskiego;
ams.name_font_name = "Nazwa Czcionki" <-- zmiana czcionki w okienku z imieniem;
ams.name_font_size = liczba <-- zmiana wielkości czcionki w okienku z imieniem;
ams.name_bold = true <-- pogrubienie tekstu w okienku z imieniem;
ams.name_italic = false <-- kursywa tekstu w okienku z imieniem;
ams.name_opacity = liczba <-- przezroczystość okna z imieniem, 0-255;
ams.name_back_opacity = liczba <-- przezroczystość tła okna z imieniem, 0-255;
ams.name_xy_modifiers = [x, y] <-- liczby oznaczające modyfikatory współrzędnych okna z imieniem, x - modyfikator x, y - modyfikator y;
* ustawienia związane ze wstrząsem ekranem (wstrząs wywoływany w wiadomości z pomocą \q)
ams.quake_sound = "tekst" <-- nazwa pliku dźwiękowego z folderu SE, który będzie odtwarzany przy rozpoczęciu wstrząsu;
ams.quake_power = liczba <-- moc wstrząsu, 1-10;
ams.quake_speed = liczba <-- szybkość wstrząsu, 1-10.
II.Ustawienia dostępne z poziomu komendy 'pokaż wiadomość' ('Show Message') w zdarzeniach:
* standardowe ustawienia
\c[n] <-- zmiana koloru tekstu, n - numer 0-7;
\v[n] <-- wstawienie wartości zmiennej o id n;
\n[n] <-- wstawienie imienia bohatera o id n;
\g <-- pokazanie okienka z ilością złota;
* ustawienia z amsa
\p[n] <-- odczekanie n klatek, zanim pojawią się kolejne litery (pauza);
\w[n] <-- zmiana szybkości wyświetlania tekstu na n;
\b <-- włączenie/wyłączenie pogrubienia;
\i <-- włączenie/wyłączenie kursywy;
\s[tekst] <-- odtworzenie dźwięku SE o nazwie podanej w nawiasie;
\bs <-- zmiana nazwy dźwięku SE odtwarzanego przy każdej wypisywanej literze;
\e[n] <-- umiejscowienie okna nad postacią, -2 - żadną, -1 - graczem, 0 - tym zdarzeniem, 1+ - zdarzeniem o takim id;
\q[n] <-- uruchomienie wstrząsu o długości równej n;
\oa[n] <-- pokazanie ikony pancerza o id n;
\ow[n] <-- pokazanie ikony broni o id n;
\oi[n] <-- pokazanie ikony przedmiotu o id n;
\nm[tekst] <-- zmiana tekstu w okienku z imieniem (brak tekstu - brak okienka);
\ts <-- włączenie / wyłączenie 'przyspieszania' wyświetlania tekstu z pomocą spacji.
=end
# ================================================================
class Interpreter
# Message.
def ams
return $game_system.message
end
# Command 101.
alias sabams_command_101 command_101
def command_101
sabams_command_101
if $game_system.message.automatic_interpunction_waiting
$game_temp.message_text.gsub!('\'', '\'\p[1]')
$game_temp.message_text.gsub!('\"', '\"\p[2]')
$game_temp.message_text.gsub!(',', ',\p[5]')
$game_temp.message_text.gsub!(';', ';\p[7]')
$game_temp.message_text.gsub!('.', '.\p[11]')
$game_temp.message_text.gsub!('!', '!\p[15]')
$game_temp.message_text.gsub!('?', '?\p[13]')
end
end
# Script command fix.
def command_355
script = @list[@index].parameters[0] + "\n"
loop do
if @list[@index+1].code == 655
script += @list[@index+1].parameters[0] + "\n"
else
break
end
@index += 1
end
result = eval(script)
return true
end
end
# ================================================================
# ================================================================
class Window_Base < Window
end
# ================================================================
# ================================================================
class Spriteset_Map
attr_reader :character_sprites
end
class Scene_Map
attr_reader :spriteset
end
# ================================================================
# ================================================================
class Game_System
attr_accessor :message
alias sabams_initialize initialize
def initialize
sabams_initialize
@message = Message_Options.new
end
end
# ================================================================
# Normal color. ------------------------------------------------
alias sabams_normal_color normal_color
def normal_color
return $game_system.message.default_color
end
# Obliczanie szerokosci poszczegolnych lini. -------------------
def calculate_lines_sizes
result = [1]
text = $game_temp.message_text.dup
gsubbing_text(text, true)
x = 0; y = 0
if text == text.gsub("\n",'')
text += "\n"
end
while ((c = text.slice!(/./m)) != nil)
if c == "\001" # Ikona.
x += 24
next
end
if c == "\n" # Nowa linia.
result[y] = x
x = 0; y += 1
end
x += self.contents.text_size(c).width # Zwykly znak.
end
@lines_sizes = result
end
# Reset window. ------------------------------------------------
def reset_window
self.contents.font.name = $game_system.message.font_name
self.contents.font.size = $game_system.message.font_size
self.contents.font.bold = $game_system.message.bold
calculate_lines_sizes
# Sprawdzenie tagu \e[n].
if $game_temp.message_text.gsub!(/\\[Ee]\[(\-*[0-9]+)\]/) {""} != nil
$game_system.message.event_nr = $1.to_i
end
# Sprawdzenie tagu \nm[n].
if $game_temp.message_text.gsub!(/\\[Nn][Mm]\[((\\n\[[0-9]+\]| |[a-zżźA-ZŻŹ0-9])+)\]/) {""} != nil
s = $1.to_s
s.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
$game_system.message.name = s
end
# Zmiana szerokosci / wysokosci okna.
if $game_system.message.resizable
# Resize.
self.width = 32 + 8 + @lines_sizes.max
self.height = 32 + 8 + @lines_sizes.size * 32
self.contents = Bitmap.new(width - 32, height - 32)
else
self.width = 480
self.height = 160
self.contents = Bitmap.new(width - 32, height - 32)
end
# Dostosowanie do zaokrąglenia.
if self.width % $game_system.message.multipler != 0
self.width += $game_system.message.multipler-(self.width%$game_system.message.multipler)
end
if self.height % $game_system.message.multipler != 0
self.height += $game_system.message.multipler-(self.height%$game_system.message.multipler)
end
# Współrzędne.
if $game_system.message.event_nr >= -1
# Wycentrowanie.
event = $game_system.map_interpreter.get_character($game_system.message.event_nr)
char_height = RPG::Cache.character(event.character_name,0).height / 4
char_width = RPG::Cache.character(event.character_name,0).width / 4
x = event.screen_x - self.width / 2
x = [[x,0].max, 640-self.width].min
y = [[y,0].max, 640-self.height].min
y1 = event.screen_y - char_height - self.height - ($game_system.message.tail ? 16 : 0)
y2 = event.screen_y + ($game_system.message.tail ? 16 : 0)
if $game_system.message.default_position == 0
y = y1 >= 0 ? y1 : y2
else
y = y2 <= 580-self.height ? y2 : y1
end
self.x = x
self.y = y
else
# Normalne.
self.x = 320 - self.width / 2
if $game_temp.in_battle
self.y = 16
else
case $game_system.message_position
when 0 # up
self.y = 16
when 1 # middle
self.y = 160
when 2 # down
self.y = 304
end
end
end
# Przezroczystość.
if $game_system.message_frame == 0
self.opacity = $game_system.message.opacity
else
self.opacity = 0
end
self.back_opacity = $game_system.message.back_opacity
# Modyfikatory.
self.x += $game_system.message.xy_modifiers[0]
self.y += $game_system.message.xy_modifiers[1]
end
# Text update. --------------------------------------------------
def text_update
if @text == "" then @text = nil end
if @wait_count > 0
@wait_count -=1
elsif @text != nil
# -->
@wait_count = 0
# <--
# Get 1 text character in c (loop until unable to get text)
c = @text.slice!(/./m)
# \\
if c == "\000"
# Return to original text
c = "\\"
end
# Kolor. \c[n]
if c == "\001"
# Change text color
@text.sub!(/\[([0-9]+)\]/, "")
color = $1.to_i
if color >= 0 and color <= 7
self.contents.font.color = text_color(color)
end
return
end
# Złoto. \g
if c == "\002"
# Make gold window
if @gold_window == nil
@gold_window = Window_Gold.new
@gold_window.x = 560 - @gold_window.width
if $game_temp.in_battle
@gold_window.y = 192
else
@gold_window.y = self.y >= 128 ? 32 : 384
end
@gold_window.opacity = self.opacity
@gold_window.back_opacity = self.back_opacity
end
return
end
# Czekanie. \p[n]
if c == "\003"
@text.sub!(/\[([0-9]+)\]/, "")
delay = $1.to_i
@wait_count += delay if (delay > 0) and (!@text_skipping)
return
end
# Pogrubienie/kursywa. \b \i
if c == "\004"
$game_system.message.bold = !$game_system.message.bold
return
end
if c == "\005"
$game_system.message.italic = !$game_system.message.italic
return
end
# Dźwięk. \s[tekst]
if c == "\006"
@text.sub!(/\[([a-zA-Z]+)\]/, "")
Audio.se_play("Audio/SE/" + $1.to_s, 100, 100)
return
end
# Zmiana szybkosci. \w[n]
if c == "\010"
@text.sub!(/\[([0-9]+)\]/, "")
$game_system.message.text_speed = $1.to_i
return
end
# Ikony broni, przedmiotów, pancerzy. \oa[n] \oi[n] \ow[i]
if c == "\011"
@text.sub!(/\[([0-9]+)\]/, "")
item = $data_items[$1.to_i];
if item != nil
icon = RPG::Cache.icon(item.icon_name)
unless $game_system.message.center
self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
else
self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
end
@x += 24
Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
# Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
if ($game_system.message.letter_by_letter) and (!@text_skipping)
@wait_count += $game_system.message.text_speed
else
text_update # Szybkie pisanie, rekurencja.
end
end
return
end
if c == "\013"
@text.sub!(/\[([0-9]+)\]/, "")
item = $data_armors[$1.to_i];
if item != nil
icon = RPG::Cache.icon(item.icon_name)
unless $game_system.message.center
self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
else
self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
end
@x += 24
# Dźwięk.
Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
# Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
if ($game_system.message.letter_by_letter) and (!@text_skipping)
@wait_count += $game_system.message.text_speed
else
text_update # Szybkie pisanie, rekurencja.
end
end
return
end
if c == "\014"
@text.sub!(/\[([0-9]+)\]/, "")
item = $data_weapons[$1.to_i];
if item != nil
icon = RPG::Cache.icon(item.icon_name)
unless $game_system.message.center
self.contents.blt(@x + 4, @y * 32, icon, Rect.new(0, 0, 24, 24))
else
self.contents.blt(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, icon, Rect.new(0, 0, 24, 24))
end
@x += 24
# Dźwięk.
Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
# Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
if ($game_system.message.letter_by_letter) and (!@text_skipping)
@wait_count += $game_system.message.text_speed
else
text_update # Szybkie pisanie, rekurencja.
end
end
return
end
# Beep sound. \bs[tekst]
if c == "\015"
@text.sub!(/\[((\-|[a-zA-Z0-9])+)\]/, "")
$game_system.message.beep_sound = $1.to_s
return
end
# Wstrząs. \q[n]
if c == "\016"
@text.sub!(/\[([0-9]+)\]/, "")
if $game_system.message.quake_sound != ""
Audio.se_play("Audio/SE/" + $game_system.message.quake_sound.to_s, 100, 100)
end
$game_screen.start_shake($game_system.message.quake_power, $game_system.message.quake_speed, $1.to_i)
return
end
# Text skipping. \ts
if c == "\017"
$game_system.message.text_skipping = !$game_system.message.text_skipping
return
end
# Nowa linia. \n
if c == "\n"
# Update cursor width if choice
@cursor_width = self.contents.width-16
# Add 1 to y
@y += 1
@x = 0
unless ($game_system.message.letter_by_letter) # Szybkie pisanie, rekurencja.
text_update
end
return
end
# Draw text
self.contents.font.name = $game_system.message.font_name
self.contents.font.size = $game_system.message.font_size
self.contents.font.bold = $game_system.message.bold
self.contents.font.italic = $game_system.message.italic
unless $game_system.message.center
self.contents.draw_text(4 + @x, 32 * @y, 40, 32, c)
else
self.contents.draw_text(self.contents.width/2 + @x - @lines_sizes[@y].to_i/2, 32 * @y, 40, 32, c)
end
# Add x to drawn text width
@x += self.contents.text_size(c).width
# Dźwięk.
Audio.se_play("Audio/SE/" + $game_system.message.beep_sound.to_s, 100, 100) if $game_system.message.beep_sound != ""
# Czekanie, jeśli tak ustawiono i nie naciśnięto spacji. -->
if ($game_system.message.letter_by_letter) and (!@text_skipping)
@wait_count += $game_system.message.text_speed
else
text_update # Szybkie pisanie, rekurencja.
end
end
end
# Gsubbing text. -----------------------------------------------
def gsubbing_text(text, all=false)
if all
text.gsub!(/\\[VvNnCcGgPpBbIiSsEeQqWwTt](|[MmSs])\[\-*(((\\n\[[0-9]+\]|\-| |[a-zżźA-ZŻŹ0-9\*\!\\\#\$\^\&\(\)\[\:]))+)\]/) {""}
text.gsub!(/\\[Oo][IiWwAa]\[([0-9]+)\]/) { "\001" } # Znacznik ikonki.
return text
end
# Control text processing
begin
last_text = text.clone
text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
end until text == last_text
# Name window.
text.gsub!(/\\[Nn][Mm]\[((\\n\[[0-9]+\]| |[a-zŻŻŹA-ZŻŹ0-9])+)\]/) { "" }
# Actor name.
text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
# Change "\\\\" to "\000" for convenience
text.gsub!(/\\\\/) { "\000" }
# Change "\\C" to "\001" and "\\G" to "\002"
text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
text.gsub!(/\\[Gg]/) { "\002" }
# -->
# Czekanie.
text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\003[#{$1}]" }
# Beep sound.
text.gsub!(/\\[Bb][Ss]\[((\-|[a-zA-Z0-9])+)\]/) { "\015[#{$1}]" }
# Pogrubienie / kursywa.
text.gsub!(/\\[Bb]/) { "\004" }
text.gsub!(/\\[Ii]/) { "\005" }
# Dźwięk.
text.gsub!(/\\[Ss]\[([a-zA-Z]+)\]/) { "\006[#{$1}]" }
# Event nr.
text.gsub!(/\\[Ee]\[\-*([0-9]+)\]/) { "" }
# Zmiana szybkosci.
text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\010[#{$1}]" }
# Ikonka pancerzy, broni lub przedmiotu.
text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) { "\011[#{$1}]" }
text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) { "\013[#{$1}]" }
text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) { "\014[#{$1}]" }
# Wstrząs ekranem.
text.gsub!(/\\[Qq]\[([0-9]+)\]/) { "\016[#{$1}]" }
# Text skipping.
text.gsub!(/\\[Tt][Ss]/) { "\017" }
# <--
return text
end
# Refresh. ------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = normal_color
@x = @y = 0
@cursor_width = 0
# If waiting for a message to be displayed
if $game_temp.message_text != nil
@text = $game_temp.message_text
gsubbing_text(@text)
end
# If choice
if $game_temp.choice_max > 0
@item_max = $game_temp.choice_max
self.active = true
self.index = 0
end
# If number input
if $game_temp.num_input_variable_id > 0
digits_max = $game_temp.num_input_digits_max
number = $game_variables[$game_temp.num_input_variable_id]
@input_number_window = Window_InputNumber.new(digits_max)
@input_number_window.number = number
@input_number_window.x = self.x + 8
@input_number_window.y = self.y + $game_temp.num_input_start * 32
end
# Okienko z imieniem.
if $game_system.message.name != ""
refresh_name
end
# Ogonek.
if $game_system.message.tail and $game_system.message.event_nr >= -1
refresh_tail
end
# Szybkie pisanie liter.
unless $game_system.message.letter_by_letter
@text_skipping = true
end
end
# Update. ------------------------------------------------------
def update
super
# Wypisywanie kolejnych liter.
text_update
# Okienko z imieniem i ogonek.
if $game_system.message.name != "" and @name_window.is_a?(Window_AmsName)
@name_window.update
end
if $game_system.message.tail and $game_system.message.event_nr >= -1 and @tail_sprite
@tail_sprite.update
end
# If fade in
if @fade_in
if Input.trigger?(Input::C)
@text_skipping = true if $game_system.message.text_skipping
end
self.contents_opacity += 96
if @input_number_window != nil
@input_number_window.contents_opacity += 96
end
if self.contents_opacity == 255
@fade_in = false
end
return
end
# If inputting number
if @input_number_window != nil
@input_number_window.update
# Confirm
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
$game_variables[$game_temp.num_input_variable_id] = @input_number_window.number
$game_map.need_refresh = true
# Dispose of number input window
@input_number_window.dispose
@input_number_window = nil
terminate_message
end
return
end
# If message is being displayed
if @contents_showing
# If choice isn't being displayed, show pause sign
if $game_temp.choice_max == 0
# -->
self.pause = false # :D
# <--
end
# Cancel
if Input.trigger?(Input::B)
if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
$game_system.se_play($data_system.cancel_se)
$game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
terminate_message
end
end
# Confirm
if Input.trigger?(Input::C)
# Przyspieszenie tekstu.
if @text != nil
@text_skipping = true if $game_system.message.text_skipping
else
if $game_temp.choice_max > 0
$game_system.se_play($data_system.decision_se)
$game_temp.choice_proc.call(self.index)
end
terminate_message
end
end
return
end
# If display wait message or choice exists when not fading out
if @fade_out == false and $game_temp.message_text != nil
@contents_showing = true
$game_temp.message_window_showing = true
# <--
@text_skipping = false
# <--
reset_window
refresh
Graphics.frame_reset
self.visible = true
self.contents_opacity = 0
if @input_number_window != nil
@input_number_window.contents_opacity = 0
end
@fade_in = true
return
end
# If message which should be displayed is not shown, but window is visible
if self.visible
@fade_out = true
self.opacity -= 96
if self.opacity == 0
self.visible = false
@fade_out = false
$game_temp.message_window_showing = false
end
return
end
end
# Terminate message. -------------------------------------------
alias sabams_terminate_message terminate_message
def terminate_message
sabams_terminate_message
@tail_sprite.visible = false if @tail_sprite
if @name_window
@name_window.dispose
@name_window = nil
end
end
# Refresh tail. ------------------------------------------------
def refresh_tail
@tail_sprite.dispose if @tail_sprite.is_a?(Sprite)
bit = RPG::Cache.windowskin($game_system.windowskin_name+' tail')
@tail_sprite = Sprite.new
@tail_sprite.bitmap = bit
@tail_sprite.ox = @tail_sprite.bitmap.width/2
@tail_sprite.oy = @tail_sprite.bitmap.height/2
@tail_sprite.z = 9998
@tail_sprite.opacity = $game_system.message.opacity
event = $game_system.map_interpreter.get_character($game_system.message.event_nr)
if (self.y+self.height) <= event.screen_y
y = self.y + self.height
else
y = self.y
@tail_sprite.angle = 180
end
x = event.screen_x
if (self.x+self.width/2) > x
@tail_sprite.mirror = true unless @tail_sprite.angle == 180
end
@tail_sprite.x = x
@tail_sprite.y = y
@tail_sprite.visible = true
@tail_sprite.opacity = self.opacity
end
# Refresh name window. -----------------------------------------
def refresh_name
@name_window.dispose if @name_window.is_a?(Window_AmsName)
@name_window = Window_AmsName.new(self.x+$game_system.message.name_xy_modifiers[0], self.y+$game_system.message.name_xy_modifiers[1], $game_system.message.name)
end
end
# ================================================================
# ================================================================
class Window_AmsName < Window_Base
# Initialize. --------------------------------------------------
def initialize(x, y, text)
@text = text
b=Bitmap.new(1,1)
if $game_system.message.name_config_same_as_message
b.font.name = $game_system.message.font_name
b.font.size = $game_system.message.font_size
b.font.bold = $game_system.message.bold
b.font.italic = $game_system.message.italic
else
b.font.name = $game_system.message.name_font_name
b.font.size = $game_system.message.name_font_size
b.font.bold = $game_system.message.name_bold
b.font.italic = $game_system.message.name_italic
end
h = b.text_size("dj").height+16
if h % $game_system.message.multipler != 0
h += $game_system.message.multipler-(h%$game_system.message.multipler)
end
super(x, y-h, b.text_size(@text).width+20, h)
self.contents = Bitmap.new(width-32, height-32)
self.z = 9999 # o 1 więcej, niż Window_Message
self.opacity = $game_system.message.name_back_opacity
self.back_opacity = $game_system.message.name_back_opacity
# Dostosowanie do zaokrąglenia.
if self.width % $game_system.message.multipler != 0
self.width += $game_system.message.multipler-(self.width%$game_system.message.multipler)
end
if self.height % $game_system.message.multipler != 0
self.height += $game_system.message.multipler-(self.height%$game_system.message.multipler)
end
# Bitmapa do wypisywania tekstu.
@spr = Sprite.new(self.viewport)
@spr.x = self.x+10
@spr.y = self.y
@spr.z = 9999
@spr.bitmap = Bitmap.new(self.width,self.height)
@spr.bitmap.font.name = b.font.name
@spr.bitmap.font.size = b.font.size
@spr.bitmap.font.bold = b.font.bold
@spr.bitmap.font.italic = b.font.italic
refresh
end
# Normal color. ------------------------------------------------
alias sabams_normal_color normal_color
def normal_color
return ($game_system.message.name_config_same_as_message ? $game_system.message.default_color : $game_system.message.name_default_color)
end
alias sabams_dispose dispose
def dispose
@spr.dispose
sabams_dispose
end
end
# ================================================================
Demo.
Zrzuty.
Spoiler:
Instrukcja.
Demo nie prezentuje wszystkich opcji - pełną listę wraz z opisami znajdziesz w komentarzach na początku skryptu. Pod nimi rozpisane są też ustawienia początkowe (które można dowolnie modyfikować).
Spoiler:
Poza tym porównam z innymi AMSami:
* skrypt nie posiada tyle opcji co UMS i jest mniej skomplikowany, dzięki czemu działa o wiele szybciej;
* skrypt nie wymaga SDK, w przeciwieństwie do Multiple Message Windows - to też znacząco przyspiesza działanie;
* skrypt nie posiada błędów znanych z AMSa r4.
Super AMS. Gdyby robił na Xp to bym go na 100% użył.
________________________ ...Amelanduil & FireBlade words will be remembered... ...Amelanduil & FireBlade acts will be remembered... ...Amelanduil & FireBlade never gonna die...
ams.tail = true / false <-- wyświetlanie komiksowego 'ogonka' pod wiadomościami, do którego potrzeba dodatkowej grafiki w folderze Windowskins, true - wyświetlanie, false - brak;
Czy to nie to?
________________________ ...Amelanduil & FireBlade words will be remembered... ...Amelanduil & FireBlade acts will be remembered... ...Amelanduil & FireBlade never gonna die...
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Czw 17 Lut, 2011 20:01
Z tym komiksowym dymku? Ściągnij demo, wrzuć do folderu Windowskins plik 'comic.png' i 'comic tail.png'. W treści zdarzenia przed wyświetleniem tekstu zmień okno za pomocą polecenia "Change Window", wybierz owe okno i korzystając z polecenia 'script' wpisz:
Kod:
ams.tail = true
Ewentualnie zajrzyj do dema, wszystko jest w nim wyjaśnione.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum