示例#1
0
        public static string ToFilename(IHasResource r)
        {
            switch (r.Resource.Type)
            {
            case ResourceType.Campaign: return(r.Resource.Name + ".CMP");

            case ResourceType.DropTable: return(r.Resource.Name + ".DRP");

            case ResourceType.Graphic: return(r.Resource.Name + ".GRF");

            case ResourceType.Item: return(r.Resource.Name + ".ITM");

            case ResourceType.Monster: return(r.Resource.Name + ".MON");

            case ResourceType.Music: return(r.Resource.Name + ".SNG");

            case ResourceType.NPC: return(r.Resource.Name + ".NPC");

            case ResourceType.Palette: return(r.Resource.Name + ".PAL");

            case ResourceType.PC: return(r.Resource.Name + ".PC");

            case ResourceType.Script: return(r.Resource.Name + ".JCC");

            case ResourceType.Sound: return(r.Resource.Name + ".WAV");

            case ResourceType.Source: return(r.Resource.Name + ".JC");

            case ResourceType.Strings: return(r.Resource.Name + ".STR");

            case ResourceType.Zone: return(r.Resource.Name + ".ZON");

            default: return(r.Resource.Name);
            }
        }
示例#2
0
        public void Read(BinaryReader br)
        {
            Version.Read(br);
            uint count  = br.ReadUInt32();
            uint diroff = br.ReadUInt32();

            Flags = (DjnFlags)br.ReadUInt16();

            Resources.Clear();
            br.BaseStream.Seek(diroff, SeekOrigin.Begin);
            for (int i = 0; i < count; i++)
            {
                Resource r = new Resource();

                r.Read(br, Flags.HasFlag(DjnFlags.Design));
                IHasResource res = Construct(r);

                long off = br.BaseStream.Position;
                br.BaseStream.Seek(r.Offset, SeekOrigin.Begin);
                res.Read(br);
                br.BaseStream.Seek(off, SeekOrigin.Begin);

                Resources[r.ID] = res;
            }
        }
示例#3
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Item    = r as Item;

            NameBox.Text = ctx.GetString(Item.NameId);

            Globals.Populate(ImageBox, Context.Djn.Things);
            ImageBox.SelectedItem = Globals.Resolve(Context, Item.ImageId);

            TypeBox.SelectedIndex = (int)Item.Type;

            ValueBox.Value = Item.Value;

            SpecialBox.SelectedIndex = (int)Item.Special;
            SArg1Box.Value           = Item.SpecialArg1;
            SArg2Box.Value           = Item.SpecialArg2;

            StatsBoxes.Stats = Item.Stats;
            StatsBoxes.UpdateFields();

            LightFlag.Checked     = Item.Flags.HasFlag(ItemFlags.Light);
            HeavyFlag.Checked     = Item.Flags.HasFlag(ItemFlags.Heavy);
            StackedFlag.Checked   = Item.Flags.HasFlag(ItemFlags.Stacked);
            MediumFlag.Checked    = Item.Flags.HasFlag(ItemFlags.MediumRange);
            LongFlag.Checked      = Item.Flags.HasFlag(ItemFlags.LongRange);
            DexterityFlag.Checked = Item.Flags.HasFlag(ItemFlags.DexterityWeapon);
        }
示例#4
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            PC      = r as PC;

            Globals.Populate(PortraitBox, Context.Djn.Portraits);

            AttitudeBox.Value         = PC.Attitude;
            BackRowBox.Checked        = PC.Flags.HasFlag(PCFlags.BackRow);
            JobBox.SelectedIndex      = (int)PC.Job;
            NameBox.Text              = ctx.GetString(PC.NameId);
            PartyBox.Checked          = PC.Flags.HasFlag(PCFlags.InParty);
            PortraitBox.SelectedItem  = Globals.Resolve(ctx, PC.PortraitId);
            PronounsBox.SelectedIndex = (int)PC.Pronouns;
            XPBox.Value = PC.Experience;

            for (int i = 0; i < Globals.NumJobs; i++)
            {
                jobLevels[i].Value = PC.JobLevels[i];
            }

            for (int i = 0; i < Globals.InventorySize; i++)
            {
                items[i].Context = ctx;
                items[i].Item    = PC.Items[i];
            }

            SkillsList.Values = PC.Skills;

            StatsBoxes.Stats = PC.Stats;
            StatsBoxes.UpdateFields();
        }
示例#5
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Source  = r as ScriptSource;

            CodeSource.Text = Source.Source;
        }
示例#6
0
        public void Rename(int id, string name)
        {
            IHasResource res = this[id];

            res.Resource.Name = name;
            ResourceChanged?.Invoke(this, res);
        }
        public void Setup(Context ctx, IHasResource r)
        {
            Context   = ctx;
            DropTable = r as DropTable;

            SetRowCount(DropTable.Drops.Count);
        }
示例#8
0
        private bool CheckResource(Token t, ResourceType ty, ResourceSubtype sty = ResourceSubtype.Unknown, ScriptType scty = ScriptType.Any)
        {
            IHasResource res = null;

            // no resources!
            if (Context.Djn == null)
            {
                return(false);
            }

            // TODO: unable to check?
            if (t.Type == TokenType.Expression)
            {
                return(true);
            }

            if (t.Type == TokenType.Reference)
            {
                res = Context.Djn.FindByName <IHasResource>(t.Value);
            }

            if (t.Type == TokenType.Number)
            {
                ushort id = ushort.Parse(t.Value);
                if (!Context.Djn.Contains(id))
                {
                    return(false);
                }

                res = Context.Djn[id];
            }

            if (res == null)
            {
                return(false);
            }
            if (res.Resource.Type != ty)
            {
                return(false);
            }
            if (sty != ResourceSubtype.Unknown && res.Resource.Subtype != sty)
            {
                return(false);
            }

            if (scty != ScriptType.Any)
            {
                if (scty == ScriptType.State && !res.Resource.Flags.HasFlag(ResourceFlags.Private))
                {
                    return(false);
                }
                if (scty == ScriptType.Script && res.Resource.Flags.HasFlag(ResourceFlags.Private))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#9
0
        public T FindByName <T>(string value) where T : IHasResource
        {
            IHasResource r = Resources.Values.OfType <T>().Where(p => p.Resource.Name == value).FirstOrDefault();

            if (r != null)
            {
                return((T)r);
            }
            return(default(T));
        }
示例#10
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Strings = r as Strings;

            StringList.Items.Clear();
            foreach (var pair in Strings.AsEnumerable())
            {
                StringList.Items.Add(AsItem(pair.Key, pair.Value));
            }
        }
示例#11
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            NPC     = r as NPC;

            Globals.Populate(PortraitBox, Context.Djn.Portraits);

            AttitudeBox.Value         = NPC.Attitude;
            NameBox.Text              = ctx.GetString(NPC.NameId);
            PortraitBox.SelectedItem  = Globals.Resolve(ctx, NPC.PortraitId);
            PronounsBox.SelectedIndex = (int)NPC.Pronouns;
        }
示例#12
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Editing = r;
            Grf     = r as Grf;

            // TODO: this doesn't copy the original resource so it will overwrite even if you don't hit save

            SubtypeBox.SelectedIndex = (int)r.Resource.Subtype;
            UpdateImageCount();
            ShowImage();
        }
示例#13
0
        public void EmitArgument(Token tok)
        {
            switch (tok.Type)
            {
            case TokenType.Number:
                Emit(Op.PushLiteral);
                Emit(short.Parse(tok.Value));
                break;

            case TokenType.String:
                ushort index = SaveString(tok.Value);
                Emit(Op.PushLiteral);
                Emit((short)index);
                break;

            case TokenType.Identifier:
                Variable var = Resolve(tok.Value);
                if (var == null)
                {
                    throw new MissingDefinitionException($"Unknown identifier: {tok.Value}");
                }

                EmitPush(var);
                break;

            case TokenType.Internal:
                if (!Env.Internals.ContainsKey(tok.Value))
                {
                    throw new MissingDefinitionException($"Unknown internal: {tok.Value}");
                }

                Emit(Op.PushInternal);
                Emit((byte)Env.Internals[tok.Value]);
                break;

            case TokenType.Expression:
                EmitExpression((tok as ExpressionToken).Tokens);
                break;

            case TokenType.Reference:
                IHasResource hr = Context.Djn?.Resources.Values.FirstOrDefault(r => r.Resource.Name == tok.Value);
                if (hr == null)
                {
                    throw new MissingDefinitionException($"Unknown resource: {tok.Value}");
                }

                Emit(Op.PushLiteral);
                Emit((short)hr.Resource.ID);
                break;

            default: throw new ParseException($"Cannot emit {tok}");
            }
        }
