|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
А вот кому свежих функций (IDA Pro - сказка, даже для такого ламера как я): ------------------------------------- skill_contest [3]; sfx_build_scenery_name [3]; sfx_build_ambient_name [1]; sfx_build_interface_name [1]; sfx_build_item_name [1]; sfx_build_open_name [2]; int roll_dice [2]; int reaction_influence [3]; make_daytime [0]; game_time_in_seconds [0]; void addbuttonflag [2]; void addregionflag [2]; void addregionrightproc [3]; void addbuttonrightproc [3]; ------------------------------------- Кста, среди статсов Чуза есть и reaction [-20;20]. По поводу скриптинга айтемов. Нашёл следующее (логически, естественно): ------------------------------------- //protinst_use_item_ proc switch(obj_item_subtype(item)){ case [0,1,4,6] : display_msg("That does nothing."); break; //proto.msg, line 582 case 2 : return -1; break; case [3,5] : <...> //Последовательно пытается юзать объект как: //книгу (двиг) //flare (двиг) //misc item (скрипт) //radio == misc item (скрипт) //explosive (двиг) //как объект с зарядами (двиг) } ------------------------------------- Итого: похоже, обрабатывать use можно только для misc-шмоток И оружия. При этом с оружием могут возникать проблемы (возможно, item_m_uses_charges относится как раз к стволам). Про mapper2.cfg. Возможно, все уже это знают :-), но для меня стало новостью. В [debug] можно поставить заменить mode=environment на mode=log и во время прогона Мапера в debug.log будет писаться всякое интересное. Количество интересного напрямую зависит от стопки флагов: ------------------------------------- output_map_data_info=1 //дампит список используемых фрм-ок show_load_info=1 //инфу о процессе инициализации мапера show_script_messages=1 //копирует вывод display_msg show_tile_num=1 //? не знаю ------------------------------------- Кроме log можно пользовать screen и mono. Чего они дают - непонятно. Хотя, mono выбивает Мапер в аут. Так и задумывалось? :-) И, наконец, супер-штука: mode=gnw. При этом в мапере появляется debug-окошко, которое услужливо подсказывает PID каждого кликнутого объекта, номер каждого кликнутого тайла и т.д. и т.п. Удобно - но навязчиво. Его можно перемещать и закрывать, но оно постоянно выскакивает чуть что произойдёт. А что самое интересное - строки вида "Invalid arg 4 given to sayscrollup" при вылете скрипта. Перки. Найдено методом тупого тыка - просто гонял ИДУ и Фол, смотрел на память и т.д. Обнаружил всё это в окошке "IDA View ESP". Насколько я понял. это содержимое памяти. Откуда, из каких таблиц, по каким смещениям берётся эта инфа я сказать не могу - ламер в этом деле. Абель, Анхорит - объясните, плз, как можно обнаружить местонахождение этих таблиц напрямую в экзешнике. Теперь - что, собственно, нашёл. Массив структур. Имя - _perk_data. Адресс (в памяти) - 0x0055B5A0. Каждый перк описывается 19-ю dd полями: 1. указатель на строку с именем 2. указатель на строку с описанием 3. 48h (72) для Awarness, +1 для каждого последующего 4. сколько раз можно взять перк 5. минимальный уровень 6. какой стат (STAT_ из define.h) модифицируется (-1=0x0FFFFFFFF ежели никакой) 7. на сколько модифицируется 8. номер скила (SKILL_), если перк завязан на минимальное значение скила (-1 если нет) 9. требуемое значение скила 10. [0/1/2] Если требований по скилам нет - 0. Если требование по одному скилу - 0. Если по двум - 1 или 2, принцип выбора не понял. 11. аналогично 8, ещё один скил 12. аналогично 9 13-19. требования по статсам (13 - Strenght, 19 - Luck) Число перков (77h) прошито намертво, чеки происходят в огромном количестве процедур. Наличие перков, которые дают не бонус к скилам, а что-нибудь другое, проверяется *напрямую в коде соответствующих процедур*. Например, наличие Bonus HtH attacks (1) и Bonus rate of fire (5) проверяются *при каждом вызове* item_w_mp_cost (вычисляет AP для атаки) и каждый раз от необходимого кол-ва AP честно скручивается по единичке. Итого: ситуация с перками довольно плачевна. Для добавления своих придётся: 1. обильно патчить двиг, заменяя все эти 77h на нужное значение 2. искать способ добавления новых элементов в массив perk_data Эта процедура (к счастью, одноразовая) позволит нам в дальнейшем добавлять перки из серии "плюс-к-скилу". Реализация перков с более сложным эффектом потребует модификации двига (т.е. написания ассемблерных вставок в и так не слишком читабельные процедуры). То есть это, мягко говоря, сложнореализуемо. С другой стороны - всё-таки реализуемо: IDA, Hiew и много-много зелёного чая :-) P.S. Вот та-а-а-акенное спасибище Абелю за mapper_names.idc
|
Отправлено: 12:28 - 14 Фев., 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
>>И, наконец, супер-штука: mode=gnw. При этом в мапере появляется debug-окошко, которое услужливо подсказывает PID каждого кликнутого объекта, номер каждого кликнутого тайла и т.д. и т.п Штука действительно супер, но вот только PID'ы у меня не показывает. А было бы супер - я уже задолбался их руками считать. (Да, кстати я параметры поставил) P.S. А вот свитч - это класс. Я надеялся, что от С она осталась, но вот наверняка не знал. Может это где-то и говорилось, но я пропустил. Если нет - то спасибо за инфу. Теперь будем юзать.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 12:48 - 14 Фев., 2005
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
>>А вот свитч - это класс В Фоле нет switch-а! Это я в Си-подобном синтаксисе писал. Вообще, switch легко организовать: -------------------------------- variable switch_var; #define switch(x) switch_var:=x; if(x!=x) then begin display_msg("Bug") else begin #define case(x) end if switxh_var==x then begin -------------------------------- switch(my_var) case(1) display_msg("One"); case(2) display_msg("Two"); case(3) display_msg("Three"); end А для показа пидов поставь show_pid_numbers=1 в секции [mapper] mapper2.cfg.
|
Отправлено: 12:53 - 14 Фев., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
game_time_in_seconds уже описан в ФОП и обновлённой доке: int game_time_in_seconds - возвращает текущее игровое время (время, прошедшее от начала игры) в секундах Аргументы: нет Возвращаемое значение: текущее игровое время в секундах
|
Отправлено: 14:09 - 14 Фев., 2005
|
|
|
|