Прогрессивное падение прироста действующей брони
| |
FunApple | Дата: Четверг, 21 Мая 2015, 14:06 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Всем трямки! Знаю, вопрос звучит страшно, но по другому я не придумал как это назвать =) Суть в следующем: игроку в описаниях предметов видим показатель "защита", являющийся неким целым числом от, допустим, 50 единиц. В действительности, формула нанесения урона по персонажу будет просчитываться банальным вычетом процента "защиты" из урона (например: урон 120, защиты 20% = нанесеный урон - 96ед.) Защита в процентах должна высчитываться из суммы показателей этих целых чисел с предметов, НО, необходима формула, при которой коэффициент прироста процента постепенно занижался, чем больше показатель защиты целым числом. Пример: 100ед. брони = 10% вычитаемого урона, 200ед. = 15% вычитаемого урона и т.д. Заранее благодарю за ответы.
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
|
|
| |
Леонид | Дата: Четверг, 21 Мая 2015, 14:29 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Как вариант, можно высчитывать как сумму первых n членов геометрической прогрессии. Просто по формуле, где, по приведенному выше примеру, b1-10, q-1/2, само число n (элемент прогрессии, до которого нужно найти сумму) - броня/100. Разве что с дробной степенью могут быть проблемы. Ничего проще и правильнее не придумал. Это если я правильно понял суть. То есть при 300ед. будет 17.5% вычитаемого урона, верно?
|
|
| |
FunApple | Дата: Четверг, 21 Мая 2015, 15:03 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Цитата Леонид ( ) То есть при 300ед. будет 17.5% вычитаемого урона, верно? Конкретные цифры уже будут выводиться только в процессе просчитывания баланса. Сейчас мне надо просто понять общую формулу для этого дела. А уже коэффициент падения прироста процента и другие величины будет редактироваться в формуле отдельно. Да, верно, при таком раскладе получится при значении 300 - 17,5%
Кстати говоря, очень яркий пример в EVE online, кто играл, знает как там просчитываются резисты у защиты: при наличии трех одинаковых модулей, установка одного дает, например, 50% резиста, при установке двух - 70%, трех - 76%, а четыре и вовсе не ставят, потому что никакой разницы заметно уже не будет.
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
Сообщение отредактировал FunApple - Четверг, 21 Мая 2015, 15:11 |
|
| |
OpenGOO | Дата: Четверг, 21 Мая 2015, 15:23 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Формула в общем виде (1-k^ед. брони)*100 % k < 1
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Четверг, 21 Мая 2015, 15:24 |
|
| |
Леонид | Дата: Четверг, 21 Мая 2015, 15:36 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Цитата OpenGOO ( ) (1-k^ед. брони)*100 % Разве это будет работать по такой системе, которую описал FunApple? Но суть сохраняется. Выглядит намного проще того, что я предложил.
|
|
| |
FunApple | Дата: Четверг, 21 Мая 2015, 16:00 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Цитата OpenGOO ( ) Формула в общем виде (1-k^ед. брони)*100 % k < 1 В принципе, очень даже неплохо выглядит, но уж больно прямолинейно:
Я изначально пробовал сделать по другой формуле (в делителе, естественно, ^1 можно убрать): клик Но, честно говоря, хочется получить что-то подобное (нужное черной линией): клик так будет куда проще задать в игре явный промежуток "среднего значения" защиты.
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
Сообщение отредактировал FunApple - Четверг, 21 Мая 2015, 15:50 |
|
| |
Леонид | Дата: Четверг, 21 Мая 2015, 16:43 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Цитата FunApple ( ) хочется получить что-то подобное То, что я предложил, так и будет выглядеть. b1*(q^n -1)/q-1 b1 - количество брони за первый "шаг", q - уменьшение "полезности" брони за один "шаг", n - броня/количество брони в одном "шаге". Пояснить, что я подразумеваю под шагом, довольно сложно, в описанном тобой примере это 100.
Добавлено (21 мая 2015, 16:43) --------------------------------------------- Вот что получается, если изменить коэффициенты. Если ещё поэкспериментировать с ними, то получится близко к тому, что ты хотел.
Сообщение отредактировал Леонид - Четверг, 21 Мая 2015, 16:44 |
|
| |
OpenGOO | Дата: Четверг, 21 Мая 2015, 16:46 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| FunApple, это логарифмическая функция, надо только коэффициент подбирать например при коэффициенте 0,993 при 100 будет 50%, а при 200 будет 75%
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
Tymonr | Дата: Четверг, 21 Мая 2015, 17:12 | Сообщение # 9 |
With OpenSource forever♥
Сейчас нет на сайте
| А что вы в школе на уроках математики делаете?
Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы. Как правильно задавать вопросы в технических форумах
|
|
| |
Valter | Дата: Четверг, 21 Мая 2015, 17:36 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Что сразу приходит в голову.
Общая формула кубической кривой: B(t) = (1-t)^3*P0 + 3t*(1-t)^2*P1 + 3*t^2*(1-t)*P2 + t^3*P3 (t от 0 до 1)
Ф-ла относительно твоих данных (то, что тебе нужно - чёрная линия на твоём рисунке): T = текущий уровень брони / максимальный (если текущий 10, а максимальный 200, то T = 1/20) L = предел к которому нужно стремится (у тебя на графике это 35)
3T*(1-T)^2*L + 3*T^2*(1-T)*L + t^3*L
Результат: http://s1.uploadpics.ru/images/Wy2ohslmxx.png
Добавлено (21 мая 2015, 17:36) --------------------------------------------- Цитата OpenGOO ( ) это логарифмическая функция Правильно заметил OpenGOO, проще представить в виде логарифмической функции. Хотя, конечно, возводить в большую степень, не супер решение, зато нагляднее кубической кривой)
Сообщение отредактировал Valter - Четверг, 21 Мая 2015, 18:03 |
|
| |
FunApple | Дата: Пятница, 22 Мая 2015, 10:23 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Цитата Леонид ( ) b1*(q^n -1)/q-1 Попробовал, но, видать, где-то что-то недопонял.. Получилось все с точностью до наоборот: картиночка (Uploadpics что-то не работает)
Цитата Tymonr ( ) А что вы в школе на уроках математики делаете? Школу я закончил не очень, а в шараге 90% лекций проспал. В противном случае, подобными вопросами здесь бы и не интересовался =)
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
|
|
| |
Леонид | Дата: Пятница, 22 Мая 2015, 10:52 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Цитата FunApple ( ) Получилось все с точностью до наоборот Так не нужно это значение от ста отнимать. Сам результат и будет процентом брони.
|
|
| |
FunApple | Дата: Пятница, 22 Мая 2015, 11:00 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| Цитата Леонид ( ) Так не нужно это значение от ста отнимать. Сам результат и будет процентом брони. Упс.. Забыл заголовок у графика сменить. Действующая формула на картинке находится сверху.
Цитата Valter ( ) 3T*(1-T)^2*L + 3*T^2*(1-T)*L + t^3*L Идеально! ^^
Хотя... По поводу идеальности сказать теперь трудно.. Начинаю понимать что баланс в такой системе брони будет никакой, ибо при небольших значениях слишком сильная разница в процентном соотношении...
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
Сообщение отредактировал FunApple - Пятница, 22 Мая 2015, 11:35 |
|
| |
OpenGOO | Дата: Пятница, 22 Мая 2015, 12:58 | Сообщение # 14 |
почти ветеран
Сейчас нет на сайте
| Упрости себе жизнь или создай таблицу или добавь процентную броню.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
FunApple | Дата: Пятница, 22 Мая 2015, 13:18 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| Цитата OpenGOO ( ) Упрости себе жизнь или создай таблицу или добавь процентную броню. Создавать таблицу соотношения числовых единиц к реальной процентной составляющей защиты? Как-никак, но чтобы все получилось ровненько, придется так или иначе ориентироваться на график, но тут есть маленькое НО: в игре шмот будет падать с рандомными характеристиками, не кратными той же десятке.. таблица в строк 150 - не радостная штука для оперирования ими, да и минус к производительности. Процентная броня - вариант изначально хороший - конечно удобно, когда все наглядно и без лишних подсчетов, но как будет это видеть пользователь? "у меня шляпа дает 3,14% дефа, и штаны 5,45%". Игроку ведь куда проще в шмотках видеть банальное числовое значение и уже ориентироваться только по нему: трусы с меньше 20 - не тру, больше 20 - сойдет, больше 30 - вообще тру. А общий процентный показатель просто отображать в статах персонажа. Вдобавок, пассивные навыки, например "увеличивающие защиту на на 5%", будет странно для игрока к 24,3% прибавлять 5%.
К тому же, я немного разобрался в формуле что дал Valter, теперь пробую играться с характеристиками.. Вроде неплохо, для начала.. Пока еще других составляющих к подсчету не добавилось..
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
Сообщение отредактировал FunApple - Пятница, 22 Мая 2015, 13:37 |
|
| |
OpenGOO | Дата: Пятница, 22 Мая 2015, 13:49 | Сообщение # 16 |
почти ветеран
Сейчас нет на сайте
| Цитата FunApple ( ) таблица в строк 150 - не радостная штука для оперирования ими, да и минус к производительности. Процентная броня - вариант изначально хороший - конечно удобно, когда все наглядно и без лишних подсчетов, но как будет это видеть пользователь? "у меня шляпа дает 3,14% дефа, и штаны 5,45%" Почему будет минус к производительности? Кто тебе запрещает исользовать систему например кратную 3 или 5 и т.д. Собрал 100 очков опыта защита 10% собрал еще 200 очков опыта (в сумме 300) уже 15%. У других это как то же работае, почему же у тебя должно быть иначе?
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
FunApple | Дата: Пятница, 22 Мая 2015, 14:13 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| Цитата OpenGOO ( ) Кто тебе запрещает исользовать систему например кратную 3 или 5 и т.д. Собрал 100 очков опыта защита 10% собрал еще 200 очков опыта (в сумме 300) уже 15%. Цитата FunApple ( ) в игре шмот будет падать с рандомными характеристиками, не кратными той же десятке.. rand(1;100).. чтобы каждый предмет был уникален, аля дъябло
Цитата OpenGOO ( ) Почему будет минус к производительности? Я не гуру в программировании, но разве будет быстрее найти нужный элемент в таблице, чем высчитать его одной формулой?
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
|
|
| |
pixeye | Дата: Пятница, 22 Мая 2015, 15:13 | Сообщение # 18 |
Red Winter Software
Сейчас нет на сайте
| Цитата FunApple ( ) "у меня шляпа дает 3,14% дефа, и штаны 5,45%". Игроку ведь куда проще в шмотках видеть банальное числовое значение и уже ориентироваться только по нему:
сейчас модно показывать какой процент от выбранного атрибута - например этот скил 50 % от атаки и в скобочках ( посчитанное число сколько это )
Цитата FunApple ( ) rand(1;100).. чтобы каждый предмет был уникален, аля дъябло
В диабло точно не так. Относительно честный рандом : берется массив объектов которые могут сейчас выпасть. Суммируются их шансы и умножается на random value. Таким образом более редкие вещи будут выпадать реже. Код float Choose (float[] probs) {
float total = 0;
foreach (float elem in probs) { total += elem; }
float randomPoint = Random.value * total;
for (int i= 0; i < probs.Length; i++) { if (randomPoint < probs[i]) { return i; } else { randomPoint -= probs[i]; } } return probs.Length - 1; }
Цитата FunApple ( ) Я не гуру в программировании, но разве будет быстрее найти нужный элемент в таблице, чем высчитать его одной формулой? Взять из рассчитанной таблицы быстрее, однако в маштабах современной производительности и игры в целом - это не имеет большого значения ( даже если рассчетов будет много ). Если упала производительность то шанс, что виноват код крайне мала - чаще из-за неоптимизированного, тяжежого контента возникают проблемы.
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
|
|
| |
FunApple | Дата: Пятница, 22 Мая 2015, 16:08 | Сообщение # 19 |
почетный гость
Сейчас нет на сайте
| Цитата pixeye ( ) сейчас модно показывать какой процент от выбранного атрибута - например этот скил 50 % от атаки и в скобочках Если на шмотках будут указаны проценты изначально, то фраза на умении "+5%" может вызвать вопросы.
Цитата pixeye ( ) В диабло точно не так. Относительно честный рандом : берется массив объектов которые могут сейчас выпасть. Суммируются их шансы и умножается на random value. Неправильно выразился: я имел ввиду не шанс выпадения редких предметов, а статы в предмете defRand(100;120), dmgRand(150;165) и т.д.
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
|
|
| |
OpenGOO | Дата: Пятница, 22 Мая 2015, 16:40 | Сообщение # 20 |
почти ветеран
Сейчас нет на сайте
| Тоже самое defRand(0.1;0.15) Хотя не вижу особого смысла мудрить с разбросом защиты, если есть разброс по дамагу.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
|