|
|
|
|
| Author: Wasteland Ghost 08.02.05 15:19:09 | Синтаксис оригинального компилятора: int metarule(int meta_switch, int meta_par) - функция работы со множеством игровых параметров, имеет огромное количество вариаций Аргументы: meta_switch - переключатель meta_par - параметр Возвращаемое значение: meta_switch = METARULE_TEST_FIRSTRUN (14), meta_par = 0: TRUE - карта загружается впервые, иначе - FALSE (используется только в контексте map_enter_p_proc) meta_switch = METARULE_IS_LOADGAME (22), meta_par = 0: TRUE - игра загружается, иначе - FALSE (используется только в контексте map_enter_p_proc) meta_switch = METARULE_SIGNAL_END_GAME (13), meta_par = 0: завершает игру, выходит в главное меню meta_switch = METARULE_ELEVATOR (15), meta_par - ID лифта вызывает окно лифта с заданным ID: ELEV_BOS1 (0) ELEV_BOS2 (1) ELEV_MASTR1 (2) ELEV_MASTR2 (3) ELEV_MILB1 (4) ELEV_MILB2 (5) ELEV_GLOW1 (6) ELEV_GLOW2 (7) ELEV_VAULT (8) ELEV_NECVLT (9) ELEV_SIERRA1 (10) ELEV_SIERRA2 (11) ELEV_SIERRAS (12) meta_switch = METARULE_PARTY_COUNT (16), meta_par = DONT_LIST_HIDDEN_MEMBERS (0), LIST_HIDDEN_MEMBERS (1) число партийцев в команде игрока meta_switch = METARULE_AREA_KNOWN (17), meta_par - номер локации (см. MAPS.H) TRUE - если локация изветстна, иначе - FALSE meta_switch = METARULE_WHO_ON_DRUGS (18), meta_par - указатель на объект: TRUE - если объект находится по воздействием наркотиков, иначе - FALSE meta_switch = METARULE_MAP_KNOWN (19), meta_par - номер карты (см. MAPS.H) TRUE - если карта изветстна, иначе - FALSE meta_switch = METARULE_CAR_CURRENT_TOWN (30), meta_par = 0: возвращает номер города (см. MAPS.H), где находится машина meta_switch = METARULE_GIVE_CAR_TO_PARTY (31), meta_par = 0: усаживает команду игрока в машину и выводит карту мира meta_switch = METARULE_GIVE_CAR_GAS (32), meta_par - количество топлива: заправляет машину указанным количеством топлива meta_switch = METARULE_SKILL_CHECK_TAG (40), meta_par - номер скилла (см. DEFINE.H): TRUE - если скилл помечен как tagged, иначе - FALSE meta_switch = METARULE_DROP_ALL_INVEN (42), meta_par - указатель на объект: заставляет указанный объект сбросить все предметы из инвентаря себе под ноги meta_switch = METARULE_INVEN_UNWIELD_WHO (43), meta_par - указатель на объект: убрать оружие/предметы из обеих рук в инвентарь meta_switch = METARULE_GET_WORLDMAP_XPOS (44), meta_par = 0: позиция по x на карте мира meta_switch = METARULE_GET_WORLDMAP_YPOS (45), meta_par = 0: позиция по y на карте мира meta_switch = METARULE_CURRENT_TOWN (46), meta_par = 0: вернуть номер текущего города (см. MAPS.H) meta_switch = METARULE_LANGUAGE_FILTER (47), meta_par = 0: TRUE - если фильтр мата включен, иначе - FALSE meta_switch = METARULE_VIOLENCE_FILTER (48), meta_par = 0: уровень жестокости: VLNCLVL_NONE (0) VLNCLVL_MIN (1) VLNCLVL_NORMAL (2) VLNCLVL_MAX (3) meta_switch = METARULE_W_DAMAGE_TYPE (49), meta_par - указатель на оружие Возвращает тип повреждений, нанесенных оружием WEAP. Используется исключительно в контексте damage_p_proc с параметром (target_obj) или (source_obj) чтобы определить, повреждения какого типа получил объект (например, проверка на то, были ли дверь/запертый контейнер подорваны). Возможные значения: DMG_normal_dam (0) DMG_laser (1) DMG_fire (2) DMG_plasma (3) DMG_electrical (4) DMG_emp (5) DMG_explosion (6) meta_switch = METARULE_CRITTER_BARTERS (50), meta_par - указатель на объект: TRUE - с криттером возможен бартер, иначе - FALSE meta_switch = METARULE_CRITTER_KILL_TYPE (51), meta_par - указатель на объект: возвращает тип криттера по видам убитых: KILL_TYPE_men_kills (0) KILL_TYPE_women_kills (1) KILL_TYPE_children_kills (2) KILL_TYPE_super_mutant_kills (3) KILL_TYPE_ghoul_kills (4) KILL_TYPE_brahmin_kills (5) KILL_TYPE_radscorpion_kills (6) KILL_TYPE_rat_kills (7) KILL_TYPE_floater_kills (8) KILL_TYPE_centaur_kills (9) KILL_TYPE_robot_kills (10) KILL_TYPE_dog_kills (11) KILL_TYPE_manti_kills (12) KILL_TYPE_deathclaw_kills (13) KILL_TYPE_plant_kills (14) KILL_TYPE_gecko_kills (15) KILL_TYPE_alien_kills (16) KILL_TYPE_giant_ant_kills (17) meta_switch = DEFINE_METARULE_SET_CAR_CARRY_AMOUNT (52), meta_par - количество: задать макcимальный вес груза для машины meta_switch = DEFINE_METARULE_GET_CAR_CARRY_AMOUNT (53), meta_par = 0: вернуть макcимальный вес груза для машины |
| Author: TryKos 06.05.03 12:09:10 | "BIS:" - название вызова в фирменной документации Black Isle Studios. Misc(13, 0) BIS: signal_end_game; Немедленное завершение игры и выход в главное меню. Следующие два вызова возвращают верный результат только в контексте map_enter proc Misc(14, 0) BIS: map_first_run; Возвращает True (не 0), если карта запускается в первый раз. Misc(22, 0) BIS: is_loading_game; Возвращает True, если карта в данный момент загружается. Misc(15, ElevatorID) BIS: elevator (X); Вызывает окно лифта с заданным ID, значения жестко заданы: #define ELEV_BOS1 (0) // Brotherhood of Steel main elevator #define ELEV_BOS2 (1) // Brotherhood of Steel surface elevator #define ELEV_MASTR1 (2) // Master's upper-level elevator #define ELEV_MASTR2 (3) // Master's lower-level elevator #define ELEV_MILB1 (4) // Military Base upper-level elevator #define ELEV_MILB2 (5) // Military Base lower-level elevator #define ELEV_GLOW1 (6) // Glow Elevator upper #define ELEV_GLOW2 (7) // Glow elevator lower #define ELEV_VAULT (8) // Vault13 elevator #define ELEV_NECVLT (9) // Necropolis elevator #define ELEV_SIERRA1 (10) // Sierra Elev 1 (1-2-3) #define ELEV_SIERRA2 (11) // Sierra Elev 2 (3-4) #define ELEV_SIERRAS (12) // Sierra Service Elev (1-2-3-4) Misc(16, ListHiddenMembers) BIS: party_member_count (ListHiddenMembers); Возвращает количество членов команды (спутников), считая и игрока. ListHiddenMembers = 0/1 - не считать / считать скрытых членов (типа багажника машины). Misc(18, CritterAddr) BIS: drug_influence (WHO); Возвращает True, если заданный криттер находится в данный момент под воздействием каких-либо наркотиков. Иначе возвращает False. Misc(31, 0) BIS: car_give_to_party; Усаживает команду в машину и выходит на Карту Мира. Misc(32, GasAmount) BIS: car_give_gas (AMOUNT); Дозаправляет машину заданным количеством топлива. Misc(42, CritterAddr) BIS: obj_drop_everything (WHO); Заставляет криттера выбросить весь инвентарь себе под ноги. Misc(43, CritterAddr) BIS: inven_unwield (WHO); Заставляет криттера убрать любые оружие/предметы из обеих рук. Если в данный момент анимация отключена, результат действия команды выглядит как внезапная смена картинки. Misc(47, 0) BIS: language_filter_is_on; Возвращает True, если фильтр мата в текущий момент включен, иначе возвращает False. Misc(48, 0) BIS: violence_level_setting; Возвращает текущий уровень жестокости, установленный в настройках игры. Возможные значения: #define VLNCLVL_NONE 0 #define VLNCLVL_MIN 1 #define VLNCLVL_NORMAL 2 #define VLNCLVL_MAX 3 Misc(49, ObjectAddr) BIS: weapon_dmg_type(WEAP); Возвращает тип повреждений, нанесенных объектом-оружием WEAP. Используется исключительно в контексте damage_p_proc с параметром (target_obj) или (source_obj) чтобы определить, повреждения какого типа получил объект (почти 100% случаев - проверка на то, были ли дверь/запертый контейнер подорваны). Типы возвращаемых значений: #define DMG_normal_dam 0 #define DMG_laser 1 #define DMG_fire 2 #define DMG_plasma 3 #define DMG_electrical 4 #define DMG_emp 5 #define DMG_explosion 6 Misc(50, CritterAddr) BIS: critter_can_barter (WHO); Видимо, возвращает True, если криттер (WHO) может заниматься бартером. Misc(51, CritterAddr) BIS: critter_kill_type (WHO); Возвращает тип криттера (т.е группу, в которую попадает криттер по последствиям его убийства для игрока). Например, с помощью этой команды определяется, используется ли Mutagenic Serum на супер-мутанте, либо на ком еще: procedure use_obj_on_p_proc begin //Target_obj == указатель на того, кому вкалывают Mutagenic Serum if (critter_kill_type(target_obj) == KILL_TYPE_super_mutant_kills) then ... Возможные значения: #define KILL_TYPE_men_kills 0 #define KILL_TYPE_women_kills 1 #define KILL_TYPE_children_kills 2 #define KILL_TYPE_super_mutant_kills 3 #define KILL_TYPE_ghoul_kills 4 #define KILL_TYPE_brahmin_kills 5 #define KILL_TYPE_radscorpion_kills 6 #define KILL_TYPE_rat_kills 7 #define KILL_TYPE_floater_kills 8 #define KILL_TYPE_centaur_kills 9 #define KILL_TYPE_robot_kills 10 #define KILL_TYPE_dog_kills 11 #define KILL_TYPE_manti_kills 12 #define KILL_TYPE_deathclaw_kills 13 #define KILL_TYPE_plant_kills 14 #define KILL_TYPE_gecko_kills 15 #define KILL_TYPE_alien_kills 16 #define KILL_TYPE_giant_ant_kills 17 Misc(52, CarCarryAmount) BIS: set_car_carry_amount (VALUE); Задает максимальный вес груза для машины. Misc(53, 0) BIS: set_car_carry_amount (VALUE); Возвращает максимальный вес груза для машины. |
| Author: Communist 26.06.02 6:01:19 | Misc(51,Entity): Entity is an entity in the game - usually Self. Return's the status of the entity: 2 = Child. |
| Author: legacy information 25.06.02 16:02:57 | Misc(14,0):
Not quite sure, but it has something to do with entering the map since that's always where you find it...
Misc(16,0):
Number of NPC's following you
Misc(17,Town):
Is Town on your Pipboy. To find a list of the cities, open text/english/game/map.msg, in the {1500}. Of course remove 1500 for the number reference. - Another table is in data/city.txt (see CurrentLocation).
To make things easyer, here's the list:
Misc(18,Entity):
Wether Sender is in the "Light" in relation to Entity.
Misc(19,25):
? 'trap door'
Misc(22,0):
Have you entered this map from the "Town map".
Misc(30,0):
Town (see Misc(17,Town) table...) in which the car is.
Misc(40,Skill):
This checks wether you tagged a skill.
Misc(44,0):
X location on world map.
Misc(45,0):
Y Location on world map.
Misc(46,0):
Current town (See CurrentLocation)
Misc(47,0):
Checks the player sex. Not sure if it compares with Self.
Misc(49,Entity):
I beleive this is used for entities, to check if you can break doors by damaging them (otherwise they're invincible like the enclave doors). If 6 then it would mean the door is not invincible...
Misc(51,Entity):
Entity is an entity in the game - usually Self.
Return's the status of the entity:
2 = Dead.
c Red, from Duck And Cover forum |
| Author: legacy information 22.06.02 13:29:01 | Сложнейшая команда 810B. У нее два аргумента, причем первый может принимать лишь строго определенные значения (SoftICE так говорит J ). Варианты первого аргумента - от Dh до 13h, 16h, 1Eh, 1Fh, 20h, 28h и от 2Ah до 35h. На каждое из перечисленных значений есть свой кусочек кода, причем второй аргумент (предположительно) используется не во всех вариантах. Если первый аргумент не равен ни одному из приведенных значений, то команда не помещает в стек никакого результата. Далее будем раскапывать ее действия по отдельным значениям первого аргумента. Итак, для 28h второй аргумент - номер скилла чузена. В этом случае команда возвращает 1, если на данный скилл установлен тэг, и 0, если не установлен. Для 1E (второй аргумент не используется) возвращает содержимое ячейки по адресу 672E68, а именно - номер города (из city.txt), в котором в данный момент находится машина. Для 20: берет содержимое ячейки по адресу 672E6C и складывает со вторым аргументом. Если полученное значение меньше или равно 80000 (десятичных), то сумма помещается в указанную ячейку и возвращается 0, а если сумма больше 80000, то в ячейку заносится 80000, и возвращается сумма за вычетом 80000. Это не деньги, т.к. проверялось на чузене без копейки (вполне обычном, без раскачанных характеристик) и у него в ячейке 672E6C было 80000. Для 11 второй аргумент - номер города (area из city.txt)! Начало блоков описания городов хранится в ячейке 51DDE8. Размер блока - 360 байт (причем в начале блока - название города). Если в блоке ячейка 38h равна единице и ячейка 40h не равна нулю, то возвращается значение из ячейки 40h, иначе 0. Связано это, видимо, с наличием города в пипбое. Проверялось на Арройо, Клэмате и Наварро. Для Арройо [38h]=1, [40h]=2, для Клэмата [38h]=1, [40h]=1, для Наварро [38h]=0, [40h]=0. Кстати, в этом коде есть проверка, не превышает ли номер города 30h, т.е. предельное количество городов на карте - 49, как и описано в city.txt. По контексту скриптов локаций - возвращает 0, если город не отмечен на карте. Для 0D (второй аргумент не используется) помещает 2 в ячейку 5186BC, после чего бирюля выходит в главное меню (с Анклавной мордой). Для 0E (второй аргумент не используется) выбирается байт из ячейки 631D7C. Если он четный, то возвращается 1, иначе 0. По контексту скриптов локаций можно предположить, что единица возвращается, если чузен оказывается в локации в первый раз, и 0 - во все последующие. Для 10 (второй аргумент не используется) возвращает количество активных спутников чузена, считая его самого. Например, если чузен один (в смысле совсем один, а не Chosen One J ), то возвращается единица, если он с Суликом, Виком, Маркусом, то возвращается 4, но достаточно кого-нибудь из них попросить подождать тебя туточки, как их станет трое не отходя от кассы. Численность личного состава хранится по адресу 519D9C. Для 0F вызывает лифтовое окно. Второй параметр определяет какой это лифт. Для artemple удается получить доступ к самым разнообразным местам, в том числе к таким, где лифт не предусмотрен (пастбище Торра, предместье Волт-Сити). Значения 4 и 5 дают доступ к двум лифтам Military Base, а 8 - к лифту 13-го Волта. Определенной системы в доступе к лифтам не найдено. Предположительно, лифты описываются в map. Нужно отметить, что панель лифта вызывается не самой командой, а после завершения скрипта, в котором была вызвана эта команда. Для 12 выяснить смысл не удалось. Перебирается цепочка записей. Адрес первой записи берется из 6648C0. В записи обрабатываются двойные слова со смещениями 4, 8 и 10h. Проверяется равно ли двойное слово по смещению 8 второму аргументу и равно ли двойное слово по смещению 4 нулю. Если так, то возвращается единица, в противном случае переходят к следующей записи, адрес которой выбирается из двойного слова по смещению 10. Если же этот адрес равен нулю, то перебор заканчивается и возвращается 0. Второй аргумент, по всей видимости, должен быть CritterAddr спутников чузена, т.к. двойное слово по смещению 8 в данной цепочке равно либо нулю, либо этому самому^^^^^^^^^. Двойное слово по смещению 4 в наблюдавшихся ситуациях никогда не было равно нулю. Наиболее частые его значения - 3, 4, Ch, Dh. Для 16 (второй аргумент не используется) - просто возвращает двойное слово из 5194B4. Там всегда 0. Непосредственно за этой ячейкой следует строка ARTEMPLE.MAP, причем и тогда, когда чузен находится в любой другой локации. За сим исследования этой команды прекращаю. Задолбался. Как говорит Чиграков, "может в следущий раз". |