Для начала, просто удобные расширения для работы с битмасками, вот мои реализации возможно несколько кривоватые, но проверенны и работают, если нужно могу подчистить:
Code:
********************************************************************************
** Check specific bit(s) in the bitmask.
** Example if we need to know if monster in stack 0 is Alive and can Fly
** Alive - decimal flag representation: 16
** Fly - decimal flag representation: 2
** !VRy1:S16; [y1 bitmask for Alive (16) flag]
** !VRy1:+2; [y1 bitmask for Alive (16) and Fly (2) flags (OPTIONAL step you may check only 1 flag or more then 2 flags)]
** !BM0:F?y2; [y2 Monster Flags of stack 0]
** !FU21005:Py2/y1/?y3; [y3 (=0: if monster in stack 0 is Alive and can Fly; <>0: otherwise]
********************************************************************************
** x1 == bitmask to check (for example Monster Flags)
** x2 == bitmask with requested flags (mask with a requested flags which should be checked in x1)
** x3 == ?RESULT (0: all requested bits are 1 ; <>0: bitmask of a bits which are 0 in the x1 but 1 in x2)
!?FU(EraBitmaskCheck);
!!VRy1:Sx1; [y1 = x1]
!!VRy2:Sx2; [y2 = x2]
!!VRy1:&y2; [y1 = y1 & y2]
!!VRy1:Xy2; [y1 = (y1 & y2) XOR y2]
!!VRx3:Sy1; [x3 result]
********************************************************************************
** Remove specific bits from the bitmask.
** Example if we need to remove Alive and can Fly flags from monster in stack 0
** Alive - decimal flag representation: 16
** Fly - decimal flag representation: 2
** !VRy1:S16; [y1 bitmask for Alive (16) flag]
** !VRy1:+2; [y1 bitmask for Alive (16) and Fly (2) flags]
** !BM0:F?y2; [y2 Monster Flags of stack 0]
** !FU21006:Py2/y1/?y3; [y3 new monster flags bitmask without Alive and Fly abilities]
** !BM0:Fy3; [change Monster Flags of stack 0]
********************************************************************************
** x1 == bitmask to unset (for example Monster Flags)
** x2 == bitmask with requested flags (mask with a requested flags which should be checked in x1)
** x3 == ?RESULT x1 bitmask with all 1 bits from x2 set to 0 in x1
!?FU(EraBitmaskUnset);
!!VRy1:Sx1; [y1 = x1]
!!VRy2:Sx2; [y2 = x2]
!!VRy1:&y2; [y1 = y1 & y2]
!!VRy1:X-1; [y1 = INVERT(y1 & y2)]
!!VRy1:&x1; [y1 = INVERT(y1 & y2) AND x1]
!!VRx3:Sy1; [x3 result]
Дальше более специфические предложения, они вроде как нужны и могут оказаться полезными.
Вот например изменение текста описания монстра в бою, оно работает, основано на коде
igrik, но в таком виде его нельзя в библиотеку. Для библиотеки нужно сделать версию которая не будет хранить ссылку на оригинальный текст, а будет ее возвращать при вызове, чтобы пользователь сам хранил ее чтобы передать в вызов функции вернуть как было.
Опять таки специфический функционал, отключить стандартные эффекты артефакта,
вот, вопрос насколько это совместимо с разными модами.
Из
этой темы функции для одновременной анимации стеков. Возможно нужна еще функция для синхронного проигрывания анимации стека (не одновременной)?
То что уже есть в FUN.erm экономия Z переменных и триггер-инициализация 7700.
Из дополнительного, возможно нужны функции для получения адреса-ссылки любой Z переменной включая ЕРТ.