Exemplo n.º 1
0
        void AutoCollectByTargetSupport(uint uid, uint target_uid, uint init_value, uint add_value, Undo.UndoData undodata)
        {
            if (target_uid == 0)
            {
                return;
            }
            uint addr = UnitForm.GetSupportAddrWhereUnitID(target_uid);

            if (addr == U.NOT_FOUND)
            {
                return;
            }
            if (!U.isSafetyOffset(addr))
            {
                return;
            }
            uint target_limit = addr + SUPPORT_LIMIT;

            for (; addr < target_limit; addr++)
            {
                uint target_uid2 = Program.ROM.u8(addr);
                if (uid != target_uid2)
                {
                    continue;
                }

                Program.ROM.write_u8(addr + SUPPORT_LIMIT, init_value, undodata);
                Program.ROM.write_u8(addr + SUPPORT_LIMIT + SUPPORT_LIMIT, add_value, undodata);
                return;
            }
        }
Exemplo n.º 2
0
        static void MakeCheckError_SelfCheck(List <FELint.ErrorSt> errors
                                             , uint support_addr, uint id
                                             , uint uid, uint target_uid, uint init_value, uint add_value)
        {
            //このユニットの支援相手が、自分に対して支援をもっているか確認します.
            uint addr = UnitForm.GetSupportAddrWhereUnitID(target_uid);

            if (addr != U.NOT_FOUND)
            {
                uint target_limit = addr + SUPPORT_LIMIT;
                for (; addr < target_limit; addr++)
                {
                    if (!U.isSafetyOffset(addr + SUPPORT_LIMIT + SUPPORT_LIMIT))
                    {//危険なアドレス
                        break;
                    }
                    uint target_uid2 = Program.ROM.u8(addr);
                    if (uid != target_uid2)
                    {
                        continue;
                    }

                    uint init_value2 = Program.ROM.u8(addr + SUPPORT_LIMIT);
                    uint add_value2  = Program.ROM.u8(addr + SUPPORT_LIMIT + SUPPORT_LIMIT);
                    if (init_value != init_value2 || add_value != add_value2)
                    {
                        errors.Add(new FELint.ErrorSt(FELint.Type.SUPPORT_UNIT, support_addr
                                                      , R._("ユニット({0})->ユニット({1})へ支援と、その逆の、ユニット({1})->ユニット({0})へ支援の設定値が違います。\r\n初期値({2} vs {3})、進行度({4} vs {5})\r\n初期値と進行度は、同じ値にする必要があります。"
                                                            , UnitForm.GetUnitNameWithID(uid), UnitForm.GetUnitNameWithID(target_uid), init_value, init_value2, add_value, add_value2
                                                            )
                                                      , id));
                    }
                    return;
                }
            }

            errors.Add(new FELint.ErrorSt(FELint.Type.SUPPORT_UNIT, support_addr
                                          , R._("ユニット({0})->ユニット({1})への支援はありますが、逆に、ユニット({1})->ユニット({0})への支援がありません。"
                                                , UnitForm.GetUnitNameWithID(uid), UnitForm.GetUnitNameWithID(target_uid)
                                                )
                                          , id));
        }