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

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 8 мес. назад #112005 от Doctor_Bug
Ребят, иногда мне охота изучать сам редактор RPG Maker, в моей случаи АСЕ. Сюда я буду выкладывать (скорее всего не часто) свои внимательные наблюдения как работают некоторые механизмы движка, разбор формулов и их применений.

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

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

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

Описание параметров шанса попаданий и шанса уклонений:
ВНИМАНИЕ: Спойлер!


код:
ВНИМАНИЕ: Спойлер!


алгоритм:
ВНИМАНИЕ: Спойлер!

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 8 мес. назад пользователем Doctor_Bug.
Спасибо сказали: AnnTenna, Джекил, idavollr, Xavioheos

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Композитор 2 место
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112012 от idavollr

Doctor_Bug пишет: Ребят, иногда мне охота изучать сам редактор RPG Maker, в моей случаи АСЕ. Сюда я буду выкладывать (скорее всего не часто) свои внимательные наблюдения как работают некоторые механизмы движка, разбор формулов и их применений.

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

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

код:

ВНИМАНИЕ: Спойлер!


алгоритм:
ВНИМАНИЕ: Спойлер!


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

Разброс Hit Rate, Evasion Rate и Magic Evasion Rate может быть от -1 до 1, потому что в самой базе данных их можно выставлять от -100% до 100, я правильно понимаю?

Her Third Eye is drawing me closer
Последнее редактирование: 6 года 11 мес. назад пользователем idavollr.
Спасибо сказали: Джекил, Doctor_Bug

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112016 от Doctor_Bug
Да Ид получается значения эти умножаются 0.01
Так и выходит, что к примеру шанс попадания 95% конвертируется в 0.95. Ну а дальше все идет в формуле. Так сейчас выложу наблюдения связанное с крит. ударами.

Да эти параметры: Hit Rate, Evasion Rate и Magic Evasion Rate принимают одз (область допустимых значений) (-1,1)

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: Джекил

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112017 от Doctor_Bug
Что ж, давайте разберем как работает шанс критического удара и шанс уклонения от критического удара. Принцип похож как и с шансом попадания и шансом уклонения:

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

Описание:
ВНИМАНИЕ: Спойлер!


код:
ВНИМАНИЕ: Спойлер!


алгоритм:
ВНИМАНИЕ: Спойлер!

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: Джекил

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад #112018 от 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:

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Композитор 2 место
Больше
6 года 11 мес. назад #112020 от idavollr

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад #112021 от Doctor_Bug
Создать для это скрипт. Если конечно уже не существует подобный скрипт $_$

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112176 от Doctor_Bug
Сегодняшний разбор будет затрагивать такие параметры как контратаки и магического отражения. Они же "Шанс контратаки" (CNT) и "Шанс отражения магии" (MRF)

Описание:
ВНИМАНИЕ: Спойлер!


код:
ВНИМАНИЕ: Спойлер!


алгоритм:
ВНИМАНИЕ: Спойлер!

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Писатель Тестер
Больше
6 года 11 мес. назад #112180 от Джекил
Архиполезная тема. Поможет нам помнить, что и зачем. Я бы только добавил конкретики в название, например(Роль параметров в мэйкере)

Не мертво то, что в вечности пребудет. со смертью времени и смерть умрет.
Спасибо сказали: Doctor_Bug

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112191 от Doctor_Bug
Сегодняшняя тема будет затрагивать регенерация хп, мп и тп. Разберем как работают эти параметры в скриптах Мейкера.

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

Описание:
ВНИМАНИЕ: Спойлер!


Код:
ВНИМАНИЕ: Спойлер!


Алгоритм:
ВНИМАНИЕ: Спойлер!


Теперь мы разобрали вторичные характеристики полностью. На сегодня это все =)

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: VarVarKa

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112213 от Doctor_Bug
Сегодняшний разбор будет интересен, мы разберем метод где обрабатывается большинство вычислений связанный с уроном (дамагом)

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

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

Код:
ВНИМАНИЕ: Спойлер!


Алгоритм:
ВНИМАНИЕ: Спойлер!

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: VarVarKa

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112220 от Doctor_Bug
Ну что же, давайте займемся познанием мира магии, тонкости ваших навыков в магическом понимании. Продолжаем разбор метода make_damage_value. Переходим наследующую строчку к методу item_element_rate.

Описание:
ВНИМАНИЕ: Спойлер!


Алгоритм:
ВНИМАНИЕ: Спойлер!


Код:
ВНИМАНИЕ: Спойлер!

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: VarVarKa, anyon175

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

2 место Победитель конкурса 3 место Проект месяца 1 место Проект года 3 место Поддержка Фонда Победитель конкурса маппинга Организатор конкурсов Разработчик Проект года 1 место Оратор Проект месяца 3 место Проект месяца 2 место
Больше
6 года 11 мес. назад #112230 от PanzerCat
Раз ты заинтересовался механизмом работы мейкера, посмотри, как работает мукерский рандом?
Такое ощущение, что даже при шансах 90% слишком много проигрышей.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Композитор 2 место
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112231 от idavollr

PanzerCat пишет: Раз ты заинтересовался механизмом работы мейкера, посмотри, как работает мукерский рандом?
Такое ощущение, что даже при шансах 90% слишком много проигрышей.


Про рандом было сказано выше уже. Это шанс попадания, уворота, и так далее. В мукере натуральный рандом, он работает просто через генерацию случайного числа. Отсюда и все проблемы с ним.

Her Third Eye is drawing me closer
Последнее редактирование: 6 года 11 мес. назад пользователем idavollr.
Спасибо сказали: Doctor_Bug

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад #112232 от Doctor_Bug
Я могу написать не большой скрипт который заменит простой рандом на средне арифметическое значение. Ну по крайне мере, те места могу заменить, которые знаю =)

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место 3 место 3 место в Кодировке Программист Ruby Проект месяца 1 место Ветеран
Больше
6 года 11 мес. назад - 6 года 11 мес. назад #112289 от Doctor_Bug
В этой теме мы будем добивать метод make_damage_value. Посмотрим какие еще параметры входят в этот метод.

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

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

Описание:
ВНИМАНИЕ: Спойлер!


Алгоритм:
ВНИМАНИЕ: Спойлер!


Код:
ВНИМАНИЕ: Спойлер!


Вывод:
ВНИМАНИЕ: Спойлер!


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

Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 6 года 11 мес. назад пользователем Doctor_Bug.
Спасибо сказали: Snake Fightin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.146 секунд
Работает на Kunena форум