Понедельник, 25 Ноября 2024, 09:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Прогрессивное падение прироста действующей брони
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]
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг