Fakeman
7 April 2018 | 19:29
CODE |
У how_much есть аргумент "пофик_что_но_int". |
не компилируется с ним, может внутри компилятора автоматом подставляется.
Crafty
7 April 2018 | 19:42
QUOTE (Fakeman) |
не компилируется с ним, может внутри компилятора автоматом подставляется. |
Действительно не компилируется. В компиляторе не подставляется, в исходниках (в extra.c) how_much описана как функция без параметров.
Если напишешь pull, добавь ещё чтобы в optimize.c в IsProtectedProc добавили "Protect("desc_p_proc");" для F1 ;)
Fakeman
7 April 2018 | 19:58
Т.е. то что не передается аргумент, от этого и имеется глюк в последней переменной?
Crafty
7 April 2018 | 20:13
QUOTE |
Т.е. то что не передается аргумент, от этого и имеется глюк в последней переменной? |
Типа того движок достаёт аргумент из стэка, но в нашем случае этого аргумента в стэке нет и он трогает что не нужно ;)
Fakeman
7 April 2018 | 20:21
может тогда легче движок поправить, все равно ненужен этот арг. поправил у себя компилятор теперь все норм.
а для f1 это что за кочерга?
Crafty
7 April 2018 | 20:46
QUOTE (Fakeman) |
может тогда легче движок поправить, все равно ненужен этот арг. хотя нафиг. |
Легче и правильнее всё же исправить компилятор :-p
QUOTE (Fakeman) |
а для f1 это что за кочерга? |
В F2 "description_p_proc", а в F1 "desc_p_proc".
Fakeman
7 April 2018 | 23:15
В смысле там же через script_action вызывается соответствующая процедура для действия. или для описания это не работает.
Crafty
8 April 2018 | 00:23
QUOTE (Fakeman) |
В смысле там же через script_action вызывается соответствующая процедура для действия. или для описания это не работает. |
Неверная информация, основанная на демо-версии движка, что:
QUOTE |
start в Fallout2 вызывается при первом запуске скрипта, в Fallout1 для каждого действия Примечания: В Fallout1 является главным обработчиком, через который вызываются все остальные. Типы действия передаются обработчику через параметр script_action, после чего происходит вызов нужного обработчика (обычно это делатеся через if-then-else). Номера обработчиков см. в Приложении. |
У F1 такие же именные обработчики как и у F2, только вместо "description_p_proc" это "desc_p_proc" и нет "push_p_proc", "is_dropping_p_proc", "combat_is_starting_p_proc" и "combat_is_over_p_proc". Связка start+script_action является резервной и срабатывает если именного обработчика нет (вроде рассказывал об этом когда сделал "! Исправлено использование фиксированной позиции для вызова скриптовой процедуры start при отсутствии стандартного обработчика.").
Поэтому, на примере jennifer.ssl,:
CODE |
procedure start begin if (script_action == 21) then begin call look_at_p_proc(); end .... procedure look_at_p_proc begin end |
проверка в start нафик не нужна, движок вызовет look_at_p_proc напрямую.
Fakeman
8 April 2018 | 02:38
QUOTE |
У F1 такие же именные обработчики как и у F2 |
Почему я постоянно в процедуре start вижу эти script_action, скрипты остались с демо-версии?
Вообще я кто-то не лезу в дебри F1, тут бы с F2 разобраться))
Crafty
8 April 2018 | 02:54
QUOTE (Fakeman) |
Почему я постоянно в процедуре start вижу эти script_action, скрипты остались с демо-версии? |
Вероятно, а может привычка. Честно говоря у меня нет под рукой F1 версии 1.0, а искать лень, но в патче 1.1 экзешник уже точно вызывает именные обработчики напрямую.
Fakeman
8 April 2018 | 16:16
Все забываю спросить, я в формуле дамага заменил движковую item_w_damage_ на скриптовой вариант получения повреждения, вот таким образом.
CODE |
for (i := 1; i <= rounds; i++) begin damage := (item_w_damage + bonus_ranged) * dmg_mult; //item_w_damage_ ... |
CODE |
procedure item_damage_hook begin // HOOK_ITEMDAMAGE item_w_damage_min := get_sfall_arg; item_w_damage_max := get_sfall_arg; end
procedure item_w_damage begin return random(item_w_damage_min, item_w_damage_max); end
|
Из item_w_damage_ нужно же только получить рандом дамага? или есть какие-то скрытые нюансы.
Я переделал скрипт полностью на скриптовой вариант, но вот с item_w_damage_ остались сомнения.
Crafty
8 April 2018 | 17:13
QUOTE (Fakeman) |
но вот с item_w_damage_ остались сомнения. |
Всё верно. Хотя можно вообще от item_w_damage отказаться заменив сразу на random ;)
Опять баки забил :-p
Неверно HOOK_ITEMDAMAGE срабатывает в оригинальной item_w_damage_, а поскольку ты её полностью исключаешь из использования, то значения item_w_damage_min и item_w_damage_max никогда не будут соответствовать реальным значениям оружия.
Конечно можно сделать полный аналог движковой item_w_damage_, похерив при этом любые моды использующие HOOK_ITEMDAMAGE ;)
К чему вообще такие сложности?
Fakeman
9 April 2018 | 12:58
QUOTE |
Неверно HOOK_ITEMDAMAGE срабатывает в оригинальной item_w_damage_, а поскольку ты её полностью исключаешь из использования, то значения item_w_damage_min и item_w_damage_max никогда не будут соответствовать реальным значениям оружия. |
Так мин-макс дамаг получаются из HOOK_ITEMDAMAGE каждый раз при стрельбе.
Цепочка вызова
Движковой compute damage -> item_w_damage_ -> HOOK_ITEMDAMAGE -> Получили мин-макс -≥ Hook_Damage
Что не так то?
И спрашивал по цикл
CODE |
for (i := 1; i <= rounds; i++) begin damage := (item_w_damage + bonus_ranged) * dmg_mult; //item_w_damage_ ... |
Он там в движке чтобы просто убить процессорное время?)) в этом цикле ничего не анализируется, ничего не запоминается относительно предыдущей итерации цикла.
Поэтому я и спрашиваю про item_w_damage_ может там что-то ещё есть, кроме получения рандомного дамага.
Отправлено: 9 апр 18 13:08
QUOTE |
К чему вообще такие сложности? |
Потому что в оригинальном использование движковой item_w_damage_ совместно с HOOKDAMAGE глючит, это ты там у себя поправил и все ок)
Crafty
9 April 2018 | 16:29
QUOTE (Fakeman) |
Что не так то? |
Так, попутал с хуками полностью переопределяющими обработку ;)
QUOTE (Fakeman) |
в этом цикле ничего не анализируется, ничего не запоминается относительно предыдущей итерации цикла. |
Дамаг суммируется, rounds это количество пуль.
QUOTE (Fakeman) |
Потому что в оригинальном использование движковой item_w_damage_ совместно с HOOKDAMAGE глючит, это ты там у себя поправил и все ок) |
Та ладно? :-p
Foxx
9 April 2018 | 16:49
QUOTE ("Crafty") |
Та ладно? :-p |
Та, не спорь твой все равно круче ;)
Fakeman
9 April 2018 | 16:59
Вот я так и думал, что должно суммироваться))
Я когда отформатировал твою писанину для более легкого чтения, в конце просчета поставил := вместо += :)
Ты не чего не исправлял? само от ремонтировалось))
Отправлено: 9 апр 18 17:55
QUOTE |
Та, не спорь твой все равно круче ;) |
Ага) я опять получаю краши, которых нет в старых 1.7 версиях и в оригинале.
Разберусь что там крутое) крашит игру, напишу.
Crafty
9 April 2018 | 18:09
QUOTE (Foxx) |
Та, не спорь твой все равно круче ;) |
QUOTE (Fakeman) |
Ты не чего не исправлял? само от ремонтировалось)) |
Не, я серьёзно не припоминаю каких-либо изменений в "item_w_damage_ совместно с HOOKDAMAGE".
QUOTE (Fakeman) |
Разберусь что там крутое) крашит игру, напишу. |
Это хитрый план :-p
Foxx
9 April 2018 | 18:49
QUOTE ("Факеман") |
Ага) я опять получаю краши |
Если делать свою собственную игру и с собственными скриптами то да))))
Да и еще просить фишки в движке (про слух именно ты просил), которые потом обычным играм будут условности ставить)))
Fakeman
9 April 2018 | 21:13
QUOTE |
Это хитрый план :-p |
Ладно это ложная тревога, крашилось на clear_array, обновил ддл на последнию и вроде норм (может забыл обновить с прошлых правок массива).
QUOTE |
Не, я серьёзно не припоминаю каких-либо изменений в "item_w_damage_ совместно с HOOKDAMAGE". |
Там глюк если возвращается ретурном дамаг в HOOK_ITEMDAMAGE, то после вызова item_w_damage_ в HOOK_COMBATDAMAGE критеры/игрок наносят дамаг сами по себе))
Crafty
9 April 2018 | 22:00
QUOTE (Fakeman) |
Там глюк если возвращается ретурном дамаг в HOOK_ITEMDAMAGE, то после вызова item_w_damage_ в HOOK_COMBATDAMAGE критеры/игрок наносят дамаг сами по себе)) |
Всё равно хз о чём, но выглядит как серьёзный ахтунг :-p
Fakeman
10 April 2018 | 01:55
QUOTE |
но выглядит как серьёзный ахтунг :-p |
Ну это выглядит примерно так же как MultiHex критеры метают оружие сами в себя)))
Fakeman
11 April 2018 | 18:56
В HOOK_MOUSECLICK не происходит событие "released" для всех кнопок кроме left.
CODE |
procedure MouseClick_Hook begin variable type := get_sfall_arg; // event type: 1 - pressed, 0 - released variable button := get_sfall_arg; // button number (0 - left, 1 - right, up to 7) display_msg("type: " + type); end |
Crafty
11 April 2018 | 22:18
QUOTE (Fakeman) |
В HOOK_MOUSECLICK не происходит событие "released" для всех кнопок кроме left. |
Спасибо. Серьёзная лажа, кстати :/
Fakeman
12 April 2018 | 19:43
Есть какой-нибудь сайт для нубов где можно было посмотреть опкоды к ассемблеровским командам.
или желательно сайт где вводишь мнемонику и выводится ее опкод.
Crafty
12 April 2018 | 20:23
QUOTE (Fakeman) |
Есть какой-нибудь сайт для нубов где можно было посмотреть опкоды к ассемблеровским командам. |
Гугл или там Яндекс, не? ;)
Fakeman
12 April 2018 | 23:56
CODE |
Гугл или там Яндекс, не?;) |
не для нубов не находит)
Crafty
13 April 2018 | 00:30
QUOTE (Fakeman) |
не для нубов не находит) |
Вбил в яндексе "опкоды к ассемблеровским командам", выбрал наугад
Хабрахабр, бегло просмотрел текст и увидел
ссылку. Уверен что при желании можно ещё чего найти.
Но ты бы лучше конкретизировал для чего тебе это изучения ассемблера или, как я полагаю, для конвертации ассемблерного кода в машинный код, чтобы самому было удобно делать изменения.
Для второго способа есть простой способ с использованием Hiew'а в Decode режиме включить редактирование (F3), потом редактор ассемблерного кода (F2) и после ввода нужного кода и нажатия Enter увидеть подсвеченный результат в виде машинного кода. Главное потом выйти из режима редактирования через Esc не нажав Update (F9) ;)
Fakeman
13 April 2018 | 01:27
QUOTE |
для конвертации ассемблерного кода в машинный код, чтобы самому было удобно делать изменения. |
Вот это, а то мне приходится по исходникам базы IDA искать)
По ссылке таблицу уже смотрел там точно уже для прошареных.
Если бы не его досовский вид)
Crafty
13 April 2018 | 02:22
QUOTE (Fakeman) |
Если бы не его досовский вид) |
Уверен что можно найти и GUI-аналог.
Или так
Online x86 / x64 Assembler and Disassembler.
Fakeman
13 April 2018 | 15:53
Ну вот то что надо. спасибо.
jordan
13 April 2018 | 23:19
Насколько шагнул прогресс))) Когда лет 10 назад модил фол, мечтал, контролировать игру через скрипты. Теперь через скрипты можно менять всё! Крутяк!
А где почитать о возможностях и описании как скриптить эти хуки? Хук это callabck?
Fakeman
14 April 2018 | 02:04
QUOTE |
А где почитать о возможностях и описании как скриптить эти хуки? |
Вся документация есть в архиве сфала.
QUOTE |
Теперь через скрипты можно менять всё! |
Было еще предложение самим создавать пользовательские хуки непосредственно в скрипте, а не только через хард-кодинг в dll.
Foxx
14 April 2018 | 02:08
jordan
Нельзя все сделать в скриптах, Stalin врет ))))
Fakeman
14 April 2018 | 02:18
QUOTE |
Нельзя все сделать в скриптах, Stalin врет)))) |
Ну прям все нельзя. Ну это пока)
Foxx
14 April 2018 | 02:21
Fakeman
Ага, NovaRain напиши может и все можно будет)))
А если серьезно, как проект-то движется или все хуки изучаешь (я очень на него надеюсь).
Fakeman
14 April 2018 | 03:32
QUOTE |
А если серьезно, как проект-то движется |
Очень серьезный долгострой)
Foxx
14 April 2018 | 12:27
Fakeman
Ну ты старайся и главное исходники береги, вдруг бросишь, а у кого-то желание появится доделать:-)
И мне кажется ты уже много там сделал, просто стесняешся)))
Fakeman
15 April 2018 | 23:21
Crafty, можно ли из глобального скрипта узнать/установить значение для локальной переменной(LVAR) скрипта какого-либо объекта? если да то как)
Crafty
16 April 2018 | 00:11
QUOTE (Fakeman) |
можно ли из глобального скрипта узнать/установить значение для локальной переменной(LVAR) скрипта какого-либо объекта? если да то как) |
Можно что угодно, но это же совсем :-p Лучше считать что нет.
Fakeman
16 April 2018 | 02:11
давай давай, рассказывай как добраться)
Просто реально этого не хватает.
Crafty
16 April 2018 | 17:56
QUOTE (Fakeman) |
давай давай, рассказывай как добраться) Просто реально этого не хватает. |
Может и не должно? ;-p
Для получения значения локальной переменной требуется передача указателя на место, куда будет записано это значения. Напрямую его передать через call_offset_* нельзя.
Установка через call_offset_r3(0x4A6E58, read_int(object+0x78), int var_index, int value).
Fakeman
16 April 2018 | 18:54
А ну в принципе меня больше интересовала запись.
И еще ты для чтения параметров из ини используешь winApi функции или движковые?
Crafty
16 April 2018 | 19:55
QUOTE |
И еще ты для чтения параметров из ини используешь winApi функции или движковые? |
Виндовые вроде GetPrivateProfile*, движковые (это которые config_get_*) специфичны.
Fakeman
16 April 2018 | 23:53
чем специфичны?
Crafty
17 April 2018 | 04:33
QUOTE (Fakeman) |
чем специфичны? |
Та не суть, менять сейчас с виндовых на движковые уже нет смысла.
Fakeman
17 April 2018 | 11:07
К опции timeShift можно добавь отрицательные значения?
было бы полезно когда общая скорость игры увеличена, а с понижением скорости тиков таймерные события оставались бы на приемлемой скорости , а то так эта опция практически безполезна.
Crafty
17 April 2018 | 18:31
QUOTE (Fakeman) |
К опции timeShift можно добавь отрицательные значения? |
К чему? :-p
QUOTE (Fakeman) |
было бы полезно когда общая скорость игры увеличена, а с понижением скорости тиков таймерные события оставались бы на приемлемой скорости , а то так эта опция практически безполезна. |
Обсуждали уже нельзя.
Механизм уменьшения/увеличения скорости "течения" времени в игре заложен в движке, но похерен и вместо этого 1 секунда это фиксированные 10 тиков. Можно было бы допилить, чтобы менять скорость (5 вместо 10 ускорят, а 20 вместо 10 замедлят игровое время в 2 раза) и была совместимость с таймерными событиями и анимацией, но это дополнительно требует проверки и редактирования всех скриптов для замены использования фиксированных значений (ONE_GAME_MINUTE = 600 и т.д.) на рассчитываемые "на лету" (ONE_GAME_MINUTE = game_ticks(60)). И мне слабо верится что кто-то будет заниматься последним :-p
Fakeman
17 April 2018 | 21:38
QUOTE |
Обсуждали уже нельзя. |
а да точно обсуждали)
но это можно сделать, только потребуется одновременно допиливать множитель и для функции game_ticks (это чтобы без перекомпиляции) ну и все остальное фиксить, что связанно с тиками.
jordan
17 April 2018 | 22:05
QUOTE |
фиксированных значений (ONE_GAME_MINUTE = 600 и т.д.) на рассчитываемые "на лету" (ONE_GAME_MINUTE = game_ticks(60)). И мне слабо верится что кто-то будет заниматься последним :-p |
Просто перекомпилировать скрипты. Но, в том случае если мод использует заголовки оригинального фола, иначе если скрипты декомпилированы, просто так не заменить. Но возможно и при чём в автоматическом режиме.
Проблема в совместимости. Все старые моды, просто сойдут с ума))
При переносе, ф1 на движок ф2, я с помощью сишного препроцессора и excel'я восстанавливал, гвары, номера скриптов и т.д Если заморочиться то вполне решаемо.
Fakeman
17 April 2018 | 23:16
QUOTE |
Просто перекомпилировать скрипты. Но возможно и при чём в автоматическом режиме. |
Ты не понял сути, это была бы пользовательская опция, а не заточенная под конкретный мод.
Сегодня я играю на x2 скорости, а завтра на x1 хочу, и что каждый раз перекомпиляцию делать)))
jordan
Кстати ты лет 10 назад а то и больше, делал рассылку на почту для всех кто когда-то был на ТимХ, короче ты чего-то хотел всех собрать, я пришел на форум посмотрел никого нет, подумал подумал ну и пошел дальше пить пиво)