Перейти к содержимому


Фотография

(sfall) дополнения


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1246

#941 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 11 августа 2017 - 22:42

QUOTE (Fakeman)
А хотя бы временно можно давать дамаг?
Запилил на_поиграться в [Misc] переменную ExplosionAroundPortal.

QUOTE (Fakeman)
Просто витает одна идея как заставить метать гранаты не только по целям но и на пустые гексы рядом с непесями, вот тут передвижной объект дверь и выступает в качестве цели, единственное что попадая в цель(в дверь) нет дамага и нпс не агрятся.
Идея хорошая, но вряд ли прокнет. Слишком много переделывать.
Жертвы разбегаются после получения дамага от взрыва в дверь и не нападают. Можно и нужно выйти из боя, чтобы напали.

QUOTE (Fakeman)
И еще можешь растолковать на что именно влияет модификатор шанса в функциях roll_vs_skill/do_check, то что оно увеличивает/уменьшает шанс понятно, но хочется понять что оно там конкретно увеличивает/уменьшает?.
if (has_skill(source, skill) + modifier — random(1, 100)) < 0 then ROLL_FAILURE else ROLL_SUCCESS; // для ROLL_CRITICAL_SUCCESS/FAILURE училий чуть больше


#942 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 12 августа 2017 - 02:04

QUOTE

Жертвы разбегаются после получения дамага от взрыва в дверь и не нападают.

В смысле разбегаются) типа не знают кто атаковал?
Когда косит и взрывается рядом то вроде нормально не убегают.

Еще нужна под. функция на курсор мыши, чтобы дверь создавать только когда курсор в режиме таргета находиться, в двиге это определяется или без вариантов?.

CODE
Запилил на_поиграться в [Misc] переменную ExplosionAroundPortal.

Та я как бы и не просил ничего запиливать.


QUOTE
if (has_skill(source, skill) + modifier

То есть модификатор просто влияет на уровень скила?
а у do_check так же на стату?



#943 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 12 августа 2017 - 03:03

QUOTE (Fakeman)
В смысле разбегаются) типа не знают кто атаковал?
Видимо, не вникал. Проверяй :-p

QUOTE (Fakeman)
Еще нужна под. функция на курсор мыши, чтобы дверь создавать только когда курсор в режиме таргета находиться, в двиге это определяется или без вариантов?.
call_offset_r0(0x44CB6C); // 0 = курсор движения, 1 = курсор команд, 2 = курсор прицеливания

QUOTE (Fakeman)
Та я как бы и не просил ничего запиливать.
Но так ты можешь посмотреть как это выглядит и проверить свои идеи, а уже потом решим развивать ли эту тему дальше...

QUOTE (Fakeman)
То есть модификатор просто влияет на уровень скила?
Да.

QUOTE (Fakeman)
а у do_check так же на стату?
if random(1, 10) <= (get_critter_stat(source, stat) + modifier) then ROLL_SUCCESS else ROLL_FAILURE;


#944 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 18 августа 2017 - 21:01

Как можно узнать, что текущая атака была критической?
Я так понимаю, что вот это оно и есть, или это что-то другое.
CODE
HOOK_COMBATDAMAGE
int     arg9  - Roll result of the attack (check with is_success, etc functions; basically: 0-crit. fail, 1-fail, 2-success, 3-crit. success)

crit. success — это значит был критический удар?
success — это тогда обычная атака, так?
crit. fail/fail — а это к каким ударам относится?
Ничего не понятно

У меня в тестах Roll result бывает только 2 и 4 Oo

Это сообщение отредактировано Fakeman - 18 августа 2017 | 22:01


#945 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 18 августа 2017 - 22:35

QUOTE (Fakeman)
Как можно узнать, что текущая атака была критической?
В HOOK_COMBATDAMAGE проверяй DAM_CRITICAL у arg6:
CODE
if flagsSource bwand DAM_CRITICAL then

QUOTE (Fakeman)
Я так понимаю, что вот это оно и есть, или это что-то другое.
В scripting\hookscripts.txt смотри описание:
QUOTE
int arg9  — DamageMultiplier (this is divided by 2, so a value of 3 does 1.5x damage, and 8 does 4x damage.); Обычно равно 2, но при взятом перке Silent Death|Тихая смерть и соответствующих условиях атаки равно 4, а при критических попаданиях значение берётся из таблицы критов


#946 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 18 августа 2017 - 22:46

CODE
int arg9  — DamageMultiplier

Точно) надо чтоб в оригинальном исправили.

CODE
а при критических попаданиях значение берётся из таблицы критов

Где-то я видел эту таблицу не напомнишь где?)

QUOTE
В HOOK_COMBATDAMAGE проверяй DAM_CRITICAL у arg6:

Спасибо огромное!


#947 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 18 августа 2017 - 22:57

QUOTE (Fakeman)
Где-то я видел эту таблицу не напомнишь где?)


#948 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 20 августа 2017 - 00:23

CODE
004238CD            cmp     edi, MELEE               ; Холодное оружие
004238D0            jz      short loc_4238DB
004238D2            cmp     edi, UNARMED             ; Без оружия
004238D5            jnz     loc_423A0D
004238DB
004238DB loc_4238DB:                                 ; compute_attack_+144j

Что-то не могу понять, когда происходят переходы
Если атака не равна UNARMED то переход?
Тогда с MELEE если равна то прыжок, так?


#949 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 20 августа 2017 - 00:40

QUOTE (Fakeman)
Что-то не могу понять, когда происходят переходы
if attack_subtype == MELEE or attack_subtype == UNARMED then


#950 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 20 августа 2017 - 01:02

Я пытаюсь понять как логически работают перки Silent Death и Slayer в паре.
Что означает вот это вот строка из кода от перка Silent Death
00423942 mov [esp+3Ch+DamageMultiplier], 4

Перк Slayer как-то влияет на Silent Death, или наоборот?

Отправлено: 20 авг 17 01:08
CODE
if attack_subtype == MELEE or attack_subtype == UNARMED then

ты меня тут не запутывай, на вопросы ответь)
QUOTE
Если атака не равна UNARMED то переход?
Тогда с MELEE если равна то прыжок, так?





#951 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 20 августа 2017 - 01:43

QUOTE (Fakeman)
Я пытаюсь понять как логически работают перки Silent Death и Slayer в паре.
В паре они никак не работают, но они обрабатываются в блоке, который разбирает MELEE или UNARMED атаки.

QUOTE (Fakeman)
Что означает вот это вот строка из кода от перка Silent Death
00423942 mov [esp+3Ch+DamageMultiplier], 4
DamageMultiplier изначально
QUOTE
равно 2, но при взятом перке Silent Death|Тихая смерть и соответствующих условиях атаки равно 4

QUOTE (Fakeman)
Перк Slayer как-то влияет на Silent Death, или наоборот?
Если Slayer взят, то это 100% критическое попадание, а значит чуть позже будет отбработка крита и получение нового значения DamageMultiplier из таблицы критов с игнорированием эффекта Silent Death. Последнее — баг, и его проще и правильнее исправить движково (что я уже и сделал), а не скриптово.

QUOTE (Fakeman)
ты меня тут не запутывай, на вопросы ответь)
CODE
DamageMultiplier = 2;
.....
if (attack_subtype == MELEE or attack_subtype == UNARMED) and roll == ROLL_SUCCESS and source = dude_obj then begin
 if has_trait(TRAIT_PERK, source, PERK_slayer) then roll := ROLL_CRITICAL_SUCCESS;
 if has_trait(TRAIT_PERK, source, PERK_silent_death) and условия_атаки then DamageMultiplier = 4;
 .....
end
.....
if roll == ROLL_CRITICAL_SUCCESS then DamageMultiplier := attack_crit_success;


#952 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 августа 2017 - 03:51

В продолжении темы о Silent Death — по идее нужно исправлять обработку перков Living Anatomy|Практическая анатомия и Pyromaniac|Пироман, чтобы они работали с Silent Death|Тихая смерть или критами.
Для скриптового примера DamageFormula это бы выглядело так:
CODE
.....
 if ctdSource == dude_obj then begin
  variable perkAmount := 5 * (DamageMultiplier/2); // Специально нет проверки что это крит, чтобы обрабатывался некритовый Silent Death
  if has_trait(TRAIT_PERK, ctdSource, PERK_living_anatomy) and metarule(METARULE_CRITTER_KILL_TYPE, ctdTarget) != KILL_TYPE_robot and metarule(METARULE_CRITTER_KILL_TYPE, ctdTarget) != KILL_TYPE_alien then
   amount := amount + perkAmount;
  if has_trait(TRAIT_PERK, ctdSource, PERK_pyromaniac) and dmg_type == DMG_fire then
   amount := amount + perkAmount;
 end
.....



#953 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 31 августа 2017 - 00:28

