Fallout2 Opcode Playground

Opcodes: 8000-801F, 8020-803F, 8040-805F,
8060-807F, 8080-809F, 80A0-80BF, 80C0-80DF,
80E0-80FF, 8100-811F, 8120-813F, 8140-8155
 
List Opcodes:Used in Fallout 2Named
Known to DecompilerDescribed

Descriptions for 80e1

Opcode80e1, Misc2
>> subfunction   Misc2

Author: Wasteland Ghost

08.02.05 12:14:11

Синтаксис оригинального компилятора:
int metarule3(int meta3_switch, int meta3_par1, int meta3_par2, int meta3_par3) - ещё одна функция работы с множеством параметров игры, отличается от функции metarule количеством аргументов
Аргументы:
meta3_switch - переключатель
meta3_par1, meta3_par2, meta3_par3 - параметры
Возвращаемое значение:
meta3_switch = METARULE3_CLR_FIXED_TIMED_EVENTS (100), meta3_par1 - указатель на объект, meta3_par2 - значение параметра FIXED_VAL, meta3_par3 = 0:
удаляет для данного криттера событие по таймеру, определённое FIXED_VAL
meta3_switch = METARULE3_MARK_SUBTILE (101), meta3_par1 - позиция по x, meta3_par2 - позиция по y, meta3_par3 - радиус:
помечает тайлы в заданном радиусе на карте мира как посещённые
meta3_switch = METARULE3_SET_WM_MUSIC (102), meta3_par1 - индекс карты (см. MAPS.H), meta3_par2 - имя asm файла, meta3_par3 = 0;
установить фоновую музыку для указанной карты
meta3_switch = METARULE3_GET_KILL_COUNT (103), meta3_par1 - тип криттера, meta3_par2 = 0, meta3_par3 = 0:
вернуть число убитых игроком криттеров, определяемых параметром meta3_par1
meta3_switch = METARULE3_MARK_MAP_ENTRANCE (104), meta3_par1 - индекс карты (см. MAPS.H), meta3_par2 - состояние (OFFSTATE (0) или ONSTATE (1)), meta3_par3 - уровень (0...2 или -1 - все):
задать состояние входа на карту (выкл/вкл)
meta3_switch = METARULE3_WM_SUBTILE_STATE (105), meta3_par1 - позиция по x, meta3_par2 - позиция по y, meta3_par3 = 0:
выдать состояние тайла с заданными координатами на карте мира:
UNKNOWNTILETYPE (0) - неизвестен
KNOWNTILETYPE (1) - известен
VISITEDTILETYPE (2) - посещён
meta3_switch = METARULE3_TILE_GET_NEXT_CRITTER (106), meta3_par1 - номер хекса, meta3_par2 - уровень (0...2), meta3_par3 - указатель на предыдущего криттера:
возвращает указатель на следующего криттера
meta3_switch = METARULE3_ART_SET_BASE_FID_NUM (107), meta3_par1 - указатель на криттера, meta3_par2 - FID, meta3_par = 0:
изменить базовый номер FID (идентификатора фрейма)
meta3_switch = METARULE3_TILE_SET_CENTER (108), meta3_par1 - номер тайла, meta3_par2 - уровень (0...2), meta3_par3 = 0:
центрировать экран на указанную точку
Author: TryKos

29.04.03 6:02:20

Многофункциональная команда, похожая на Misc, принимает 4 параметра.
"BIS:" - название вызова в фирменной документации Black Isle Studios.

Misc2(100, ObjectAddr, FixedValue, 0)
BIS: rm_fixed_timer_event (WHO,FIXED_VAL);
Удаляет все таймерные события (регистрации timed_p_proc) с фиксированным параметром FixedValue для скрипта объекта WHO.

Misc2(101, XPos, YPos, Radius)
BIS: mark_world_subtile_visited (XPOS,YPOS,RADIUS);
Помечает сектора карты мира как "посещенные"
в некотором радиусе от заданной точки.

102 - не используется (закомментирован).

Misc2(103, CritterType, 0, 0)
BIS: player_kill_count (TYPE);
Возвращает количество убитых игроком существ типа Type (см. KILL_TYPE в описании Misc)

Misc2(104, MapIdx, State, Elev)
BIS: mark_map_entrance_elev_state (MAPIDX,ELEV,STATE);
BIS: mark_map_entrance_state (MAPIDX,STATE); (здесь ELEV = -1)
Переменная State может быть:
#define OFFSTATE 0
#define ONSTATE 1
Значение этой команды неизвестно, но судя по BIS-исходникам - нигде не используется.

Misc2(105, XPos, YPos, 0)
BIS: wm_get_subtile_state (XPOS,YPOS);
Возвращает текущее состояние сектора мировой карты:
#define UNKNOWNTILETYPE 0 //неизвестный
#define KNOWNTILETYPE 1 //известный
#define VISITEDTILETYPE 2 //посещенный

Misc2(106, Tile, Elevation, LastCritter)
BIS: tile_get_next_critter (tile, elevation, lastCritter);
Возвращает ObjectAddr криттера по некоторому алгоритму (в описании сказано,
что эта команда really messy 8)).
Используется всего в трех скриптах (CCDRILL, ZISLOTS, FSTNKRDR)
для нахождения ближайшего к заданному тайлу криттера, последний параметр
в данных скриптах равен 0.
Например в ССDRILL (скрипт Сержанта в Наварро) команда используется для перебора
часовых, которые бросают реплики "в спину" распекающему их сержанту.

Misc2(107, Who, Num, 0)
BIS: art_change_fid_num (WHO, NUM);
Заменяет fid (идентификатор графики) криттера на другой (Num).
Используется только в скрипте Гориса для замены его графики в начале и конце боя
(когда он скидывает/надевает свой балахон).

Misc2(108, TileNum, 0, 0)
BIS: tile_set_center (tileNum);
Вероятно, устанавливает центр экрана на заданный тайл карты. Используется
только в одном скрипте ECBDYGRD (скрипт случайной встречи с Хорриганом,
расстреливающим фермера и его семью).

Misc2 с параметрами (110, 0, 0, 0) используется в скрипте ZSCARDRV версии 1.02,
в исходниках и заголовках версии 1.0 отсутствует.