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); } }
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; } }
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); }
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(); }
public void Setup(Context ctx, IHasResource r) { Context = ctx; Source = r as ScriptSource; CodeSource.Text = Source.Source; }
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); }
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); }
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)); }
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)); } }
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; }
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(); }
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}"); } }
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)); }
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); }
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); }
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); }
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(); }
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); }