示例#14
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Zone    = r as Zone;

            Context.UnsavedChangesChanged += Context_UnsavedChangesChanged;
            Ui.Centre  = new Point(Zone.Width / 2, Zone.Height / 2);
            Ui.Context = ctx;
            Ui.Zone    = Zone;

            Tools.Add(new WallTypeCycler(Context));
            Tools.Add(new AreaDefiner(Zone, Ui, Context));
        }
示例#15
0
        public ushort Add(IHasResource res)
        {
            int id = NextResourceId;

            if (NextResourceId == 0 || NextResourceId > ushort.MaxValue)
            {
                throw new IndexOutOfRangeException($"Too many resources.");
            }

            res.Resource.ID = (ushort)id;
            Resources[id]   = res;

            ResourceChanged?.Invoke(this, res);
            return((ushort)id);
        }
示例#16
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Script  = r as CompiledScript;

            Jun.Script scr = new Jun.Script
            {
                Code = Script.Bytecode.ToList(),
                Name = r.Resource.Name,
                Type = r.Resource.Flags.HasFlag(ResourceFlags.Private) ? Jun.ScriptType.State : Jun.ScriptType.Script,
            };

            DumpBox.Text = Jun.Visualizer.Show(new Jun.Script[] { scr })
                           .Replace("\n", "\r\n");
            DumpBox.Select(0, 0);
        }
示例#17
0
        public void Setup(Context ctx, IHasResource zone)
        {
            Context = ctx;
            ctx.UnsavedChangesChanged += Context_UnsavedChangesChanged;
            ctx.EncountersChanged     += Context_EncountersChanged;

            Zone = zone as Zone;

            CeilingTexture.Setup(ctx, Zone);
            FloorTexture.Setup(ctx, Zone);

            LoadScriptNames();
            LoadThings();

            Map.Setup(ctx, Zone);
        }
示例#18
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context = ctx;
            Monster = r as Monster;

            Globals.Populate(AIBox, Context.Djn.AIProfiles);
            Globals.Populate(ImageBox, Context.Djn.GrfSubtype(ResourceSubtype.Monster));
            Globals.Populate(DropsBox, Context.Djn.Type <DropTable>());

            NameBox.Text          = Context.GetString(Monster.NameId);
            ImageBox.SelectedItem = Globals.Resolve(Context, Monster.ImageId);
            RowBox.SelectedIndex  = (int)Monster.Row;
            AIBox.SelectedIndex   = (int)Monster.AiId;
            XPBox.Value           = Monster.Experience;
            DropsBox.SelectedItem = Globals.Resolve(Context, Monster.DropsId);
            StatsBoxes.Stats      = Monster.Stats;

            SkillsList.Values = Monster.Skills;

            StatsBoxes.UpdateFields();
        }
示例#19
0
        public void Setup(Context ctx, IHasResource r)
        {
            Context  = ctx;
            Campaign = r as Campaign;

            Globals.Populate(StartScript, ctx.Djn.PublicScripts);
            Globals.Populate(FontBox, ctx.Djn.Fonts);
            Globals.Populate(MenuBg, ctx.Djn.Screens);
            Globals.Populate(DungeonBg, ctx.Djn.Screens);
            Globals.Populate(CombatBg, ctx.Djn.Screens);
            Globals.Populate(MenuMusic, ctx.Djn.Music);

            NumGlobals.Value         = Campaign.NumGlobals;
            NumFlags.Value           = Campaign.NumFlags;
            StartScript.SelectedItem = Globals.Resolve(ctx, Campaign.StartingScript);
            CampaignName.Text        = ctx.GetString(Campaign.NameId);
            CampaignDesc.Text        = ctx.GetString(Campaign.DescId);
            FontBox.SelectedItem     = Globals.Resolve(ctx, Campaign.FontId);
            MenuBg.SelectedItem      = Globals.Resolve(ctx, Campaign.MenuBgId);
            DungeonBg.SelectedItem   = Globals.Resolve(ctx, Campaign.DungeonBgId);
            CombatBg.SelectedItem    = Globals.Resolve(ctx, Campaign.CombatBgId);
            MenuMusic.SelectedItem   = Globals.Resolve(ctx, Campaign.MenuMusicId);
        }