Полная Версия: (sfall) дополнения
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Fakeman
CODE
У how_much есть аргумент "пофик_что_но_int".

не компилируется с ним, может внутри компилятора автоматом подставляется.
Crafty
QUOTE (Fakeman)
не компилируется с ним, может внутри компилятора автоматом подставляется.
Действительно не компилируется. В компиляторе не подставляется, в исходниках (в extra.c) how_much описана как функция без параметров.
Если напишешь pull, добавь ещё чтобы в optimize.c в IsProtectedProc добавили "Protect("desc_p_proc");" для F1 ;)
Fakeman
Т.е. то что не передается аргумент, от этого и имеется глюк в последней переменной?
Crafty
QUOTE
Т.е. то что не передается аргумент, от этого и имеется глюк в последней переменной?
Типа того — движок достаёт аргумент из стэка, но в нашем случае этого аргумента в стэке нет и он трогает что не нужно ;)
Fakeman
может тогда легче движок поправить, все равно ненужен этот арг. поправил у себя компилятор теперь все норм.
а для f1 это что за кочерга?
Crafty
QUOTE (Fakeman)
может тогда легче движок поправить, все равно ненужен этот арг. хотя нафиг.
Легче и правильнее всё же исправить компилятор :-p
QUOTE (Fakeman)
а для f1 это что за кочерга?
В F2 "description_p_proc", а в F1 "desc_p_proc".
Fakeman
В смысле там же через script_action вызывается соответствующая процедура для действия. или для описания это не работает.
Crafty
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
QUOTE
У F1 такие же именные обработчики как и у F2

Почему я постоянно в процедуре start вижу эти script_action, скрипты остались с демо-версии?
Вообще я кто-то не лезу в дебри F1, тут бы с F2 разобраться))
Crafty
QUOTE (Fakeman)
Почему я постоянно в процедуре start вижу эти script_action, скрипты остались с демо-версии?
Вероятно, а может привычка. Честно говоря у меня нет под рукой F1 версии 1.0, а искать лень, но в патче 1.1 экзешник уже точно вызывает именные обработчики напрямую.
Fakeman
Все забываю спросить, я в формуле дамага заменил движковую 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
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
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
QUOTE (Fakeman)
Что не так то?
Так, попутал с хуками полностью переопределяющими обработку ;)

QUOTE (Fakeman)
в этом цикле ничего не анализируется, ничего не запоминается относительно предыдущей итерации цикла.
Дамаг суммируется, rounds — это количество пуль.

QUOTE (Fakeman)
Потому что в оригинальном использование движковой item_w_damage_ совместно с HOOKDAMAGE глючит, это ты там у себя поправил и все ок)
Та ладно? :-p
Foxx
QUOTE ("Crafty")
Та ладно? :-p

Та, не спорь — твой все равно круче ;)
Fakeman
QUOTE
Дамаг суммируется

Вот я так и думал, что должно суммироваться))
Я когда отформатировал твою писанину для более легкого чтения, в конце просчета поставил := вместо += :)

QUOTE
Та ладно?

Ты не чего не исправлял? само от ремонтировалось))

Отправлено: 9 апр 18 17:55
QUOTE
Та, не спорь — твой все равно круче ;)

Ага) я опять получаю краши, которых нет в старых 1.7 версиях и в оригинале.
Разберусь что там крутое) крашит игру, напишу.
Crafty
QUOTE (Foxx)
Та, не спорь — твой все равно круче ;)
QUOTE (Fakeman)
Ты не чего не исправлял? само от ремонтировалось))
Не, я серьёзно не припоминаю каких-либо изменений в "item_w_damage_ совместно с HOOKDAMAGE".

QUOTE (Fakeman)
Разберусь что там крутое) крашит игру, напишу.
Это хитрый план :-p
Foxx
QUOTE ("Факеман")
Ага) я опять получаю краши