QUOTE
// Специально нет проверки что это крит, чтобы обрабатывался некритовый Silent Death

Специально для тупых) что туда надо писануть чтобы обрабатывалось?

И еще где в движке записаны номер верcии Major/Minor, (что в главном меню пишутся). что-то лазил-лазил не нашел нифига этих цифр.


#954 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 31 августа 2017 - 08:50

QUOTE (Fakeman)
что туда надо писануть чтобы обрабатывалось?
Не улавливаю о чём речь :-p

QUOTE (Fakeman)
И еще где в движке записаны номер верcии Major/Minor, (что в главном меню пишутся).
0x4B4583


#955 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 01 сентября 2017 - 00:58

CODE
Не улавливаю о чём речь

Че я фигню сморозил да?)

Код для TileMore ты у себя не вырезал?

CODE
0x4B4583

О как, там оказывается все в разных местах, для меню и для заголовка сохранения в save.dat файле. Понятно.

Это сообщение отредактировано Fakeman - 1 сентября 2017 | 01:01


#956 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 01 сентября 2017 - 07:56

QUOTE (Fakeman)
Код для TileMore ты у себя не вырезал?
Нет (MoreTiles) и если используется HRP, то он должен быть версии 4.1.8.


#957 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 01 сентября 2017 - 19:08

У тебя в последних исходниках(версии 31) два последних hook'a отключены и как то выведены за пределы if опции MoreTiles.
Каково было назначение этих двух хуков? (которые помещены в TRACE)

CODE
if (GetPrivateProfileIntA("Misc", "MoreTiles", 0, ini)) {
 if (*(DWORD*)0x1000E1BF == 0x1000 && *(DWORD*)0x1000E1D9 == 0x0FFF) { // HRP 4.1.8
  SafeWrite8(0x1000E1C0, 0x40);
  SafeWrite8(0x1000E1DA, 0x3F);
  MakeCall(0x419D46, art_id_hook);
  MakeCall(0x419479, art_get_name_hook);
  for (int i = 0; i < sizeof(Tiles_0E)/4; i++) SafeWrite8(Tiles_0E[i], 0xE);
  for (int i = 0; i < sizeof(Tiles_3F)/4; i++) SafeWrite8(Tiles_3F[i], 0x3F);
  for (int i = 0; i < sizeof(Tiles_40)/4; i++) SafeWrite8(Tiles_40[i], 0x40);
  for (int i = 0; i < sizeof(Tiles_C0)/4; i++) SafeWrite8(Tiles_C0[i], 0xC0);
 }
 }
#ifdef TRACE
 else HookCall(0x483BCD, &map_save_file_hook);
 HookCall(0x48434C, &square_load_hook);
#endif


Это сообщение отредактировано Fakeman - 1 сентября 2017 | 19:08


#958 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 02 сентября 2017 - 01:01

QUOTE (Fakeman)
У тебя в последних исходниках(версии 31) два последних hook'a отключены и как то выведены за пределы if опции MoreTiles.
Каково было назначение этих двух хуков? (которые помещены в TRACE)
Если помнишь там было битовое поле (e или s), которое являлось флагом и определяло [не]видимость крыши на этом тайле. При записи карты движок записывает этот бит, но при загрузке его игнорирует и настраивает [не]видимость крыши по-новой.
Возможна ситуация когда сначала кто-то запишет игру с MoreTiles=0, потом поменяет на 1 и загрузит эту игру. Тогда для тайлов с этим установленным битом будут использованы неверные номера и логично сбрасывать этот бит перед записью карты. Но сделал я это кривенько — на "живых" тайлах, а не копии. Что привело к проблеме появления крыши и визуального пропадания ГГ в домах после записи игры. Пришлось временно отключить.


#959 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 02 сентября 2017 - 04:05

Ты что-то потом в коде менял, или так и осталось?

Меня интересует ситуация когда MoreTiles будет выставлен всегда в 1 (перманентно).
Я так понимаю, тогда получается что эти две map_save_file_hook и square_load_hook — вообще не нужны, да?


#960 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 02 сентября 2017 - 09:30

QUOTE (Fakeman)
Ты что-то потом в коде менял, или так и осталось?
Само собой переписал нормально.

QUOTE (Fakeman)
Меня интересует ситуация когда MoreTiles будет выставлен всегда в 1 (перманентно).
Я так понимаю, тогда получается что эти две map_save_file_hook и square_load_hook — вообще не нужны, да?
Верно.




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Рейтинг@Mail.ru