Сопротивление бесполезно! [VX Ace]
Информация:
Автор: EvilCat
Версия мейкера: VX ACE.
Тип: Изменение боевой системы
Описание:
Показывает игроку, что эта игра не о боях. Вместо всех разнообразных возможностей в бою (атаковать, защищаться, предметы, магия, шмагия...) даёт случайный набор бесполезных навыков типа "Наорать" или "Ткнуть палкой".
Особенности:
- Бесполезные навыки можно создать в любом количестве в обычной базе данных.
- Набор доступных для применения бесполезных навыков меняется в начале каждого хода.
- Скрипт настроен так, чтобы выбирать в начале хода 4 бесполезных навыка, но можно настроить другое число.
Установка:
1. Добавить в список скриптов новую страницу с кодом, находящимся под спойлером.
2. Создать в базе данных во вкладке Terms новый Skill Type, которым будут отмечаться бесполезные навыки.
2.1. Если номер бесполезного типа не 3, то зайти в добавленный код и поменять строчку № 3 "MEEK_TERM=3", чтобы в параметре был нужный номер термина.
3. Зайти в базе данных на вкладку Skills и добавить там несколько бесполезных навыков. Строго говоря, они не обязаны совсем уж ничего не делать, но выбор цели для них в скрипте не предусмотрен. Я ограничиваюсь проставлением высочайшей скорости и забавного художественного текста.
4. Настройка (по желанию):
4.1. Если хочется, изменить количество навыков, доступных каждый ход: для этого нужно изменить число в строчке № 2 "MEEK_CHOICES=4".
4.2. Можно изменить название боевой опции, за которой скрываются бесполезные навыки. Оно в строчке № 4 "Meek='Атаковать' ".
5. Готово!
Код:
module Meek
MEEK_CHOICES=4
MEEK_TERM=3
Meek='Атаковать'
def self.meek_skills
generate_meek_skills unless @meek_skills
@meek_skills
end
def self.generate_meek_skills
return if @meek_skills
@meek_skills=[]
$data_skills.each do |skill|
@meek_skills.push(skill) if skill && skill.stype_id==MEEK_TERM
end
end
def self.generate_meek_choices(num=MEEK_CHOICES)
pool=meek_skills.dup
list=[];
num.times do
break if pool.length==0
key=rand(pool.length)
list.push(pool[key])
pool.delete_at(key)
end
list
end
end
class Window_ActorCommand
def make_command_list
return unless @actor
add_meek_commands # вместо всех остальных пунктов
end
def add_meek_commands
add_command(Meek::Meek, :meek)
end
end
class Window_BattleMeek < Window_BattleSkill
def initialize(help_window, info_viewport)
super(help_window, info_viewport)
@stype_id=Meek::MEEK_TERM # не используется по прямому назначению, но мало ли.
end
def make_item_list
# команды добавляются сценой боя и обновляются в начале раунда.
end
def select_last
select(0)
# нет смысла выбирать тот же навык, что в прошлый раз,
# потому что список оновляется.
end
def draw_skill_cost
# и цены у них нет.
end
# должно вызывается не в refresh, потому что то соответствует изменению
# изначальный условий, вроде действующего лица (актёра). пусть вызывается
# сценой в начале хода.
def refresh_meek_commands(num=Meek::MEEK_CHOICES)
@data=Meek.generate_meek_choices(num)
refresh
end
def enable?(item)
true
end
def draw_item(index)
skill = @data[index]
rect = item_rect(index)
draw_item_name(skill, rect.x, rect.y, enable?(skill))
# сокращённая версия обычного метода.
end
end
class Scene_Battle
alias :mk_create_all_windows :create_all_windows
alias :mk_battle_start :battle_start
alias :mk_turn_end :turn_end
def create_all_windows
mk_create_all_windows
create_meek_window
end
def create_meek_window
@meek_window = Window_BattleMeek.new(@help_window, @info_viewport)
@meek_window.set_handler(:ok, method(:on_meek_ok))
@meek_window.set_handler(:cancel, method(:on_meek_cancel))
@actor_command_window.set_handler(:meek, method(:command_meek))
end
def battle_start
@meek_window.refresh_meek_commands
mk_battle_start
end
def turn_end
@meek_window.refresh_meek_commands
mk_turn_end
end
def on_meek_ok
@skill = @meek_window.item
BattleManager.actor.input.set_skill(@skill.id)
BattleManager.actor.last_skill.object = @skill
if !@skill.need_selection?
@meek_window.hide
next_command
else
raise NotImplementedError.new("Meek skill selection")
end
end
def on_meek_cancel
@meek_window.hide
@actor_command_window.activate
end
def command_meek
@meek_window.actor = BattleManager.actor
@meek_window.show.activate
end
end
Что хотелось бы улучшить:
Помощь принимается. Честно говоря, мне сейчас просто лень дорабатывать %)
- Сделать, чтобы список бесполезных навыков создавался индивидуально для каждого персонажа, а не на всех один.
- Позволить выбор цели навыка, как с обычными навыками.
- Увеличить время показа сообщений для бесполезных навыков, чтобы успевать читать.
- Уменьшить размер окна выбора бесполезного навыка, чтобы оно не занимало лишнее место на экране. Их количество мы всё равно знаем заранее.