Интересный кстати баг, скорость с которой бьет пустой посох зависит от расстояния. На макс. дистанции он бьет ощутимо медленнее чем в упор.
Огромное спасибо ребят за тему! Вот еще кусочек с интернета Всё округляется вниz. Всё округляется в конце операции. =========== STATS =========== Обzор: 4.0 + Ловкость / 25 + Раzум / 25 Скорость: 12 + Ловкость / 5 Штраф от нагруzки = 1 * (нагруzка / сила). =========== SPELLS =========== Раzум прибавляется к скиллу для всех подсчётов. Если скилл + раzум меньше 30 или больше 255, то наблюдаются баги. Дальность (кроме телепорта) = баzовая + скилл / 30. Для подсчёта длительности обычно испольzуется следующая переменная. TimeVar (скилл -> секунды): 30 = 1.00 40 = 1.28 50 = 1.64 60 = 2.09 70 = 2.68 80 = 3.43 90 = 4.39 100 = 5.63 110 = 7.21 120 = 9.23 130 = 11.81 140 = 15.12 150 = 19.36 160 = 24.78 170 = 31.72 180 = 40.60 190 = 51.98 200 = 66.53 210 = 85.17 220 = 109.03 230 = 139.56 240 = 178.65 250 = 228.69 Огненная стрела Ледяная стрела Каменная стрела Молния Мана: 3 (Молния = 10) Дальность: 6 Урон min: скилл / 6 Урон max: скилл / 3 Огненный шар Мана: 30 Дальность: 9 Урон min: скилл / 7 * 1.6 Урон max: скилл / 7 * 3 Огненная стена Мана: 30 Дальность: 5 Время: 7.0 + скилл / 10 Урон min: скилл / 30 Урон max: скилл / 10 Ядовитый туман Мана: 30 Дальность: 5 Время: 5 * TimeVar Урон: 2 + (скилл - 40) / 20 Град Мана: 100 Дальность: 9 Время: 5.0 + скилл / 10 Урон min: скилл / 3 Урон max: скилл Радужная молния Мана: 80 Дальность: 6 Цели: 2 + (скилл - 30) / 20 Урон min: скилл / 6 Урон max: скилл / 2 Невидимость Мана: 100 Дальность: 4 Время: скилл - 30 Каменная стена Мана: 15 Дальность: 5 Время: 7.0 + скилл / 10 Каменное проклятие Мана: 40 Дальность: 4 Время: (скилл - 30) * 0.3 Лечение Мана: 5 Дальность: 5 Эффект min: скилл / 30 * 8 Эффект max: скилл / 30 * 16 Благословление Мана: 10 Дальность: 4 Время: 10 * TimeVar Эффект: 20 + (скилл - 30) * 0.8 Ускорение Мана: 10 Дальность: 4 Время: 10 * TimeVar Эффект: 1 + (скилл - 30) / 15 Вампириzм Мана: 20 Дальность: 6 Урон min: скилл / 7.5 Урон max: скилл / 5 Zов Мана: 100 Уровень: 1 + (скилл - 30) / 30 Перерождение Мана: 30 Дальность: 4 Телепорт Мана: 60 Дальность: 1 + (скилл - 30) / 3 Магический щит Мана: 10 Время: 20 * TimeVar Эффект: скилл / 10 Zащита от огня Zащита от воды Zащита от воzдуха Zащита от zемли Мана: 40 Дальность: 4 Время: 15 * TimeVar Эффект: (скилл - 30) / 2
А можно пожалуйста зависимость скорости анимации юнитов от скорости игры и зависимость скорости в параметре юнита от скорости перехода его на соседнюю клетку (без учёта стоимости прохождения, ну там вверх/вниз/по разным типам тайлов)? В А2 внутриигровое время исчисляется "тиками", при нормальной скорости игры в одной внешней секунде 50 тиков.
x = (manaCost*количество_параметра) — для обычных параметров x = (manaCost*максимальный_урон) — для damage* x = (manaCost*навык_заклинания) — для castSpell, причём само заклинание тут явно не учитывается. Сама формула: ((x / 70.0)^1.5)+1.0) * x * 50.0 Оригинал: Код: while ( v10 ) { if ( *(v10 + 60) == 1 ) // "price" { *(v6 + 28) = *(v10 + 64); return *(v6 + 28); } v3 = sub_540941(v10); // см. ниже v8 += v3; if ( v7 ) { v4 = v7; v7 = *v7; v10 = *(v4 + 8); } else { v10 = 0; } } *(v6 + 28) += sub_540A33(v8); // см. ещё ниже ======================================================================================================== // Тут рассчёт базовой стоимости отдельного параметра // **(dword_6D06E4 + 0x1C * *(this + 0x3C) + 0xC) = manaCost для параметра из data.bin int __thiscall sub_540941(int this) { int result; // eax@2 if ( *(this + 0x3C) ) { if ( *(this + 0x3C) == 41 ) // "castspell" { result = **(dword_6D06E4 + 0x1C * *(this + 0x3C) + 0xC) * *(this + 0x42); } else { // это условие сработает, если параметр НЕ является одним из: if ( *(this + 0x3C) != 44 // "damagefire" && *(this + 0x3C) != 45 // "damagewater" && *(this + 0x3C) != 46 // "damageair" && *(this + 0x3C) != 47 // "damageearth" && *(this + 0x3C) != 48 ) // "damageastral" result = **(dword_6D06E4 + 0x1C * *(this + 0x3C) + 0xC) * *(this + 0x40); else // а вот тут "damage*" параметры result = **(dword_6D06E4 + 0x1C * *(this + 0x3C) + 0xC) * (*(this + 0x41) + *(this + 0x40)); } } else { result = 0; } return result; } ======================================================================================================== // А этим мы считаем итоговую цену signed __int64 __cdecl sub_540A33(signed int a1) { return (signed __int64)((pow(1.5, (double)a1 / 70.0) + 1.0) * (double)a1 * 50.0); } При рассчёте сначала складываются базовые цены для всех параметров, потом к ним применяется эта формула и полученное значение прибавляется к базовой цене вещи (цена_из_itemname*цена_из_материала*цена_из_класса).
Еще раз спасибо за тему! Я уж боялся запороть магазин... А тут все так подробно и прозрачно. Теперь инвентарь нужно будет править. Зато может кузницу сделаю чтобы заколдовывать доспехи/оружие... Конечно идея не претендует на оригинальность но что-то новое ана принесет при должном балансе.
Кто нибудь имеет описание формата файлов ресурсов (.RES)? Поделитесь пожалуйста. В частности интересует: По прочтению начального заголовка и списка элементов GRAPHICS.RES, получаю 2 типа элементов. Те, в которых адрес и размер некоего блока, имеют в сигнатуре расширение .bmp, .pkt и тд, и те, которые без расширения. Те, что без расширения, какую информацию содержат? Такое ощущение, что некий Id и счетчик.
Короч про атаку/защиту мне никто не подскажет... Может кто формулу частоты и количества регенерации знает?
про атаку защиту чтобы формулу вывести эмпирически, нужна куча статистических данных ясно лишь что важна их разница полный реген 3 минуты игровых - в движении, в покое 1 минута, у мобов - индивидуально (не как у игрока) в кп говорят рег выше - не пробовал
Подскажите, если кто знает, как рассчитываются резисты к магии, длительность и сила (у мага) Спасибо!
Чот поржал. Не проще ли было ебануть что то вроде: Код: if (*(this + 0x3C) < 44 || *(this + 0x3C) > 48) Зукс наркоман.