Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Дотошность Доктора Бага (Механизмы мейкера Асе)

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 11 мес. назад #112005

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Ребят, иногда мне охота изучать сам редактор RPG Maker, в моей случаи АСЕ. Сюда я буду выкладывать (скорее всего не часто) свои внимательные наблюдения как работают некоторые механизмы движка, разбор формулов и их применений.

Так же особая благодарность Dmy за предоставленное инфо, описаний параметров. Ссылка на ресурс

Первое что хочу разобрать это шанс попаданий и шанс уклонений. Понять как система обрабатывает их, чтобы лучше понимать их механизм.

Первое я выложу сюда код, стандартный скрипты мейкера и второе это мое дотошное объяснения алгоритма работы. Мож кому и сгодиться ))

Описание параметров шанса попаданий и шанса уклонений:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 7 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Джекил, idavollr, Xavioheos

Дотошность Доктора Бага 4 года 11 мес. назад #112012

  • idavollr
  • idavollr аватар
  • Вне сайта
  • Мастер
  • ugly but honest
  • Сообщений: 201
  • Спасибо получено: 198
  • Композитор2 место
Doctor_Bug пишет:
Ребят, иногда мне охота изучать сам редактор RPG Maker, в моей случаи АСЕ. Сюда я буду выкладывать (скорее всего не часто) свои внимательные наблюдения как работают некоторые механизмы движка, разбор формулов и их применений.

Первое что хочу разобрать это шанс попаданий и шанс уклонений. Понять как система обрабатывает их, чтобы лучше понимать их механизм.

Первое я выложу сюда код, стандартный скрипты мейкера и второе это мое дотошное объяснения алгоритма работы. Мож кому и сгодиться ))

код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Спасибо, Баг. Крайне интересная тема, которой сам интересовался и пытался что-то нарыть. Довольно познавательно. Получается, что если каким-то образом модернизировать этот код, или дописать к нему модуль, то можно сделать механизм псевдорандома? Надо будет разобрать это дело на конкретных примерах, аж интересно стало, как оно реально действует.

Разброс Hit Rate, Evasion Rate и Magic Evasion Rate может быть от -1 до 1, потому что в самой базе данных их можно выставлять от -100% до 100, я правильно понимаю?
Her Third Eye is drawing me closer
Последнее редактирование: 4 года 11 мес. назад от idavollr.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил, Doctor_Bug

Дотошность Доктора Бага 4 года 11 мес. назад #112016

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Да Ид получается значения эти умножаются 0.01
Так и выходит, что к примеру шанс попадания 95% конвертируется в 0.95. Ну а дальше все идет в формуле. Так сейчас выложу наблюдения связанное с крит. ударами.

Да эти параметры: Hit Rate, Evasion Rate и Magic Evasion Rate принимают одз (область допустимых значений) (-1,1)
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 11 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил

Дотошность Доктора Бага 4 года 11 мес. назад #112017

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Что ж, давайте разберем как работает шанс критического удара и шанс уклонения от критического удара. Принцип похож как и с шансом попадания и шансом уклонения:

Здесь применяются:
Шанс критического удара (CRItical rate, CRI)
Шанс уклонения от критического удара (Critical EVasion rate, CEV)

Описание:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил

Дотошность Доктора Бага 4 года 11 мес. назад #112018

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Пример связанный с шансом попаданием и уклонением: Г (Герой), В (Враг)

Враг атакует героя.
Герой имеет вкладки класса такие параметры, как в прочем и сам враг:
Шанс попадания: 95%
Шанс уклонения: 5%

Враг атакует навыком который имеет тип эффекта "Физическая атака", шанс успеха (% успеха) имеет значение 100%. В нашем случаи урон не важен.

Далее происходит следующий алгоритм:

1. шанс успеха умножается на 0.01. Шанс успеха имеет одз (0, 100).
# rate = 100 * 0.01 = 1

2. Если навык имеет тип эффекта удара физический, то умножаем полученный результат на шанс попадания (в нашем случаи врага), который равняется 95% = 0.95
# rate = 1 * 0.95 = 0.95

3. Возвращаем получаемое число 0.95

4. Далее условие (одно из условий, их там два) будет давать истину если rand будет больше или равно значению 0.95
Напомню rand дает случайное число от 0 до 1.

5. Булевый результат (он же да, либо нет) помещаем в переменную @result.missed.

6. Далее идут подсчеты шанса уклонения героя от врага.
- Если навык врага имеет тип эффекта "физическая атака", то берем "шанс уклонения (eva)", иначе если тип эффекта навыка имеет "магическая атака", то берем "шанс уклонение от магии (mev)". Оба эти значения имеют одз (-1,1). В нашем случаи мы берем шанс уклонения 5% = 0.05

7. Далее с помощью rand снова получаем случайное число и если это число будет меньше 0.05, то выражение становится истинным. Результат помещаем в переменную @result.evaded, а также туда помещаем и предыдущий результат, а именно @result.missed.

8. Ну и напоследок. В методе hit?, если последние два выражения (хотя их 3) будут ложными, а это !@missed (@result.missed), !@evaded (@result.evaded), то враг попал по герою, иначе он промахнулся.

Ну как то так :mad:
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил, idavollr

Дотошность Доктора Бага 4 года 11 мес. назад #112020

  • idavollr
  • idavollr аватар
  • Вне сайта
  • Мастер
  • ugly but honest
  • Сообщений: 201
  • Спасибо получено: 198
  • Композитор2 место
Doctor_Bug пишет:
Пример связанный с шансом попаданием и уклонением: Г (Герой), В (Враг)

Враг атакует героя.
Герой имеет вкладки класса такие параметры, как в прочем и сам враг:
Шанс попадания: 95%
Шанс уклонения: 5%

Враг атакует навыком который имеет тип эффекта "Физическая атака", шанс успеха (% успеха) имеет значение 100%. В нашем случаи урон не важен.

Далее происходит следующий алгоритм:

1. шанс успеха умножается на 0.01. Шанс успеха имеет одз (0, 100).
# rate = 100 * 0.01 = 1

2. Если навык имеет тип эффекта удара физический, то умножаем полученный результат на шанс попадания (в нашем случаи врага), который равняется 95% = 0.95
# rate = 1 * 0.95 = 0.95

3. Возвращаем получаемое число 0.95

4. Далее условие (одно из условий, их там два) будет давать истину если rand будет больше или равно значению 0.95
Напомню rand дает случайное число от 0 до 1.

5. Булевый результат (он же да, либо нет) помещаем в переменную @result.missed.

6. Далее идут подсчеты шанса уклонения героя от врага.
- Если навык врага имеет тип эффекта "физическая атака", то берем "шанс уклонения (eva)", иначе если тип эффекта навыка имеет "магическая атака", то берем "шанс уклонение от магии (mev)". Оба эти значения имеют одз (-1,1). В нашем случаи мы берем шанс уклонения 5% = 0.05

7. Далее с помощью rand снова получаем случайное число и если это число будет меньше 0.05, то выражение становится истинным. Результат помещаем в переменную @result.evaded, а также туда помещаем и предыдущий результат, а именно @result.missed.

8. Ну и напоследок. В методе hit?, если последние два выражения (хотя их 3) будут ложными, а это !@missed (@result.missed), !@evaded (@result.evaded), то враг попал по герою, иначе он промахнулся.

Ну как то так :mad:

Натуральный рандом как он есть %). Интересно, а возможно ли какими-то скриптовыми путями заставить игру генерировать скажем среднее арифметическое из двух случайных чисел? Тогда по идее, значение будет стремиться к 50ти, и это значительно повысит возможности маниипуляции с рандомом. А ведь еще можно делать надстройки, когда к шансам добавляются значения.
Her Third Eye is drawing me closer
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил, Doctor_Bug

Дотошность Доктора Бага 4 года 11 мес. назад #112021

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Создать для это скрипт. Если конечно уже не существует подобный скрипт $_$
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.

Дотошность Доктора Бага 4 года 10 мес. назад #112176

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Сегодняшний разбор будет затрагивать такие параметры как контратаки и магического отражения. Они же "Шанс контратаки" (CNT) и "Шанс отражения магии" (MRF)

Описание:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.