Если делать свою собственную игру и с собственными скриптами — то да))))
Да и еще просить фишки в движке (про слух именно ты просил), которые потом обычным играм будут условности ставить)))
Fakeman
QUOTE
Это хитрый план :-p

Ладно это ложная тревога, крашилось на clear_array, обновил ддл на последнию и вроде норм (может забыл обновить с прошлых правок массива).

QUOTE
Не, я серьёзно не припоминаю каких-либо изменений в "item_w_damage_ совместно с HOOKDAMAGE".

Там глюк если возвращается ретурном дамаг в HOOK_ITEMDAMAGE, то после вызова item_w_damage_ в HOOK_COMBATDAMAGE критеры/игрок наносят дамаг сами по себе))
Crafty
QUOTE (Fakeman)
Там глюк если возвращается ретурном дамаг в HOOK_ITEMDAMAGE, то после вызова item_w_damage_ в HOOK_COMBATDAMAGE критеры/игрок наносят дамаг сами по себе))
Всё равно хз о чём, но выглядит как серьёзный ахтунг :-p
Fakeman
QUOTE
но выглядит как серьёзный ахтунг :-p

Ну это выглядит примерно так же как MultiHex критеры метают оружие сами в себя)))
Fakeman
В 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
QUOTE (Fakeman)
В HOOK_MOUSECLICK не происходит событие "released" для всех кнопок кроме left.
Спасибо. Серьёзная лажа, кстати :/
Fakeman
Есть какой-нибудь сайт для нубов где можно было посмотреть опкоды к ассемблеровским командам.
или желательно сайт где вводишь мнемонику и выводится ее опкод.
Crafty
QUOTE (Fakeman)
Есть какой-нибудь сайт для нубов где можно было посмотреть опкоды к ассемблеровским командам.
Гугл или там Яндекс, не? ;)
Fakeman
CODE
Гугл или там Яндекс, не?;)

не для нубов не находит)
Crafty
QUOTE (Fakeman)
не для нубов не находит)
Вбил в яндексе "опкоды к ассемблеровским командам", выбрал наугад Хабрахабр, бегло просмотрел текст и увидел ссылку. Уверен что при желании можно ещё чего найти.

Но ты бы лучше конкретизировал для чего тебе это — изучения ассемблера или, как я полагаю, для конвертации ассемблерного кода в машинный код, чтобы самому было удобно делать изменения.
Для второго способа есть простой способ с использованием Hiew'а — в Decode режиме включить редактирование (F3), потом редактор ассемблерного кода (F2) и после ввода нужного кода и нажатия Enter увидеть подсвеченный результат в виде машинного кода. Главное потом выйти из режима редактирования через Esc не нажав Update (F9) ;)
Fakeman
QUOTE
для конвертации ассемблерного кода в машинный код, чтобы самому было удобно делать изменения.

Вот это, а то мне приходится по исходникам базы IDA искать)
По ссылке таблицу уже смотрел там точно уже для прошареных.

QUOTE
Hiew'а

Если бы не его досовский вид)
Crafty
QUOTE (Fakeman)
Если бы не его досовский вид)
Уверен что можно найти и GUI-аналог.
Или так — Online x86 / x64 Assembler and Disassembler.
Fakeman
Ну вот то что надо. спасибо.
jordan
Насколько шагнул прогресс))) Когда лет 10 назад модил фол, мечтал, контролировать игру через скрипты. Теперь через скрипты можно менять всё! Крутяк!

А где почитать о возможностях и описании как скриптить эти хуки? Хук это callabck?
Fakeman
QUOTE
А где почитать о возможностях и описании как скриптить эти хуки?

Вся документация есть в архиве сфала.

QUOTE
Теперь через скрипты можно менять всё!

Было еще предложение самим создавать пользовательские хуки непосредственно в скрипте, а не только через хард-кодинг в dll.
Foxx
jordan
Нельзя все сделать в скриптах, Stalin врет ))))
Fakeman
QUOTE
Нельзя все сделать в скриптах, Stalin врет))))

Ну прям все нельзя. Ну это пока)
Foxx
Fakeman
Ага, NovaRain напиши может и все можно будет)))

А если серьезно, как проект-то движется или все хуки изучаешь (я очень на него надеюсь).
Fakeman
QUOTE
А если серьезно, как проект-то движется

Очень серьезный долгострой)
Foxx
Fakeman
Ну ты старайся и главное исходники береги, вдруг бросишь, а у кого-то желание появится доделать:-)

И мне кажется ты уже много там сделал, просто стесняешся)))
Fakeman
Crafty, можно ли из глобального скрипта узнать/установить значение для локальной переменной(LVAR) скрипта какого-либо объекта? если да то как)
Crafty
QUOTE (Fakeman)
можно ли из глобального скрипта узнать/установить значение для локальной переменной(LVAR) скрипта какого-либо объекта? если да то как)
Можно что угодно, но это же совсем :-p Лучше считать что нет.
Fakeman
давай давай, рассказывай как добраться)
Просто реально этого не хватает.
Crafty
QUOTE (Fakeman)
давай давай, рассказывай как добраться)
Просто реально этого не хватает.
Может и не должно? ;-p
Для получения значения локальной переменной требуется передача указателя на место, куда будет записано это значения. Напрямую его передать через call_offset_* нельзя.
Установка через call_offset_r3(0x4A6E58, read_int(object+0x78), int var_index, int value).
Fakeman
А ну в принципе меня больше интересовала запись.

И еще ты для чтения параметров из ини используешь winApi функции или движковые?
Crafty
QUOTE
И еще ты для чтения параметров из ини используешь winApi функции или движковые?
Виндовые вроде GetPrivateProfile*, движковые (это которые config_get_*) специфичны.
Fakeman
QUOTE
специфичны.

чем специфичны?
Crafty
QUOTE (Fakeman)
чем специфичны?
Та не суть, менять сейчас с виндовых на движковые уже нет смысла.
Fakeman
К опции timeShift можно добавь отрицательные значения?
было бы полезно когда общая скорость игры увеличена, а с понижением скорости тиков таймерные события оставались бы на приемлемой скорости , а то так эта опция практически безполезна.
Crafty
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
QUOTE
Обсуждали уже — нельзя.

а да точно обсуждали)
но это можно сделать, только потребуется одновременно допиливать множитель и для функции game_ticks (это чтобы без перекомпиляции) ну и все остальное фиксить, что связанно с тиками.
jordan
QUOTE
Crafty


QUOTE
фиксированных значений (ONE_GAME_MINUTE = 600 и т.д.) на рассчитываемые "на лету" (ONE_GAME_MINUTE = game_ticks(60)). И мне слабо верится что кто-то будет заниматься последним :-p


Просто перекомпилировать скрипты. Но, в том случае если мод использует заголовки оригинального фола, иначе если скрипты декомпилированы, просто так не заменить. Но возможно и при чём в автоматическом режиме.

Проблема в совместимости. Все старые моды, просто сойдут с ума))

При переносе, ф1 на движок ф2, я с помощью сишного препроцессора и excel'я восстанавливал, гвары, номера скриптов и т.д Если заморочиться то вполне решаемо.
Fakeman
QUOTE
Просто перекомпилировать скрипты. Но возможно и при чём в автоматическом режиме.

Ты не понял сути, это была бы пользовательская опция, а не заточенная под конкретный мод.
Сегодня я играю на x2 скорости, а завтра на x1 хочу, и что каждый раз перекомпиляцию делать)))

jordan
Кстати ты лет 10 назад а то и больше, делал рассылку на почту для всех кто когда-то был на ТимХ, короче ты чего-то хотел всех собрать, я пришел на форум посмотрел никого нет, подумал подумал ну и пошел дальше пить пиво)
Ваш ответ: