コード例 #1
0
        //斧使いが、手斧のモーションを持っているかテストする.
        static void MakeCheckErrorAxs(InputFormRef ifr
                                      , List <U.AddrResult> axsItems
                                      , List <U.AddrResult> classList
                                      , uint cid
                                      , List <FELint.ErrorSt> errors)
        {
            bool        axsUser = false;
            List <uint> axsList = new List <uint>();

            List <U.AddrResult> list = ifr.MakeList();

            for (int i = 0; i < list.Count; i++)
            {
                uint b0 = Program.ROM.u8(list[i].addr);
                uint b1 = Program.ROM.u8(list[i].addr + 1);

                if (b1 == 1)
                {     //1=種類
                    if (b0 == 2)
                    { //2=斧
                        axsUser = true;
                    }
                }
                else if (b1 == 0)
                {//0=アイテム
                    axsList.Add(b0);
                }
            }

            if (axsUser == false)
            {//問題なし
                return;
            }
            //斧使い 全種類の手斧をもっているか?
            for (int i = 0; i < axsItems.Count; i++)
            {
                uint itemid = axsItems[i].tag;
                if (axsList.IndexOf(itemid) >= 0)
                {//もっている.
                    continue;
                }

                //取りこぼし.

                //武器レベルS ?
                uint wlevel = ItemForm.GetItemWeaponLevelAddr(axsItems[i].addr);
                if (wlevel >= 250)
                {
                    //上級職ではない?
                    bool isHigh = ClassForm.isHighClassAddr(classList[(int)cid].addr);
                    if (isHigh == false)
                    {//上級職でないので、この武器を使えません.
                        continue;
                    }
                }

                if (PatchUtil.SearchCache_HandAxsWildCard() == PatchUtil.HandAxsWildCard_extends.Enable)
                {
                    if (axsList.IndexOf(0x28) >= 0)
                    {//手斧モーションで代用可
                        continue;
                    }
                }
                errors.Add(new FELint.ErrorSt(FELint.Type.BATTLE_ANIME_CLASS, ifr.BaseAddress
                                              , R._("クラス({0})は、斧を利用できますが、手斧({1})の設定がありません。\r\nGBAFEでは、手斧系の武器は、アイテムごとに投げるモーションを設定する必要があります。"
                                                    , classList[(int)cid].name
                                                    , axsItems[i].name), cid));
            }
        }