Дотошность Доктора Бага 4 года 10 мес. назад #112180

  • Джекил
  • Джекил аватар
  • Вне сайта
  • Светлый дракон
  • Don't panic!
  • Сообщений: 655
  • Спасибо получено: 374
  • ПисательТестер
Архиполезная тема. Поможет нам помнить, что и зачем. Я бы только добавил конкретики в название, например(Роль параметров в мэйкере)
Не мертво то, что в вечности пребудет. со смертью времени и смерть умрет.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Doctor_Bug

Дотошность Доктора Бага 4 года 10 мес. назад #112191

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Сегодняшняя тема будет затрагивать регенерация хп, мп и тп. Разберем как работают эти параметры в скриптах Мейкера.

Скорость регенерации HP (HRG)
Скорость регенерации MP (MRG)
Скорость регенерации TP (TRG)

Описание:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Теперь мы разобрали вторичные характеристики полностью. На сегодня это все =)
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: VarVarKa

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112213

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Сегодняшний разбор будет интересен, мы разберем метод где обрабатывается большинство вычислений связанный с уроном (дамагом)

Будут затронуты такие параметры как:
Действия атрибутов (Эффект элемента)
Атрибуты атаки (Элемент атаки)
Наносимый физический урон (Получение физического урона) (pdr)
Наносимый магический урон (Получение магического урона) (mdr)
Степень эффекта восстановления (Эффект восстановления) (rec)
Критический удар (Про неё написан пост выше) (cri)
Разброс
Степень защитного эффекта (Эффективность защиты) (grd)

Но начнем все по порядку, каждый пост будет разбирать по отдельности некоторые части этого метода.

Код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: VarVarKa

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112220

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Ну что же, давайте займемся познанием мира магии, тонкости ваших навыков в магическом понимании. Продолжаем разбор метода make_damage_value. Переходим наследующую строчку к методу item_element_rate.

Описание:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: VarVarKa, anyon175

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112230

  • PanzerCat
  • PanzerCat аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 720
  • Спасибо получено: 962
  • 3 место2 место ОраторРазработчикОрганизатор конкурсовПроект месяца 2 местоПроект месяца 1 местоПобедитель конкурса маппингаПроект месяца 3 местоПроект года 3 место
Раз ты заинтересовался механизмом работы мейкера, посмотри, как работает мукерский рандом?
Такое ощущение, что даже при шансах 90% слишком много проигрышей.
Администратор запретил публиковать записи гостям.

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112231

  • idavollr
  • idavollr аватар
  • Вне сайта
  • Мастер
  • ugly but honest
  • Сообщений: 201
  • Спасибо получено: 198
  • Композитор2 место
PanzerCat пишет:
Раз ты заинтересовался механизмом работы мейкера, посмотри, как работает мукерский рандом?
Такое ощущение, что даже при шансах 90% слишком много проигрышей.

Про рандом было сказано выше уже. Это шанс попадания, уворота, и так далее. В мукере натуральный рандом, он работает просто через генерацию случайного числа. Отсюда и все проблемы с ним.
Her Third Eye is drawing me closer
Последнее редактирование: 4 года 10 мес. назад от idavollr.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Doctor_Bug

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112232

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
Я могу написать не большой скрипт который заменит простой рандом на средне арифметическое значение. Ну по крайне мере, те места могу заменить, которые знаю =)
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.

Дотошность Доктора Бага (Механизмы мейкера Асе) 4 года 10 мес. назад #112289

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Светлый дракон
  • Из горизонта события! ▪_■
  • Сообщений: 568
  • Спасибо получено: 880
  • Проект месяца 3 место3 местоВетеранПрограммист RubyПроект месяца 1 место3 место в Кодировке
В этой теме мы будем добивать метод make_damage_value. Посмотрим какие еще параметры входят в этот метод.

Наше значение value модифицируется различными параметрами, то приумножая, то приуменьшая собственное значение.

Сегодняшняя тема будет задевать такие параметры:

Описание:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Алгоритм:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Вывод:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Надеюсь мои разборы не покажутся слишком сложными, спасибо что уделили этому время.
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 10 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Snake Fightin
Время создания страницы: 0.796 секунд