Exemplo n.º 1
0
        public static void CheckPrologeEventPointerErrors(uint mapid, List <ErrorSt> errors)
        {
            List <U.AddrResult> units = EventCondForm.MakeUnitPointer(mapid);

            for (int i = 0; i < units.Count; i++)
            {
                uint addr     = units[i].addr;
                uint pageSize = Program.ROM.RomInfo.eventunit_data_size();
                for (; Program.ROM.u8(addr) != 0x0; addr += pageSize)
                {
                    if (!U.isSafetyOffset(addr + pageSize))
                    {
                        break;
                    }
                    uint unitGrow = Program.ROM.u8(addr + 3);
                    uint assign   = U.ParseUnitGrowAssign(unitGrow);
                    if (assign != 0)
                    {//自軍でないなら関係ない.
                        continue;
                    }

                    uint unit_id = Program.ROM.u8(addr);
                    if (!UnitForm.isMainUnit(unit_id))
                    {
                        continue;
                    }

                    if (!UnitForm.isLoadClass(unit_id))
                    {
                        uint class_id = Program.ROM.u8(addr + 1);
                        if (class_id == 0)
                        {//未入力の場合は推測します.
                            class_id = UnitForm.GetClassID(unit_id);
                        }
                        if (!ClassForm.isLoadClass(class_id))
                        {
                            continue;
                        }
                    }
                    //条件にマッチするロードユニットを発見
                    return;
                }
            }

            if (Program.ROM.RomInfo.version() == 7)
            {
                errors.Add(new FELint.ErrorSt(EventCondForm.CONDTYPE.PLAYER_UNIT, U.NOT_FOUND
                                              , R._("序章でUnitID:0x01 or 0x02 or 0x03のロードユニットを仲間にしていません。\r\n序章で、このロードユニットを仲間に入れないと多くのイベントがフリーズします。")));
            }
            else
            {
                errors.Add(new FELint.ErrorSt(EventCondForm.CONDTYPE.PLAYER_UNIT, U.NOT_FOUND
                                              , R._("序章でUnitID:0x01のロードユニットを仲間にしていません。\r\n序章で、このロードユニットを仲間に入れないと多くのイベントがフリーズします。")));
            }
        }