- Сообщений: 173
- Спасибо получено: 6
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.
Где найти и скачать скрипты?
Мне надо что бы игрок сам мог сделать из представленных волос костюмов и лиц героя и что-бы была возможность автовыбора подходящего лица для него (ну наверно это сложно) - хотя можно и что-бы уже из готовых можно было вибирать
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Скрипт, наиболее близкий к тому, что ты сказал, вот:
rpg-maker.info/download/Скрипты/RGSS/Скр...sy-Caracter-Creator/
Кинула в архив форума )
Это старый злобный VisEquip с генерителем персонажей. Позволят выбрать пол, класс, имя; затем-- волосы, кожу, глаза и одежду; затем-- способности и инвентарь. Предупреждение: некорректно работает с caterpillar-ом. Игра не виснет, но сопартийцы отображаться отказываются. Ещё один минус: если не ращбираешься в сриптах достаточно, чтобы вырубить визуальное отображение доспехов, придётся озаботиться графикой для них.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- SaretOdin-Sol
-
- Не в сети
- Давно я тут
-
- Жизнь - не игра...Хотя кого это колышет?
- Сообщений: 475
- Спасибо получено: 77
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Мне нужен скрипт который дала Nalia только для VX что бы там было меню такое-же простое как и там (наилегчайшее я бы сказал)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- SaretOdin-Sol
-
- Не в сети
- Давно я тут
-
- Жизнь - не игра...Хотя кого это колышет?
- Сообщений: 475
- Спасибо получено: 77
А так на ВХ нет подобного скрипта.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Миникарту написал чарли. Есть хороший рабочий скрипт. Картинок не просит. если надо кому могу дать.Scorpio пишет: помогите найти скрипт для создания мини карты а то нашёл какой-то но он не работает
Я лично на ивентах писал миникарту. Это легко и работает без багов. не хуже скрипта
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Мне надо что бы игрок сам мог сделать из представленных волос костюмов и лиц героя и что-бы была возможность автовыбора подходящего лица для него (ну наверно это сложно) - хотя можно и что-бы уже из готовых можно было вибирать
Знаешь, либо ты учишься пользоваться VisEquip, либо создаёшь некое количество уже готовых болванок на все варианты выбора. По-моему, первое проще.
Сам экран создания персонажа можно сделать на событиях. Думакешь чистую карту, ставишь какую-нибудь однотонную панораму, в центр карты-- героя. Сначала-- голенькую болванку. Внизу, сообщениями, поочерёдно предлагаешь выбор: пол? (в зависимости от этого меняется болванка) Цвет волос? (тут можно ещё картинкой аватар высветить в уголочке) Верхняя часть костюма? Нижняя часть костюма?
Если постараться, поманипулировать с картинками и поэкспериментировать, то может получиться даже не уродски.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
rmrk.net/index.php/topic,31844.0.html
Здесь хороший индекс ВХных скриптов.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
rmrk.net/index.php/topic,33028.0.html - Где можно найти такой скрипт а то я там никак зарегатся не могу
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- SaretOdin-Sol
-
- Не в сети
- Давно я тут
-
- Жизнь - не игра...Хотя кого это колышет?
- Сообщений: 475
- Спасибо получено: 77
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
# ** Сцена_ГлавноеМеню (Scene_Title)
#
# Этот класс обрабатывает экран главного меню.
#==============================================================================
# VS СценарийГлавноеМеню (VS Title Script)
class Scene_Title < Scene_Base
attr_accessor :titleloop
attr_accessor :cursorreset
attr_accessor :symbolreset
attr_accessor :sparkcount
#
# * инициализация
#
def initialize
@titleloop = 1
@cursorreset = false
@symbolreset = false
@sparkcount = 350
end
#
# * главная функция
#
def main
if $BTEST # если тест битвы
battle_test # начать тест битвы
else # если обычная игра
super # обычная главная функция
end
end
#
# * функция начала
#
def start
super
load_database # загрузить базу данных
create_game_objects # создать объекты игры
check_continue # определить, если доступно "продолжить"
create_title_graphic # создать изображение главного меню
create_command_window # создать окно команд
play_title_music # играть музыку экрана главного меню
end
#
# * выполнить переход
#
def perform_transition
Graphics.transition(20)
end
#
# * функция после начала
#
def post_start
super
open_command_window
end
#
# * функция перед завершением
#
def pre_terminate
super
close_command_window
end
#
# * функция завершения
#
def terminate
super
dispose_command_window
snapshot_for_background
dispose_title_graphic
end
#
# * обновить кадр
#
def update
super
#=======анимация волны=========
@wave.update
#=======анимация символа=========
@symbol.ox -= 1
if @symbolreset == true && @symbol.opacity == 0
@symbolreset = false
elsif @symbol.opacity != 255
@symbol.opacity += 3
end
#=======анимация вспышки========
@spark01.x += 10
@spark02.x -= 10
if @sparkcount != 0
@sparkcount -= 1
else
@sparkcount = 350
@spark01.x = -172
@spark02.x = 640
end
if @spark01.opacity != 255
@spark01.opacity += 20
@spark02.opacity += 20
end
#=======анимация фона=========
if @sprite.oy != 0
@sprite.oy -= 1
elsif @sprite.oy == 0
@sprite.ox += 1
end
if @wave.oy != 0
@wave.oy -= 1
elsif @wave.oy == 0
if @titleloop == 1 && @wave.ox != 1289
@wave.ox += 1
else
@titleloop == 2
end
if @titleloop == 2 && @wave.ox != -1189
@wave.ox -= 1
else
@titleloop == 1
end
end
#=======анимация меню=========
case @command_window.index
when 0
@spark01.y = 280
@spark02.y = 300
@symbol.oy = 403
@strike1.y = 300
@strike2.y = 300
if @menu01.opacity != 255
@menu01.opacity += 20
@menu02.opacity -= 20
@menu03.opacity -= 20
end
if @cursor.y != 300
@cursor.y -= 5
end
when 1
@spark01.y = 325
@spark02.y = 345
@symbol.oy = 358
@strike1.y = 345
@strike2.y = 345
if @menu02.opacity != 255
@menu02.opacity += 20
@menu01.opacity -= 20
@menu03.opacity -= 20
end
if @cursor.y != 345 && @cursor.y < 345
@cursor.y += 5
elsif @cursor.y != 345 && @cursor.y > 345
@cursor.y -= 5
end
when 2
@spark01.y = 365
@spark02.y = 385
@symbol.oy = 317
@strike1.y = 385
@strike2.y = 385
if @menu03.opacity != 255
@menu03.opacity += 20
@menu02.opacity -= 20
@menu01.opacity -= 20
end
if @cursor.y != 385
@cursor.y += 5
end
end
@command_window.update
#=======анимация курсора=========
if @strike1.x != 0
@strike1.x += 11
end
if @strike2.x != 308
@strike2.x -= 12
end
check_menu
if Input.trigger?(Input::C)
case @command_window.index
when 0 #новая игра
command_new_game
when 1 # продолжить
command_continue
when 2 # выйти из игры
command_shutdown
end
end
end
#
# * проверить текущее меню
#
def check_menu
if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
@sparkcount = 350
@spark01.x = -172
@spark02.x = 640
@spark01.opacity -= 255
@spark02.opacity -= 255
@symbol.opacity -= 255
@symbolreset = true
case @command_window.index
when 0
@spark01.y = 280
@spark02.y = 300
@symbol.oy = 403
@strike1.y = 300
@strike2.y = 300
@strike1.x = -330
@strike2.x = 680
when 1
@spark01.y = 325
@spark02.y = 345
@symbol.oy = 358
@strike1.y = 345
@strike2.y = 345
@strike1.x = -330
@strike2.x = 680
when 2
@spark01.y = 365
@spark02.y = 385
@symbol.oy = 317
@strike1.y = 385
@strike2.y = 385
@strike1.x = -330
@strike2.x = 680
end
end
end
#
# * загрузить базу данных
#
def load_database
$data_actors = load_data("Data/Actors.rvdata")
$data_classes = load_data("Data/Classes.rvdata")
$data_skills = load_data("Data/Skills.rvdata")
$data_items = load_data("Data/Items.rvdata")
$data_weapons = load_data("Data/Weapons.rvdata")
$data_armors = load_data("Data/Armors.rvdata")
$data_enemies = load_data("Data/Enemies.rvdata")
$data_troops = load_data("Data/Troops.rvdata")
$data_states = load_data("Data/States.rvdata")
$data_animations = load_data("Data/Animations.rvdata")
$data_common_events = load_data("Data/CommonEvents.rvdata")
$data_system = load_data("Data/System.rvdata")
$data_areas = load_data("Data/Areas.rvdata")
end
#
# * загрузить базу данных теста битвы
#
def load_bt_database
$data_actors = load_data("Data/BT_Actors.rvdata")
$data_classes = load_data("Data/BT_Classes.rvdata")
$data_skills = load_data("Data/BT_Skills.rvdata")
$data_items = load_data("Data/BT_Items.rvdata")
$data_weapons = load_data("Data/BT_Weapons.rvdata")
$data_armors = load_data("Data/BT_Armors.rvdata")
$data_enemies = load_data("Data/BT_Enemies.rvdata")
$data_troops = load_data("Data/BT_Troops.rvdata")
$data_states = load_data("Data/BT_States.rvdata")
$data_animations = load_data("Data/BT_Animations.rvdata")
$data_common_events = load_data("Data/BT_CommonEvents.rvdata")
$data_system = load_data("Data/BT_System.rvdata")
end
#
# * создать объекты игры
#
def create_game_objects
$game_temp = Game_Temp.new
$game_message = Game_Message.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
end
#
# * определить, доступно ли "продолжить"
#
def check_continue
@continue_enabled = (Dir.glob('Сохранение*.rvdata').size > 0)
end
#
# * создать изображение главного меню
#
def create_title_graphic
@viewport1 = Viewport.new(0, 0, 1288, 891)
@viewport2 = Viewport.new(0, 0, 824, 480)
@viewport2.z = 10
@sprite = Plane.new(@viewport1)
@sprite.bitmap = Cache.system("TitleBGLoop")
@sprite.oy = 371
@sprite.ox = 100
@sprite.z = -100
@wave = Sprite.new(@viewport1)
@wave.bitmap = Cache.system("TitleBGSprite")
@wave.oy = 371
@wave.ox = 100
@wave.wave_amp = 50
@wave.wave_length = 440
@wave.wave_speed = 1250
@wave.opacity = 125
@wave.z = 5
@logo = Sprite.new
@logo.bitmap = Cache.system("TitleLogo")
@logo.x = 50
@logo.y = 10
@logo.z = 10
@menu01 = Sprite.new
@menu01.bitmap = Cache.system("TitleMenu01")
@menu01.x = 240
@menu01.y = 300
@menu02 = Sprite.new
@menu02.bitmap = Cache.system("TitleMenu02")
@menu02.x = 240
@menu02.y = 300
@menu02.opacity = 0
@menu03 = Sprite.new
@menu03.bitmap = Cache.system("TitleMenu03")
@menu03.x = 240
@menu03.y = 300
@menu03.opacity = 0
@cursor = Sprite.new
@cursor.bitmap = Cache.system("TitleCursor")
@cursor.x = 240
@cursor.y = 300
@cursor.z = 12
@strike1 = Sprite.new
@strike1.bitmap = Cache.system("CursorStrike01")
@strike1.x = 0
@strike1.y = 300
@strike1.z = 9
@strike2 = Sprite.new
@strike2.bitmap = Cache.system("CursorStrike02")
@strike2.x = 308
@strike2.y = 300
@strike2.z = 9
@symbol = Plane.new(@viewport2)
@symbol.bitmap = Cache.system("TitleSymbol")
@symbol.oy = 403
@symbol.ox = 100
@spark01 = Sprite.new
@spark01.bitmap = Cache.system("TitleSpark01")
@spark01.y = 280
@spark01.x = -172
@spark01.z = 12
@spark02 = Sprite.new
@spark02.bitmap = Cache.system("TitleSpark02")
@spark02.y = 300
@spark02.x = 640
@spark02.z = 12
@menu01.z = @menu02.z = @menu03.z = 13
if @continue_enabled
@menu01.opacity = 0
@menu02.opacity = 255
@cursor.y = 345
@strike1.y = 345
@strike2.y = 345
@symbol.oy = 358
end
end
#
# * расположить изображение главного меню
#
def dispose_title_graphic
@sprite.dispose
@wave.dispose
@logo.dispose
@menu01.dispose
@menu02.dispose
@menu03.dispose
@cursor.dispose
@strike1.dispose
@strike2.dispose
@symbol.dispose
@spark01.dispose
@spark02.dispose
@wave.bitmap.dispose
@logo.bitmap.dispose
@menu01.bitmap.dispose
@menu02.bitmap.dispose
@menu03.bitmap.dispose
@cursor.bitmap.dispose
@strike1.bitmap.dispose
@strike2.bitmap.dispose
@spark01.bitmap.dispose
@spark02.bitmap.dispose
end
#
# * создать окно команд
#
def create_command_window
s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(172, [s1, s2, s3])
@command_window.x = (640 - @command_window.width) / 2
@command_window.y = 998
if @continue_enabled # если доступно "продолжить"
@command_window.index = 1 # двигать курсор над командой
else # если недоступно
@command_window.draw_item(1, false) # сделать команду полупрозрачной
end
@command_window.openness = 0
@command_window.open
end
#
# * расположить окно команд
#
def dispose_command_window
@command_window.dispose
end
#
# * открыть окно команд
#
def open_command_window
@command_window.open
begin
@command_window.update
Graphics.update
end until @command_window.openness == 255
end
#
# * закрыть окно команд
#
def close_command_window
@command_window.close
begin
@command_window.update
Graphics.update
end until @command_window.openness == 0
end
#
# * играть музыку экрана главного меню
#
def play_title_music
$data_system.title_bgm.play
RPG::BGS.stop
RPG::ME.stop
end
#
# * проверить существование начального положения игрока
#
def confirm_player_location
if $data_system.start_map_id == 0
print "Player start location not set." #начальное положение игрока не задано
exit
end
end
#
# * команда: новая игра
#
def command_new_game
confirm_player_location
Sound.play_decision
$game_party.setup_starting_members # нначальная партия
$game_map.setup($data_system.start_map_id) # начальная позиция карты
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$scene = Scene_Map.new
RPG::BGM.fade(1500)
close_command_window
Graphics.fadeout(60)
Graphics.wait(40)
Graphics.frame_count = 0
RPG::BGM.stop
$game_map.autoplay
end
#
# * команда: продолжить
#
def command_continue
if @continue_enabled
Sound.play_decision
$scene = Scene_File.new(false, true, false)
else
Sound.play_buzzer
end
end
#
# * команда: выйти из игры
#
def command_shutdown
Sound.play_decision
RPG::BGM.fade(800)
RPG::BGS.fade(800)
RPG::ME.fade(800)
$scene = nil
end
#
# * тест битвы
#
def battle_test
load_bt_database # загрузить базу данных теста битвы
create_game_objects # создать объекты игры
Graphics.frame_count = 0 # инициализировать время игры
$game_party.setup_battle_test_members
$game_troop.setup($data_system.test_troop_id)
$game_troop.can_escape = true
$game_system.battle_bgm.play
$game_system.bb = "bg_001.jpg"
snapshot_for_background
$scene = Scene_Battle.new
end
end
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
# + [VX] [ NMS - Neo Message System 3.0 Beta ] +
#
# >> Автор Woratana [woratana@hotmail.com]
# >> Thaiware RPG Maker Community
# >> Особые благодарности: Mako, Yatzumo, Straycat, Erzengel, RPG,
# Dubalex, Modern Algebra, Equilibrium Keeper
#
# Дата выпуска: 07/06/2008 (D-M-Y)
#
# Включает: NEO-FACE SYSTEM ADVANCE (Version 3.0) by Woratana
#===============================================================
# Заметки:
# - Сценарий начал писаться еще до выхода VX English,
# так что некоторые комментарии все еще на японском
# - Сценарий включает новейшую версию Neo-Face System,
# так что Вам следует удалить старую версию Neo-Face System, если она у Вас есть.
=begin
=============================================
+ NMS 3 Beta + [07/06/2008]
- добавил 'список удаленного текста'
- временное изменение размеров и положения окна
- теперь сценарий можно вызвать:
$game_message.create_nms_data
для переустановки данных NMS или создания данных NMS для старого файла сохранения
- исправлена ошибка с написанием имени класса актера
- исправлена ошибка с выходом поля имени за пределы экрана
- добавил NAMEBOX_Y_PLUS_TOP для исправления имени за экраном при показе сообщения сверху
- установка непрозрачности поля имени для разных фонов сообщений
- автоисправление, если окно сообщения за пределами экрана
- Вы можете изменить размер лица или нарисовать новое лицо во время сообщения
=============================================
=============================================
+ NMS 2.3 + [11/03/2008 - 06/04/2008]
- Remove Color for [WRITE TEXT] features
- 'Quick Text' feature
- Animated Face
- Play SE/ME
- Typing Sound
- Scroll Text Vertically and Horizontally
- Auto-cut text (Not work perfectly)
- Hex Color (Special Thanks: RPG & Erzengel)
- Pop Message (Work in Progress)
- Add the script code in comment of some settings,
so user can change it in game by call script.
=============================================
=============================================
+ NMS 2.1 + [11/03/2008]: исправлена ошибка поля имени
=============================================
=====================================
+ NMS 2.0 СПИСОК ОСОБЕННОСТЕЙ +
=====================================
Используйте эти особенности поля сообщения
>> NMS ОСОБЕННОСТИ СООБЩЕНИЙ
>> [SPECIAL CALL] PART
\ce[Common Event ID] << немедленно играть обычное событие
\ani[Animation ID] << показать анимацию "этого события"
\bal[Balloon ID] << Show Ballon on 'This Event'
* Примечание: Это событие = Событие, показывающее сообщение
>> [MESSAGE WINDOW] PART
* временные свойства, используемые однократно
\wx[x] << Set temporary X to x
\wy[y] << Set temporary Y to y
\ww[width] << Set temporary Width to width
\wh[height] << Set temporary Height to height
>> +[ POP TEXT ]+
текст Pop это окно сообщения, отображаемое над персонажем
в размере, равном размеру сообщения
Его можно вызвать, вставив это в сообщение:
\p[character]
* character: персонаж, над которым должно отображаться сообщение~
0 для игрока
-1 для этого события
1 или больше для №№события
>> +[ QUICK TEXT ]+ a.k.a. Shortcut
Добавьте & Вызов Вашего очень длинного текста (или) часто используемого - ярлыком.
Туда можно вставлять специальные символы, напр. 'Welcome to \c[10]Syria Village\c[0]
$nms.qt[Quick Text ID] = 'Text you want' << Add Quick Text
\qt[Quick Text ID] << Call Quick Text from message box
>> [DRAW IMAGE] Нарисовать изображение
\dw[weapon ID] << нарисовать иконку оружия + имя оружия
\da[armor ID] << нарисовать иконку доспеха + имя доспеха
\di[item ID] << нарисовать иконку вещи + имя вещи
\ds[skill ID] << нарисовать иконку навыка + имя навыка
\ic[icon ID] << нарисовать иконку
\dp[image_name] << нарисовать изображение из папки 'System'
>> [WRITE TEXT] Написать текст
\map << нарисовать название карты
\nc[actor ID] << написать класс актера
\np[1 to 4 (order in party)] << написать имя актера в этом порядке
\nm[monster ID] << написать название существа
\nt[troop ID] << написать имя труппы (врагов)
\nw[weapon ID] << написать название оружия
\na[armor ID] << написать название доспеха
\ns[skill ID] << написать название навыка
\ni[item ID] << написать название вещи
\price[item ID] << написать цену вещи
>> [TEXT EFFECT] Текстовые эффекты
\fn (or) << поменять название шрифта
\fs << поменять размер шрифта
\delay[Delay] << поменять задержку текста по буквам (в кадрах, 60 кадров = около 1 секунды)
\ref << Reset Font Name
\res << Reset Font Size
\red << Reset text Delay
\b << вкл/выкл жирный шрифт
\i << вкл/выкл курсив
\sh << вкл/выкл тень текста
\lbl << вкл/выкл режим текста по буквам (по умолчанию ВКЛ)
>> [NAME BOX & FACE] Поле имени и лицо
\nb[Name] << показать поле имени в текущем окне сообщения
\rnb[Name] (or) $nms._name = 'Name' << повторить поле имени:
поле имени с этим именем будет снова повторяться в следующих сообщениях
до сообщения с \nb[Name] или ввода \rnb[]
\sd[side] (or) $nms.side = side << Change Face Side:
(0: Left Side Normal Face | -1: Right Side Normal Face)
(1: Left Side Neo Face | 2: Right Side Neo Face)
$nms.color = [Red,Green,Blue] << сменить текст шрифта имени:
Put RGB Color in, e.g. [255,100,200]
\fa[face_file_name, face_index] (or) \fa[face_file_name, face_index, new_side]
<< нарисовать новое лицо во время показа сообщения~
face_file_name: имя изображения лица
face_index: указатель лица на изображении (0 - 7)
new_side: сторона, с которой хотите отобразить лицо
>> [SOUND] Звук
\se[filename] << играть звуковой эффект
\me[filename] << играть музыкальный эффект
\bgm[filename] << игррать фоновую музыку
\typ << вкл/выкл звук печатаемого текста
>> [Misc.] Разное
\cb << вкл/выкл возможность пропуска игроком текста путем нажатия[Enter]
\nl << начать новую строку
\sc[x] << создать пустое место длиной x пикселей
\w[x] << ждать x кадров
\c[#XXXXXX] << Use Hex Color for text
>> VX DEFAULT MESSAGE FEATURES
\v[variable ID] << написать значение переменной
\n[actor ID] << написать имя актера
\c << сменить цвет текста (Color ID is from Down-right corner in Windowskin)
\g << показать окно золота
\. << ждать 15 кадров (около 1/4 секунды)
\| << ждать 60 кадров (около 1 секунды)
\! << ждать нажатия игроком кнопки, чтобы продолжить сообщение
\> << пропустить вывод по буквам в текущей строке
\< << остановить 'пропуск вывода по буквам' а текущей строке
\^ << немедленно закрыть окно сообщения
\\ << написать '\'
=end
class Window_Base
#
# [START] SETUP SCRIPT PART
#
#
# ? MESSAGE SYSTEM
#
NMS_FONT_NAME = Font.default_name # имя шрифта по умолчанию
NMS_FONT_SIZE = 20 # размер шрифта по умолчанию
# COLOR_ID is from Windowskin image in down-right corder
NMS_ITEM_NAME_COLOR_ID = 5
NMS_WEAPON_NAME_COLOR_ID = 10
NMS_ARMOR_NAME_COLOR_ID = 4
NMS_SKILL_NAME_COLOR_ID = 2
NMS_DELAY_PER_LETTER = 0 # задержка между буквами при показе текста по буквам
# задержка в кадрах, 60 кадров = 1 секунда
# $nms.text_delay = (number)
TEXT_X_PLUS = 0 # двигать текст по горизонтали
CHOICE_INPUT_X_PLUS = 0
# двигать текст вариантов выбора и текст ввода чисел по горизонтали
# [NEW SETTING] #
NMS_MSGWIN_X = 0 # окно сообщений X по умолчанию
# $nms.msg_x = (number)
NMS_MSGWIN_WIDTH = 640 # ширина окна сообщений по умолчанию
# $nms.msg_w = (number)
NMS_MSGWIN_MIN_HEIGHT = 128 # высота окна сообщений по умолчанию и минимальная
# $nms.msg_h_user = (number)
NMS_MAX_LINE = 4 # максимальное число строк сообщения на странице
# $nms.max_line = (number)
NMS_GET_NEXT_LINE = false # брать сообщения из следующей команды сообщения, если поле не заполнено полностью
# $nms.next_msg = true/false
NMS_MSG_BACK = "MessageBack" # имя файла фонового изображения сообщения (для 'Dim Background' Message)
# (должно быть в папке 'System')
# $nms.mback = 'Image Name'
NMS_MSG_BACK_OPACITY = 255 # непрозрачность фона сообщения
# $nms.mback_opac = (0 - 255)
NMS_TEXT_SCROLL = false # использовать вертикальную прокрутку текста?
# $nms.txt_scrl = true/false
NMS_TEXT_AUTO_CUT = false # текст автоматически начнет новую строку, если эта строка заполнена
# (Some bug, может резать слова посередине..)
# $nms.txt_cut = true/false
NMS_TEXT_AUTO_SCROLL_HORIZONTAL = false # текст автоматически прокручивается влево, если строка заполнена
# не работает, если NMS_TEXT_AUTO_CUT равно true
# $nms.txt_scrl_hori = true/false
NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY = 1 # задержка прокрутки (в кадрах)
# $nms.txt_scrl_hori_delay = (number)
NMS_USER_NEW_LINE = false # текст идет на другую строку ТОЛЬКО при вводе \nl
# (удобно для Text Auto Cut)
# $nms.txt_unl = true/false
NMS_REMOVE_LIST = [] # список текста, который Вы хотите убрать из сообщения
# например, NMS_REMOVE_LIST = ']
# уберет из текста 'test' и '[MS]' перед показом сообщения
# Обратите внимание, что эта функция НЕ различает строчные и прописные буквы.
#
# ? FACE SYSTEM
#
#
# ** BOTH FACE SYSTEMS SETUP
#
DEFAULT_FACE_SIDE = 0 # Сторона лица по умолчанию в начале игры~
# (0: Left Side Normal Face | -1: Right Side Normal Face)
# (1: Left Side Neo Face | 2: Right Side Neo Face)
# $nms.side = (side no.)
FACE_X_PLUS = 0 # двигать лицо по горизонтали (влево: -, вправо: +)
FACE_Y_PLUS = 0 # двигать лицо по вертикали (вверх: -, вниз: +)
MOVE_TEXT = true # (true/false)
# двигать текст вправо от лица при показе лица слева.
#
# **SHOW FACE EFFECT
# * For both Face Systems *
#
FADE_EFFECT = true # вкл/выкл эффект затухания (true/false)
# $nms.face_fade = true/false
FADE_SPEED = 20 # скорость эффекта затухания изображения лица
FADE_ONLY_FIRST = true # использовать эффект затухания только в первом окне сообщения?
MOVE_EFFECT = true # Turn on/off "move in" effect (true/false)
# $nms.face_move = true/false
MOVE_SPEED = 10 # Speed up face's "move in" effect by increase this number
MOVE_ONLY_FIRST = true # Use Move Effect only in first message window?
FADE_MOVE_WHEN_USE_NEW_FACE = true
# Use Fade and Move effect when change Face graphic
# (In case using FADE_ONLY_FIRST and MOVE_ONLY_FIRST)
#
# ** NEO FACE SYSTEM
#
EightFaces_File = false
# использовать 8 лиц в файле (или) 1 лицо в файле (true/false)
#
# ** ANIMATED FACE SYSTEM
#
ANIMATE_FACE_DELAY = 6 # Face animate every _ frame
# $nms.animf_delay = (number)
ANIMATE_FACE_CONTINUE = false # продолжить анимацию лица после остановки написания текста?
# $nms.animf_cont = (true/false)
#
# ? NAME BOX SYSTEM
#
NAMEBOX_SKIN = 'Window' # Windowskin of Name Box (In folder 'Graphics/System')
NAMEBOX_OPACITY = 255 # непрозрачность поля имени при использовании сообщения с 'обычным фоном'
# (Lowest 0 - 255 Highest)
NAMEBOX_OPACITY_DIM_BG = 0 # непрозрачность поля имени при 'размытом фоне'
NAMEBOX_OPACITY_NO_BG = 0 # непрозрачность поля имени при 'прозрачном' фоне
NAMEBOX_BACK_OPACITY = 180 # фоновая непрозрачность поля имени
NAMEBOX_X_PLUS_NOR = 100 # Additional Name Box X [Horizontal] for Normal Face Name Box
NAMEBOX_X_PLUS_NEO = 180 # Additional Name Box X for Neo Face Name Box
NAMEBOX_Y_PLUS = -9 # Move Name Box & Text Vertically
NAMEBOX_Y_PLUS_TOP = 140
# Move Name Box & Text Vertically if message box is on Top
NAMEBOX_TEXT_FONT = Font.default_name # название шрифта текста имени
NAMEBOX_TEXT_SIZE = Font.default_size # размер шрифта текста имени
NAMEBOX_TEXT_HEIGHT_PLUS = 2 # увеличить высоту текста имени (For Big Size Text)
NAMEBOX_TEXT_BOLD = false # текст в поле имени - курсивом
NAMEBOX_TEXT_OUTLINE = false # Make Black Outline around Text (Good with Opacity = 0)
NAMEBOX_TEXT_DEFAULT_COLOR = [255,255,255]#[255,255,255] # [Red,Green,Blue]: Name Text Color (RGB)
# You can easily find color code for RGB (Red Green Blue) color in Google
# You are allow to change color in game by call script:
# $nms.color = [Red,Green,Blue]
NAMEBOX_TEXT_AFTER_NAME = "" # добавить текст после имени, для отключения оставьте "".
NAMEBOX_BOX_WIDTH_PLUS = 6 # увеличить ширину поля имени
NAMEBOX_BOX_HEIGHT_PLUS = 7 # увеличить высоту поля имени
MOVE_NAMEBOX = true
# (true/false) двигать поле текста вправо при показе лица справа.
#
# ? TEXT TYPING SOUND SYSTEM
#
TYPING_SOUND = false # использовать звук печатающей машинки?
# $nms.typ_se = true/false
TYPING_SOUND_FILE = 'Open1'
# имя файла звука печати (должен быть в папке 'Audio/SE')
# $nms.typ_file = 'filename'
TYPING_SOUND_VOLUME = 40 # громкость звука печати
# $nms.typ_vol = 0 - 100
TYPING_SOUND_SKIP = 4
# сколько кадров пропустить перед новым проигрыванием звука печати?
# $nms.typ_skip = (число кадров)
#
# [END] SETUP SCRIPT PART
#
end
$worale = {} if $worale == nil
$worale["NMS"] = true
class Window_Message < Window_Selectable
#
# ? ALIAS
#
alias wor_nms_winmsg_ini initialize
def initialize
wor_nms_winmsg_ini
$nms = $game_message
contents.font.name = $nms.nms_fontname
contents.font.size = $nms.nms_fontsize
@face = Sprite.new
@face.z = self.z + 5
@nametxt = Sprite.new
@nametxt.z = self.z + 15
@namebox = nil
@ori_x = 0
@name_text = nil
@showtime = 0 # To check if this is first time it shows message (For face)
@face_data = Array.new(3)
@face_data_old = Array.new(3)
#NMS 2++
self.width = $nms.msg_w
self.height = $nms.msg_h
update_window_size(true)
self.x = $nms.msg_x
@typse_count = 0
@delay_text = 0
@no_press_input = false
@biggest_text_height = 0
@all_text_width = 0
@animf_dl = 0 # Animation Face Delay
@animf = false # Using Animation Face?
@animf_ind = 0 # Animation Face Index
@pop = nil # Pop ID
end
#
# ? ??
#
def dispose
super
dispose_gold_window
dispose_number_input_window
dispose_back_sprite
end
#
# ? EDITED
#
def update
super
if self.visible == true
update_back_sprite
update_gold_window
update_number_input_window
update_show_fast
update_window_size
update_animate_face if @animf
@typse_count -= 1 if @typse_count > 0
if @name_text != nil
draw_name(@name_text,self.x,self.y)
end
if @face.bitmap != nil
# UPDATE FADE IN EFFECT
if @face.opacity < 255
@face.opacity += FADE_SPEED
end
# UPDATE MOVE IN EFFECT
if $nms.face_move and @ori_x != @face.x
if (@ori_x > @face.x and @face.x + MOVE_SPEED < @ori_x) or (@ori_x < @face.x and @face.x - MOVE_SPEED > @ori_x)
@face.x += MOVE_SPEED if @ori_x > @face.x
@face.x -= MOVE_SPEED if @ori_x < @face.x
else
@face.x = @ori_x
end
end
end
end
unless @opening or @closing
if @wait_count > 0
@wait_count -= 1
elsif self.pause
input_pause
elsif self.active
input_choice
elsif @number_input_window.visible
input_number
elsif @text != nil
if @delay_text > 0
@delay_text -= 1
else
update_message
end
elsif continue?
@showtime += 1
start_message
open
$game_message.visible = true
else
close
@showtime = 0
if @face.bitmap != nil
@face.bitmap.dispose
end
clear_namebox if @namebox != nil
$game_message.visible = @closing
end
end
end
#
# ? NEW
#
def update_window_size(direct = false, create_bitmap = true)
if (self.width != $nms.msg_w or self.height != $nms.msg_h) or direct
self.width = $nms.msg_w if $nms.msg_w > 32
self.height = $nms.msg_h if $nms.msg_h > 32
create_contents if create_bitmap
end
end
#
# ? ???????????
#
def create_gold_window
@gold_window = Window_Gold.new(384, 0)
@gold_window.openness = 0
end
#
# ? ????????????
#
def create_number_input_window
@number_input_window = Window_NumberInput.new
@number_input_window.visible = false
end
#
# ? ??????????
#
def create_back_sprite
@back_sprite = Sprite.new
@back_sprite.bitmap = @old_mback = Cache.system($game_message.mback)
@back_sprite.opacity = @old_mback_opac = $game_message.mback_opac
@back_sprite.visible = (@background == 1)
@back_sprite.z = 190
end
#
# ? ???????????
#
def dispose_gold_window
@gold_window.dispose
end
#
# ? ????????????
#
def dispose_number_input_window
@number_input_window.dispose
end
#
# ? ??????????
#
def dispose_back_sprite
@back_sprite.dispose
end
#
# ? ???????????
#
def update_gold_window
@gold_window.update
end
#
# ? ????????????
#
def update_number_input_window
@number_input_window.update
end
#
# ? ??????????
#
def update_back_sprite
@back_sprite.visible = (@background == 1)
@back_sprite.y = y - 16
@back_sprite.opacity = $nms.mback_opac > openness ? openness : $nms.mback_opac
@back_sprite.update
end
#
# ? ?????????
#
def update_show_fast
if self.pause or self.openness < 255
@show_fast = false
elsif Input.trigger?(Input::C) and @wait_count < 2 and !@no_press_input
@show_fast = true
elsif not Input.press?(Input::C)
@show_fast = false
end
if @show_fast and @wait_count > 0
@wait_count -= 1
end
end
#
# ? ????????????????????
#
def continue?
return true if $game_message.num_input_variable_id > 0
return false if $game_message.texts.empty?
if self.openness > 0 and not $game_temp.in_battle
return false if @background != $game_message.background
return false if @position != $game_message.position
end
return true
end
#
# ? EDITED: NMS 2.2+
#
def start_message
@all_text_width = 0
@pop = nil
@text = ""
@text_line = $game_message.texts.size < $game_message.max_line ? $game_message.texts.size + 1 : MAX_LINE + 1
for i in 0...$game_message.texts.size
# Change " " to "" (Spacing for choice)
@text += "" if i >= $game_message.choice_start
@text += $game_message.texts.clone + "\x00"
end
@item_max = $game_message.choice_max
convert_special_characters
reset_window
update_window_size
new_page
end
#
# ? EDITED
#
def new_page
@animf = false
contents.clear
if @face.bitmap != nil
@face.bitmap.dispose
end
if $game_message.face_name.empty?
@contents_x = TEXT_X_PLUS
else
nms_draw_new_face
# CHECK FOR MOVE EFFECT
@ori_x = @face.x
if $nms.face_move and ((MOVE_ONLY_FIRST and @showtime <= 1) or (MOVE_ONLY_FIRST == false))
if $game_message.side == 0 or $game_message.side == 1
@face.x = 0 - @face.width
else
@face.x = Graphics.width
end
end
@contents_x = get_x_face
end
@main_contents_x = @contents_x
@contents_y = 0
@line_count = 0
@typse_count = 0
@show_fast = false
@line_show_fast = false
@pause_skip = false
contents.font.color = text_color(0)
@contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 00
if @old_mback != Cache.system($nms.mback) or @old_mback_opac != $nms.mback_opac
dispose_back_sprite; create_back_sprite
end
@no_press_input = false
self.oy = 0
end
#
# ? EDITED
#
def new_line
biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH
@contents_y += biggest
if $nms.txt_scrl and @contents_y >= contents.height and @text != ""
rect = Rect.new(0, biggest, contents.width, contents.height - biggest)
cont_s = Bitmap.new(contents.width,contents.height)
cont_s.blt(0, 0, contents, rect)
rect_s = Rect.new(0,0,contents.width,contents.height)
contents.clear_rect(0, 0, contents.width, contents.height)
contents.blt(0, 0, cont_s, rect_s)
@contents_y = rect.height
cont_s.dispose
@show_fast = false
@no_press_input = true
end
@contents_x = @main_contents_x
@contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 0
@biggest_text_height = WLH
@line_count += 1
@line_show_fast = false
end
#
# ? EDITED
#
def convert_special_characters
clear_namebox if @namebox != nil
# Woratana's :: Quick Text
@text.gsub!(/\\QT\[([0-9]+)\]/i) { $nms.qt[$1.to_i] }
#
# DEFAULT FEATURES
#
@text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
@text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
@text.gsub!(/\\C\[(.*?)\]/i) { "\x01{#{$1}}" }
@text.gsub!(/\\G/i) { "\x02" }
@text.gsub!(/\\\./) { "\x03" }
@text.gsub!(/\\\|/) { "\x04" }
@text.gsub!(/\\!/) { "\x05" }
@text.gsub!(/\\>/) { "\x06" }
@text.gsub!(/\\</) { "\x07" }
@text.gsub!(/\\\^/) { "\x08" }
@text.gsub!(/\\\\/) { "\\" }
#
# * NMS FEATURES!!
#
# Woratana's :: Draw Weapon Name + Icon
@text.gsub!(/\\DW\[([0-9]+)\]/i) { "\x83[#{$data_weapons[$1.to_i].icon_index}]\x01{#{NMS_WEAPON_NAME_COLOR_ID}}\\nw[#{$1.to_i}]\x01{#{$nms.last_color}}"}
# Woratana's :: Draw Item Name + Icon
@text.gsub!(/\\DI\[([0-9]+)\]/i) { "\x83[#{$data_items[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ni[#{$1.to_i}]\x01{#{$nms.last_color}}" }
# Woratana's :: Draw Armor Name + Icon
@text.gsub!(/\\DA\[([0-9]+)\]/i) { "\x83[#{$data_armors[$1.to_i].icon_index}]\x01{#{NMS_ARMOR_NAME_COLOR_ID}}\\na[#{$1.to_i}]\x01{#{$nms.last_color}}"}
# Woratana's :: Draw Skill Name + Icon
@text.gsub!(/\\DS\[([0-9]+)\]/i) { "\x83[#{$data_skills[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ns[#{$1.to_i}]\x01{#{$nms.last_color}}"}
# Woratana's :: Call Animation
@text.gsub!(/\\ANI\[([0-9]+)\]/i) { "\x80[#{$1}]" }
# Woratana's :: Call Balloon
@text.gsub!(/\\BAL\[([0-9]+)\]/i) { "\x81[#{$1}]" }
# Woratana's :: Call Common Event
@text.gsub!(/\\CE\[([0-9]+)\]/i) { "\x82[#{$1}]" }
# Woratana's :: Draw Icon
@text.gsub!(/\\IC\[([0-9]+)\]/i) { "\x83[#{$1}]" }
# Woratana's :: Map Name
@text.gsub!(/\\MAP/i) { nms_get_map_name }
# Woratana's :: Actor Class Name
@text.gsub!(/\\NC\[([0-9]+)\]/i) { $data_classes[$game_actors[$1.to_i].class_id].name }
# Woratana's :: Party Actor Name
@text.gsub!(/\\NP\[([0-9]+)\]/i) { $game_party.members[($1.to_i - 1)].name }
# Woratana's :: Monster Name
@text.gsub!(/\\NM\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name }
# Woratana's :: Troop Name
@text.gsub!(/\\NT\[([0-9]+)\]/i) { $data_troops[$1.to_i].name }
# Woratana's :: Item Name
@text.gsub!(/\\NI\[([0-9]+)\]/i) { $data_items[$1.to_i].name }
# Woratana's :: Weapon Name
@text.gsub!(/\\NW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name }
# Woratana's :: Armor Name
@text.gsub!(/\\NA\[([0-9]+)\]/i) { $data_armors[$1.to_i].name }
# Woratana's :: Skill Name
@text.gsub!(/\\NS\[([0-9]+)\]/i) { $data_skills[$1.to_i].name }
# Woratana's :: Item Price
@text.gsub!(/\\PRICE\[([0-9]+)\]/i) { $data_items[$1.to_i].price.to_s }
# Woratana's :: Font Name Change
@text.gsub!(/\\FN\[(.*?)\]/i) { "\x84[#{$1}]" }
# Woratana's :: Font Size Change
@text.gsub!(/\\FS\[(.*?)\]/i) { "\x85[#{$1}]" }
# Woratana's :: Reset Font Name
@text.gsub!(/\\REF/i) { "\x86" }
# Woratana's :: Reset Font Size
@text.gsub!(/\\RES/i) { "\x87" }
# Woratana's :: BOLD Text
@text.gsub!(/\\B/i) { "\x88" }
# Woratana's :: ITALIC Text
@text.gsub!(/\\I/i) { "\x89" }
# Woratana's :: Text DELAY
@text.gsub!(/\\DELAY\[([0-9]+)\]/i) { "\x90[#{$1}]"}
# Woratana's :: Reset Text Delay
@text.gsub!(/\\RED/i) { "\x91" }
# Woratana's :: Turn On/Off Letter by Letter
@text.gsub!(/\\LBL/i) { "\x92" }
# Woratana's NeoFace System
@text.scan(/\\SD\[([-,0-9]+)\]/i)
if $1.to_s != ""
$game_message.side = $1.to_i
@text.sub!(/\\SD\[([-,0-9]+)\]/i) {}
end
# Woratana's :: Name Box
@text.scan(/\\NB\[(.*?)\]/i)
if $1.to_s != ""
n_text = $1.to_s.gsub(/\x01\{(.*?)\}/i) {} # Clear If there's Color
@name_text = n_text
@text.sub!(/\\NB\[(.*?)\]/i) {}
end
# Woratana's :: Repeat Name Box
@text.gsub!(/\\RNB\[(.*?)\]/i) do
$game_message._name = $1.to_s
a = ""
end
# NMS 2++
# Woratana's :: SHADOW Text
@text.gsub!(/\\SH/i) { "\x93" }
# Woratana's :: Cancel Skip Text Button
@text.gsub!(/\\CB/i) { "\x94" }
# Woratana's :: Wait X Frame
@text.gsub!(/\\W\[([0-9]+)\]/i) { "\x95[#{$1}]" }
# Woratana's :: Add Space X Pixel
@text.gsub!(/\\SC\[([0-9]+)\]/i) { "\x96[#{$1}]" }
# Woratana's :: Play SE
@text.gsub!(/\\SE\[(.*?)\]/i) { "\x97[#{$1}]" }
# Woratana's :: Play ME
@text.gsub!(/\\ME\[(.*?)\]/i) { "\x98[#{$1}]" }
# Woratana's :: Play BGM
@text.gsub!(/\\BGM\[(.*?)\]/i) { "\x99[#{$1}]" }
# Woratana's :: Start New Line
@text.gsub!(/\\NL/i) { "\x09" }
# Woratana's :: Turn ON/OFF Typing Sound
@text.gsub!(/\\TYP/i) { "\x10" }
# Woratana's :: Draw Picture
@text.gsub!(/\\DP\[(.*?)\]/i) { "\x11[#{$1}]" }
# Woratana's :: Draw Face
@text.gsub!(/\\FA\{(.*?)\}/i) { "\x12{#{$1}}" }
# Woratana's :: Temporary Width
@text.scan(/\\WW\[([-,0-9]+)\]/i)
if $1.to_s != ''
$nms.msg_temp_w = $1.to_i
@text.sub!(/\\WW\[([-,0-9]+)\]/i) {}
end
# Woratana's :: Temporary Height
@text.scan(/\\WH\[([-,0-9]+)\]/i)
if $1.to_s != ''
$nms.msg_temp_h = $1.to_i
@text.sub!(/\\WH\[([-,0-9]+)\]/i) {}
end
# Woratana's :: Temporary X
@text.scan(/\\WX\[([-,0-9]+)\]/i)
if $1.to_s != ''
$nms.msg_temp_x = $1.to_i
@text.sub!(/\\WX\[([-,0-9]+)\]/i) {}
end
# Woratana's :: Temporary Y
@text.scan(/\\WY\[([-,0-9]+)\]/i)
if $1.to_s != ''
$nms.msg_temp_y = $1.to_i
@text.sub!(/\\WY\[([-,0-9]+)\]/i) {}
end
# Woratana's :: Remove text list
NMS_REMOVE_LIST.each {|i| @text.gsub!(/#{i}/i) {} }
# Woratana's :: Pop Text
@text.scan(/\\P\[(.*?)\]/i)
if $1.to_s != ""
@pop = $1.to_i
contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname
contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize
a = @text.split(/\x00/)
for i in 0..(a.size - 1)
text_width = contents.text_size(a).width
@all_text_width = text_width if @all_text_width < text_width
end
nms_draw_new_face
if @face.bitmap != nil
if get_x_face == 0 and MOVE_TEXT
@all_text_width += (@face.width + TEXT_X_PLUS)
else
@all_text_width += get_x_face
end
@face.bitmap.dispose
@face.bitmap = nil
end
@text.sub!(/\\P\[(.*?)\]/i) {}
end
@name_text = $game_message._name if @name_text == nil and $game_message._name != ""
end
#
# ? EDIT: NMS 2.2++
#
def reset_window
@background = $game_message.background
@position = $game_message.position
if @background == 0
self.opacity = 255
else
self.opacity = 0
end
# Calculate Window X/Y and Size depends on Pop or normal message
if @pop != nil
$nms.msg_h = [((@text_line * WLH) +
, $nms.msg_h_user].min$nms.msg_w = @all_text_width + 32
case @pop
when 0 # Player
set_window_xy($game_player)
when -1 # This Event
set_window_xy($game_map.events[$game_message.event_id])
else # Event ID
set_window_xy($game_map.events[@pop])
end
else
$nms.msg_h = ((((@text_line * WLH) +
> $nms.msg_h_user) and ($nms.txt_scrl == false)) ? ((@text_line * WLH) +
: $nms.msg_h_user$nms.msg_w = NMS_MSGWIN_WIDTH
self.x = $nms.msg_x
case @position
when 0 # Down
self.y = 0
@gold_window.y = 360
when 1 # Middle
self.y = ((Graphics.height - $nms.msg_h) / 2)
@gold_window.y = 0
when 2 # Up
self.y = Graphics.height - $nms.msg_h
@gold_window.y = 0
end
end
# Temporary Size & Position
if !$nms.msg_temp_w.nil?
$nms.msg_w = $nms.msg_temp_w
$nms.msg_temp_w = nil
end
if !$nms.msg_temp_h.nil?
$nms.msg_h = $nms.msg_temp_h
$nms.msg_temp_h = nil
end
if !$nms.msg_temp_x.nil?
self.x = $nms.msg_temp_x
$nms.msg_temp_x = nil
end
if !$nms.msg_temp_y.nil?
self.y = $nms.msg_temp_y
$nms.msg_temp_y = nil
end
# Fix Window Position if it's out of screen
self.x = 0 if self.x < 0
self.x = Graphics.width - $nms.msg_w if (self.x + $nms.msg_w) > Graphics.width
self.y = 0 if self.y < 0
self.y = Graphics.height - $nms.msg_h if (self.y + $nms.msg_h) > Graphics.height
end
#
# ? SET Window XY for Pop Message
#
def set_window_xy(chara)
char_x = chara.screen_x
char_y = chara.screen_y
self.x = char_x - ($nms.msg_w / 2)
self.y = ((char_y - 32 - $nms.msg_h) >= 0) ? (char_y - 32 - $nms.msg_h) : (char_y + 32)
end
#
# ? ????????
#
def terminate_message
self.active = false
self.pause = false
self.index = -1
@gold_window.close
@number_input_window.active = false
@number_input_window.visible = false
$game_message.main_proc.call if $game_message.main_proc != nil
$game_message.clear
end
#
# ? EDITED
#
def update_message
loop do
c = @text.slice!(/./m)
case c
when nil
finish_message
break
when "\x00"
new_line if !$nms.txt_unl
if @line_count >= $game_message.max_line
unless @text.empty?
self.pause = true
break
end
end
when "\x80"
@text.sub!(/\[([0-9]+)\]/, "")
$game_map.events[$game_message.event_id].animation_id = $1.to_i
when "\x81"
@text.sub!(/\[([0-9]+)\]/, "")
$game_map.events[$game_message.event_id].balloon_id = $1.to_i
when "\x82"
@text.sub!(/\[([0-9]+)\]/, "")
a = $game_map.interpreter.params[0]
$game_map.interpreter.params[0] = $1.to_i
$game_map.interpreter.command_117
$game_map.interpreter.params[0] = a
when "\x83"
@text.sub!(/\[([0-9]+)\]/, "")
bitmap = Cache.system("Iconset")
icon_index = $1.to_i
# Check for Auto Cut
new_line if $nms.txt_cut and (@contents_x + 24 > contents.width)
# Draw ICON
draw_icon(icon_index, @contents_x, @contents_y, true)
@contents_x += 24
when "\x84"
@text.sub!(/\[(.*?)\]/, "")
$nms.nms_fontname = $1.to_s
next
when "\x85"
@text.sub!(/\[([0-9]+)\]/, "")
$nms.nms_fontsize = $1.to_i; next
when "\x86"
$nms.nms_fontname = NMS_FONT_NAME; next
when "\x87"
$nms.nms_fontsize = NMS_FONT_SIZE; next
when "\x88"
contents.font.bold = contents.font.bold == true ? false : true
next
when "\x89"
contents.font.italic = contents.font.italic == true ? false : true
next
when "\x90"
@text.sub!(/\[([0-9]+)\]/, "")
$nms.text_delay = $1.to_i; next
when "\x91"
$nms.text_delay = NMS_DELAY_PER_LETTER; next
when "\x92"
$nms.lbl = $nms.lbl == true ? false : true; next
when "\x93"
contents.font.shadow = contents.font.shadow == true ? false : true
next
when "\x94"
@no_press_input = @no_press_input == true ? false : true
next
when "\x95"
@text.sub!(/\[([0-9]+)\]/, "")
@wait_count = $1.to_i
break
when "\x96"
@text.sub!(/\[([0-9]+)\]/, "")
@contents_x += $1.to_i
next
when "\x97"
@text.sub!(/\[(.*?)\]/, "")
RPG::SE.new($1).play
when "\x98"
@text.sub!(/\[(.*?)\]/, "")
RPG::ME.new($1).play
when "\x99"
@text.sub!(/\[(.*?)\]/, "")
RPG::BGM.new($1).play
when "\x09"
new_line
when "\x10"
$nms.typ_se = !$nms.typ_se
when "\x11"
@text.sub!(/\[(.*?)\]/, "")
bitmap = Cache.system($1.to_s)
rect = Rect.new(0,0,0,0)
rect.width = bitmap.width
rect.height = bitmap.height
# Check for Auto Cut & Scroll
if (@contents_x + bitmap.width > contents.width)
if $nms.txt_cut; new_line
elsif $nms.txt_scrl_hori; nms_scroll_hori(bitmap.width)
end
end
# Draw Image
self.contents.blt(@contents_x, @contents_y, bitmap, rect)
@contents_x += bitmap.width
@biggest_text_height = bitmap.height if bitmap.height > @biggest_text_height
bitmap.dispose
when "\x12"
@text.sub!(/\{(.*?)\}/, "")
a = $1.to_s.split(',')
$nms.face_name = a[0]
$nms.face_index = a[1].to_i
$nms.side = a[2].to_i unless a[2].nil?
nms_draw_new_face
@ori_x = @face.x
when "\x01"
@text.sub!(/\{(.*?)\}/, "")
color_code = $1.to_s
if color_code.include?('#')
color_code.sub!(/([0123456789ABCDEF]+)/, "")
contents.font.color = get_hex($1)
else
$nms.last_color = color_code.to_i
contents.font.color = text_color($nms.last_color)
end
next
when "\x02"
@gold_window.refresh
@gold_window.open
when "\x03"
@wait_count = 15
break
when "\x04"
@wait_count = 60
break
when "\x05"
self.pause = true
break
when "\x06"
@line_show_fast = true
when "\x07"
@line_show_fast = false
when "\x08"
@pause_skip = true
else
contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname
contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize
c_width = contents.text_size(c).width
# Check for Text Cut & Scroll Horizontal
if (@contents_x + c_width > contents.width)
if $nms.txt_cut; new_line
elsif $nms.txt_scrl_hori
nms_scroll_hori(c_width)
@wait_count = $nms.txt_scrl_hori_delay
@text = c + @text
return
end
end
nms_line_height = contents.text_size(c).height
contents.draw_text(@contents_x, @contents_y, 40, nms_line_height, c)
@contents_x += c_width
# Change Biggest Text Height
@biggest_text_height = nms_line_height if nms_line_height > @biggest_text_height
# Play Typing Sound
if $nms.typ_se and @typse_count <= 0
RPG::SE.new($nms.typ_file, $nms.typ_vol).play
@typse_count += $nms.typ_skip
end
#Show Fast & Text Delay
@show_fast = true if $nms.lbl == false
@delay_text += $nms.text_delay
end
break unless @show_fast or @line_show_fast
end
end
#
# ? ??????????
#
def finish_message
if $game_message.choice_max > 0
start_choice
elsif $game_message.num_input_variable_id > 0
start_number_input
elsif @pause_skip
terminate_message
else
self.pause = true
end
@wait_count = 10
@text = nil
end
#
# ? ??????
#
def start_choice
self.active = true
self.index = 0
end
#
# ? EDITED
#
def start_number_input
digits_max = $game_message.num_input_digits_max
number = $game_variables[$game_message.num_input_variable_id]
@number_input_window.digits_max = digits_max
@number_input_window.number = number
if $game_message.face_name.empty? or MOVE_TEXT == false
@number_input_window.x = x - 23
else
case $game_message.side
when 0
@number_input_window.x = (x + 112) - 23
when 1
@number_input_window.x = (x + text_x) - 23
when 2
@number_input_window.x = x - 23
when -1
@number_input_window.x = x - 23
end
end
@number_input_window.x += CHOICE_INPUT_X_PLUS
@number_input_window.y = y + @contents_y
@number_input_window.active = true
@number_input_window.visible = true
@number_input_window.update
end
#
# ? EDITED
#
def update_cursor
if @index >= 0
if $game_message.face_name.empty?
x = TEXT_X_PLUS
else
x = get_x_face
end
y = ($game_message.choice_start + @index) * WLH
# CHANGE WIDTH OF CURSOR FOR CHOICE SELECT
if $game_message.face_name.empty? or MOVE_TEXT == false
facesize = x
else
facesize = get_x_face
facesize += @face.width if $game_message.side == 2
facesize += @face.width + 16 if $game_message.side == -1
end
self.cursor_rect.set(x, y, contents.width - facesize, WLH)
else
self.cursor_rect.empty
end
end
#
# ? ?????????
#
def input_pause
if Input.trigger?(Input::
self.pause = false
if @text != nil and not @text.empty?
new_page if @line_count >= $game_message.max_line
else
terminate_message
end
end
end
#
# ? ????????
#
def input_choice
if Input.trigger?(Input::
if $game_message.choice_cancel_type > 0
Sound.play_cancel
$game_message.choice_proc.call($game_message.choice_cancel_type - 1)
terminate_message
end
elsif Input.trigger?(Input::C)
Sound.play_decision
$game_message.choice_proc.call(self.index)
terminate_message
end
end
#
# ? ???????
#
def input_number
if Input.trigger?(Input::C)
Sound.play_decision
$game_variables[$game_message.num_input_variable_id] =
@number_input_window.number
$game_map.need_refresh = true
terminate_message
end
end
end
#==============================================================================
# NMS +[ADD ON]+ WINDOW_MESSAGE_CLASS
#
#==============================================================================
class Window_Message < Window_Selectable
# Return X for Text
def get_x_face
if MOVE_TEXT == true
case $game_message.side
when 0
return 112 + TEXT_X_PLUS
when 1
return text_x
when 2
return TEXT_X_PLUS
else
return TEXT_X_PLUS
end
else
return TEXT_X_PLUS
end
end
def text_x
return @face.width + TEXT_X_PLUS
end
# Clear Name Box & Name Text
def clear_namebox
@nametxt.bitmap.dispose
@namebox.dispose
@namebox = nil
@name_text = nil
end
def nms_get_map_name
mapdata = load_data("Data/MapInfos.rvdata")
map_id = $game_map.map_id
return mapdata[map_id].name
end
#
# DRAW FACE [Both Systems] METHOD
#
def draw_face2(face_name, x, y, index = 0, animf = false, animf_index = 0, animf_max = 1, nofade = false)
if animf
# Use Animated Face
bitmap = Cache.face(face_name)
rect = Rect.new(0,0,0,0)
rect.width = (bitmap.width / animf_max)
rect.height = bitmap.height
rect.x = animf_index * rect.width
rect.y = 0
@face.bitmap = Bitmap.new(rect.width,rect.height)
@face.bitmap.blt(0,0,bitmap,rect)
bitmap.dispose
elsif $game_message.side == 0 or $game_message.side == -1 or EightFaces_File
# USE 8 FACES PER FILE
bitmap = Cache.face(face_name)
rect = Rect.new(0,0,0,0)
rect.width = (bitmap.width / 4)
rect.height = (bitmap.height / 2)
rect.x = index % 4 * rect.width
rect.y = index / 4 * rect.height
@face.bitmap = Bitmap.new(rect.width,rect.height)
@face.bitmap.blt(0,0,bitmap,rect)
bitmap.dispose
else
# USE 1 FACES PER FILE
@face.bitmap = Cache.face(face_name)
end
# SET X/Y OF FACE DEPENDS ON FACE SIDE
if $game_message.side == 1
@face.mirror = false
@face.x = x + 6
@face.y = y - 6 + height - @face.height
elsif $game_message.side == 2
@face.mirror = true
@face.x = x + ((self.width - 6) - @face.width)
@face.y = y - 6 + height - @face.height
elsif $game_message.side == 0
@face.mirror = false
@face.x = x + 16
@face.y = y - 16 + height - @face.height
elsif $game_message.side == -1
@face.mirror = true
@face.x = x + self.contents.width - @face.width + 16
@face.y = y - 16 + height - @face.height
end
@face.x += FACE_X_PLUS
@face.y += FACE_Y_PLUS
@face_data = [face_name, index, $game_message.side]
if @face_data != @face_data_old and FADE_MOVE_WHEN_USE_NEW_FACE; @showtime = 1; @face_data_old = @face_data; end
@face.opacity = 0 if !nofade and ($nms.face_fade == true and ((FADE_ONLY_FIRST and @showtime <= 1) or (FADE_ONLY_FIRST == false)))
end
#
# DRAW NAME BOX METHOD
#
def draw_name(name,x,y)
name = name + NAMEBOX_TEXT_AFTER_NAME
a = Bitmap.new(33,33)
a.font.name = NAMEBOX_TEXT_FONT
a.font.size = NAMEBOX_TEXT_SIZE
rect = a.text_size(name)
a.dispose
@nametxt.bitmap = Bitmap.new(16 + rect.width, rect.height + NAMEBOX_TEXT_HEIGHT_PLUS)
@nametxt.x = x + 8
if $game_message.side == 1 or $game_message.side == 2
@nametxt.x += NAMEBOX_X_PLUS_NEO
else
@nametxt.x += NAMEBOX_X_PLUS_NOR
end
@nametxt.y = y - 20 + ($game_message.position == 0 ? NAMEBOX_Y_PLUS_TOP : NAMEBOX_Y_PLUS)
namebox_x_plus = ($game_message.side == 1 or $game_message.side == 2) ? NAMEBOX_X_PLUS_NEO : NAMEBOX_X_PLUS_NOR
@nametxt.x = ((self.x + $nms.msg_w) - namebox_x_plus - @nametxt.width) if MOVE_NAMEBOX and ($game_message.side == 2 or $game_message.side == -1)
@namebox = Window.new
@namebox.windowskin = Cache.system(NAMEBOX_SKIN)
@namebox.z = self.z + 10
@namebox.opacity = case @background
when 0; NAMEBOX_OPACITY
when 1; NAMEBOX_OPACITY_DIM_BG
when 2; NAMEBOX_OPACITY_NO_BG
end
@namebox.back_opacity = NAMEBOX_BACK_OPACITY
@namebox.openness = 255
@namebox.x = @nametxt.x - NAMEBOX_BOX_WIDTH_PLUS
@namebox.y = @nametxt.y - NAMEBOX_BOX_HEIGHT_PLUS
@namebox.width = @nametxt.bitmap.width + (NAMEBOX_BOX_WIDTH_PLUS * 2)
@namebox.height = @nametxt.bitmap.height + (NAMEBOX_BOX_HEIGHT_PLUS * 2)
# Fixed position bug
@namebox.x = 0 if @namebox.x < 0
@namebox.x = (Graphics.width - @namebox.width) if (@namebox.x + @namebox.width) > Graphics.width
@nametxt.bitmap.font.name = NAMEBOX_TEXT_FONT
@nametxt.bitmap.font.size = NAMEBOX_TEXT_SIZE
@nametxt.bitmap.font.bold = NAMEBOX_TEXT_BOLD
if NAMEBOX_TEXT_OUTLINE == true
# MAKE TEXT OUTLINE
old_shadow = @nametxt.bitmap.font.shadow
@nametxt.bitmap.font.color = Color.new(0,0,0)
@nametxt.bitmap.draw_text(0,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
@nametxt.bitmap.draw_text(0,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
@nametxt.bitmap.draw_text(2,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
@nametxt.bitmap.draw_text(2,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
@nametxt.bitmap.font.shadow = old_shadow
end
@nametxt.bitmap.font.color = Color.new($game_message.color[0],$game_message.color[1],$game_message.color[2])
@nametxt.bitmap.draw_text(1,1,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
@name_text = nil
end
#
# DRAW NEW FACE
#
def nms_draw_new_face
# Setup Face Name / Index
name = $game_message.face_name
index = $game_message.face_index
animf_test = name.sub(/\[([0-9]+)\]/, "")
# Animated?
@animf = $1.to_i > 0 ? true : false
@animf_maxind = $1.to_i
@animf_ind = 0
@animf_dl = $nms.animf_delay
# CALL DRAW FACE METHOD
draw_face2(name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind)
end
#
# UPDATE ANIMATION FACE
#
def update_animate_face
if (!self.pause or $nms.animf_cont)
@animf_dl -= 1
if @animf_dl <= 0
@animf_ind = (@animf_ind + 1) % @animf_maxind
@animf_dl = $nms.animf_delay
draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true)
end
elsif @animf_ind != 0
@animf_ind = 0
draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true)
end
end
#
# SCROLL TEXT HORIZONTAL
#
def nms_scroll_hori(scr_width)
biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH
rect = Rect.new(0, @contents_y, contents.width, biggest)
bitmap = Bitmap.new(rect.width, rect.height)
bitmap.blt(0, 0, contents, rect)
contents.clear_rect(rect)
rect = Rect.new(0, 0, rect.width, rect.height)
contents.blt(0 - scr_width, @contents_y, bitmap, rect)
contents.clear_rect(0, 0, @face.width, @face.height) if @face.bitmap != nil
bitmap.dispose
@contents_x = @contents_x - scr_width
end
#
# GET HEX COLOR by RPG & ERZENGEL
#
def get_hex(n)
red = 0
green = 0
blue = 0
if n.size != 6
print("Hex triplets must be six characters long!\nNormal color will be used.")
return normal_color
end
for i in 1..6
sliced = n.slice!(/./m)
value = hexconvert(sliced)
case i
when 1; red += value * 16
when 2; red += value
when 3; green += value * 16
when 4; green += value
when 5; blue += value * 16
when 6; blue += value
end
end
return Color.new(red, green, blue)
end
def hexconvert(n)
case n
when "0"; return 0
when "1"; return 1
when "2"; return 2
when "3"; return 3
when "4"; return 4
when "5"; return 5
when "6"; return 6
when "7"; return 7
when "8"; return 8
when "9"; return 9
when "A"; return 10
when "B"; return 11
when "C"; return 12
when "D"; return 13
when "E"; return 14
when "F";return 15
else; return -1
end
end
end # CLASS END
#==============================================================================
# NMS +[ADD ON]+ OTHER CLASS
#
#==============================================================================
# STORE variables here~*
class Game_Message
attr_accessor :nms_fontname, :nms_fontsize, :event_id, :side, :color, :_name,
:last_color, :text_delay, :lbl, :msg_w, :msg_h, :msg_x, :max_line, :nms_face_name,
:nms_face_index, :next_msg, :typ_se, :typ_file, :typ_skip, :typ_vol, :mback, :mback_opac,
:qt, :txt_scrl, :msg_h_user, :animf_delay, :animf_cont, :txt_cut, :txt_unl, :txt_scrl_hori,
:txt_scrl_hori_delay, :face_fade, :face_move, :msg_temp_y, :msg_temp_x, :msg_temp_h,
:msg_temp_w
alias wor_nms_old_ini initialize
def initialize
create_nms_data
wor_nms_old_ini
end
def create_nms_data
# NFS
@side = Window_Base::DEFAULT_FACE_SIDE
@_name = ""
@color = Window_Base::NAMEBOX_TEXT_DEFAULT_COLOR
# NMS
@last_color = 0
@nms_fontname = Window_Base::NMS_FONT_NAME
@nms_fontsize = Window_Base::NMS_FONT_SIZE
@event_id = 0
@text_delay = Window_Base::NMS_DELAY_PER_LETTER
@lbl = true
@msg_w = Window_Base::NMS_MSGWIN_WIDTH
@msg_h = @msg_h_user = Window_Base::NMS_MSGWIN_MIN_HEIGHT
@msg_x = Window_Base::NMS_MSGWIN_X
@max_line = Window_Base::NMS_MAX_LINE
@nms_face_name = ""
@nms_face_index = 1
@next_msg = false
@typ_se = Window_Base::TYPING_SOUND
@typ_file = Window_Base::TYPING_SOUND_FILE
@typ_skip = Window_Base::TYPING_SOUND_SKIP
@typ_vol = Window_Base::TYPING_SOUND_VOLUME
@mback = Window_Base::NMS_MSG_BACK
@mback_opac = Window_Base::NMS_MSG_BACK_OPACITY
@qt = Array.new
@txt_scrl = Window_Base::NMS_TEXT_SCROLL
@animf_delay = Window_Base::ANIMATE_FACE_DELAY
@animf_cont = Window_Base::ANIMATE_FACE_CONTINUE
@txt_cut = Window_Base::NMS_TEXT_AUTO_CUT
@txt_scrl_hori = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL
@txt_scrl_hori_delay = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY
@txt_unl = Window_Base::NMS_USER_NEW_LINE
@face_fade = Window_Base::FADE_EFFECT
@face_move = Window_Base::MOVE_EFFECT
@msg_temp_x = nil
@msg_temp_y = nil
@msg_temp_h = nil
@msg_temp_w = nil
end
end
class Game_Map
attr_accessor :interpreter
end
class Game_Interpreter
attr_accessor :params
end
class Game_Interpreter
def command_101
unless $game_message.busy
$game_message.event_id = @event_id
$game_message.face_name = @params[0]
$game_message.face_index = @params[1]
$game_message.background = @params[2]
$game_message.position = @params[3]
next_msg = true
loop do
if @list[@index].code == 101 and $game_message.max_line > $game_message.texts.size and next_msg
@index += 1
else
break
end
next_msg = false
while @list[@index].code == 401 and $game_message.max_line > $game_message.texts.size
next_msg = $game_message.next_msg
$game_message.texts.push(@list[@index].parameters[0])
@index += 1
end
end
if @list[@index].code == 102
setup_choices(@list[@index].parameters)
elsif @list[@index].code == 103
setup_num_input(@list[@index].parameters)
end
set_message_waiting
end
return false
end
def setup_choices(params)
if $game_message.texts.size <= $game_message.max_line - params[0].size
$game_message.choice_start = $game_message.texts.size
$game_message.choice_max = params[0].size
for s in params[0]
$game_message.texts.push(s)
end
$game_message.choice_cancel_type = params[1]
$game_message.choice_proc = Proc.new { |n| @branch[@indent] = n }
@index += 1
end
end
end
В сообщение добавить \sd[2] и указать лицо героя (оно должно лежать в папку Face)(внимание изображения из стандартного набора не будут работать если они будут идти пачкой)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
