diff --git a/MapStudio.UI b/MapStudio.UI index cda8b58..e42b17b 160000 --- a/MapStudio.UI +++ b/MapStudio.UI @@ -1 +1 @@ -Subproject commit cda8b585542be14ddb95c36e31f40defbe35ccee +Subproject commit e42b17bb9551e7dd738e56d76be80e3ed22d06f0 diff --git a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/AssetViewMapObject.cs b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/AssetViewMapObject.cs index 6594c4b..0aba56f 100644 --- a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/AssetViewMapObject.cs +++ b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/AssetViewMapObject.cs @@ -48,6 +48,7 @@ public void AddAsset(List assets, ObjDefinition obj) ObjID = obj.ObjId, ObjDefinition = obj, Icon = IconManager.GetTextureIcon(icon), + Aliases = obj.Meta.Aliases.ToArray(), }); } diff --git a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectSelector.cs b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectSelector.cs index 03deb8a..ba478ed 100644 --- a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectSelector.cs +++ b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectSelector.cs @@ -185,6 +185,7 @@ private List UpdateSearch(List objects) objects[i].Label.IndexOf(_searchText, StringComparison.OrdinalIgnoreCase) >= 0; HasText |= objects[i].ObjId.ToString().IndexOf(_searchText, StringComparison.OrdinalIgnoreCase) >= 0; + HasText |= objects[i].Meta.Aliases.Any(s => s.IndexOf(_searchText, StringComparison.OrdinalIgnoreCase) >= 0); if (isSearch && HasText || !isSearch) filtered.Add(objects[i]); diff --git a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectUI.cs b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectUI.cs index 07bf6d1..63bbb3e 100644 --- a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectUI.cs +++ b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/MapObjectUI.cs @@ -1,19 +1,22 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Numerics; using MapStudio.UI; using ImGuiNET; -using TurboLibrary; using GLFrameworkEngine; -using GLFrameworkEngine.UI; namespace TurboLibrary.MuuntEditor { public class MapObjectUI { static bool DisplayUnusedParams = false; + static bool DisplayRawFloats = false; + static bool DisplayAnyPlatform = true; + + static Vector4 UColor = new Vector4(0f, 150 / 255f, 200 / 255f, 1f); + static Vector4 DXColor = new Vector4(230 / 255f, 0f, 18 / 255f, 1f); + static Vector4 ModColor = new Vector4(1f, 90 / 255f, 37 / 255f, 1f); public void Render(Obj mapObject, IEnumerable selected) { @@ -23,6 +26,10 @@ public void Render(Obj mapObject, IEnumerable selected) MapStudio.UI.ImguiBinder.LoadProperties(mapObject, selected); + if (ImGui.CollapsingHeader($"MapObject - {mapObject.Meta.Name}", ImGuiTreeNodeFlags.DefaultOpen)) + { + LoadMetaUI(mapObject, selected); + } if (ImGui.CollapsingHeader(TranslationSource.GetText("PARAMETERS"), ImGuiTreeNodeFlags.DefaultOpen)) { LoadParameterUI(mapObject, selected); } @@ -53,32 +60,169 @@ private string[] DisplayWarnings(Obj mapObject) return warnings.ToArray(); } + private void LoadMetaUI(Obj mapObject, IEnumerable selected) + { + ImGui.Indent(5f); + MapObjMeta meta = mapObject.Meta; + ImGui.Spacing(); + DrawPlatformBadges(meta.Platforms); + ImGui.SameLine(ImGui.GetWindowContentRegionMax().X - 25f); + if(ImGui.Button($" {IconManager.EDIT_ICON} ##metaEdit")) + FileUtility.OpenFolder(GlobalSettings.ParamDataBase.GetUserArchivesPath()); + + ImGui.Separator(); + ImGui.PushTextWrapPos(ImGui.GetWindowContentRegionMax().X - 5f); + ImGui.TextWrapped(meta.Description); + + ImGui.Spacing(); + if (meta.Usages.Count > 0) + ImGuiHelper.BoldTextLabel(TranslationSource.GetText("TRACK_USAGE"), string.Join(" | ", meta.Usages.Select(s => $"{s}"))); + + if (meta.Aliases.Count > 0) + { + ImGui.Spacing(); + string title = TranslationSource.GetText("TAGS") + ":"; + ImGuiHelper.BoldText(title); + float lineSize = ImGui.CalcTextSize(title).X + 5f; + foreach (var alias in meta.Aliases) + { + // Wrap badge if it doesn't fit on the same line. + float size = ImGui.GetStyle().ItemSpacing.X + getBadgeSize(alias).X; + if (ImGui.GetContentRegionAvail().X >= lineSize + size) + ImGui.SameLine(); + else + lineSize = 0; + lineSize += size; + DrawBadge(alias); + } + } + ImGui.Unindent(5f); + ImGui.Spacing(); + } + private void LoadParameterUI(Obj mapObject, IEnumerable selected) { - var names = mapObject.GetParameterNames(); - bool isInDatabase = ParamDatabase.ParameterObjs.ContainsKey(mapObject.ObjId); + MapObjMeta meta = mapObject.Meta; + ImGui.AlignTextToFramePadding(); + ImGuiHelper.BoldText(TranslationSource.GetText("DISPLAY")); + ImGui.SameLine(0, 10f); ImGui.Checkbox(TranslationSource.GetText("DISPLAY_UNUSED"), ref DisplayUnusedParams); - ImGui.BeginColumns("params8", 2); - for (int i = 0; i < 8; i++) - { - var param = mapObject.Params[i]; - if (!DisplayUnusedParams && names[i] == null && isInDatabase) - continue; + ImGui.SameLine(0, 10f); + ImGui.Checkbox(TranslationSource.GetText("DISPLAY_RAW"), ref DisplayRawFloats); + ImGui.SameLine(0, 10f); + ImGui.Checkbox(TranslationSource.GetText("DISPLAY_ANY_PLATFORM"), ref DisplayAnyPlatform); + + float minHeight = ImGui.GetFontSize() + ImGui.GetStyle().FramePadding.Y * 2.0f; + + if (ImGui.BeginTable("params8", 3, ImGuiTableFlags.Resizable)) { + ImGui.TableSetupColumn("params8c1", ImGuiTableColumnFlags.WidthStretch, 1f); + ImGui.TableSetupColumn("params8c2", ImGuiTableColumnFlags.WidthStretch | ImGuiTableColumnFlags.NoResize, 1f); + ImGui.TableSetupColumn("params8c3", ImGuiTableColumnFlags.WidthFixed | ImGuiTableColumnFlags.NoResize, 25f); + + float rowHeight = ImGui.GetFontSize() + ImGui.GetStyle().FramePadding.Y * 2.0f; + + for (int i = 0; i < 8; i++) + { + string uiId = $"##param{i}"; + ParamDescriptor pd = meta.Params[i]; + // Hide unused parameters + if (!DisplayUnusedParams && !pd.IsUsed && meta.IsDocumented) + continue; + + // Hide parameters not supported by the current version + if (!DisplayAnyPlatform && (GlobalSettings.IsMK8D ? pd.Platforms.VersionDX == DXVersion.None : pd.Platforms.VersionU == UVersion.None)) + continue; - string name = names[i] == null ? TranslationSource.GetText("UNUSED") : names[i]; - if (!isInDatabase) - name = $"Param {i}"; + var param = mapObject.Params[i]; - if (DisplayFloat($"##param{i}", name, ref param)) { - foreach (Obj obj in selected) + ImGui.TableNextRow(ImGuiTableRowFlags.None, rowHeight); + + ImGui.TableNextColumn(); + // Name + ImGui.AlignTextToFramePadding(); + DisplayParamInfo(uiId, pd, meta, param); + ImGui.SameLine(); + ImGui.TextWrapped(pd.Name); + + ImGui.TableNextColumn(); + // Inputs + bool isParamChanged = false; + if (DisplayRawFloats || pd.Type == ParamDescriptor.ParamType.Float || pd.Type == ParamDescriptor.ParamType.UNKNOWN) + { + // Always show floats if enabled + ImGui.SetNextItemWidth(-1); + isParamChanged = ImGui.InputFloat(uiId, ref param); + } + else { - obj.Params[i] = param; - obj.NotifyPropertyChanged("Params"); + switch (pd.Type) + { + case ParamDescriptor.ParamType.Int: + int intParam = (int)param; + ImGui.SetNextItemWidth(-1); + isParamChanged = ImGui.InputInt(uiId, ref intParam, 1); + param = (float)intParam; + break; + case ParamDescriptor.ParamType.Time: + int frameParam = (int)param; + isParamChanged = DisplayTimer(uiId, ref frameParam); + param = (float)frameParam; + break; + case ParamDescriptor.ParamType.Bool: + bool boolParam = param != 0f; + ImGui.SetNextItemWidth(-1); + isParamChanged = ImGui.Checkbox(uiId, ref boolParam); + param = boolParam ? 1f : 0f; + break; + case ParamDescriptor.ParamType.Enum: + string selectedS = pd.Enum.ContainsKey(param) ? $"{pd.Enum[param]} ({param})" : $"{TranslationSource.GetText("ENUM_UNKNOWN")} ({param})"; + ImGui.SetNextItemWidth(-1); + if (ImGui.BeginCombo(uiId, selectedS)) { + foreach (KeyValuePair e in pd.Enum) + { + bool isSelected = param == e.Key; + + if (ImGui.Selectable($"{e.Value} ({e.Key})", isSelected)) + { + param = e.Key; + isParamChanged = true; + } + + if (isSelected) + ImGui.SetItemDefaultFocus(); + + } + ImGui.EndCombo(); + } + break; + case ParamDescriptor.ParamType.Bytes: + int bytesParam = BitConverter.SingleToInt32Bits(param); + ImGui.SetNextItemWidth(-1); + isParamChanged = ImGui.InputInt(uiId, ref bytesParam, 1, 0x10, ImGuiInputTextFlags.CharsHexadecimal); + param = (float)BitConverter.Int32BitsToSingle(bytesParam); + break; + } + } + + // reset to default + ImGui.TableNextColumn(); + if (ImGui.Button($" {IconManager.RESET_ICON} ##{uiId}")) + { + isParamChanged = true; + param = pd.Default; + } + + if (isParamChanged) { + foreach (Obj obj in selected) + { + obj.Params[i] = param; + obj.NotifyPropertyChanged("Params"); + } } } + ImGui.EndTable(); } - ImGui.EndColumns(); } private void LoadPathUI(Obj mapObject) @@ -190,14 +334,207 @@ private IDrawable GetDrawableLink(object obj) return null; } - private bool DisplayFloat(string id, string name, ref float value) + /// + /// Displays a m:ss.mmm timer widget, based on a given number of frames + /// + /// id used for UI components + /// Number of frames to display + /// + private bool DisplayTimer(string id, ref int frames) + { + // 60 FPS -> approximately 16.667 ms per frame. + const int FPS = 60; + const int FPM = FPS * 60; + + // Convert frames to m:ss.mmm + int minutes = frames / FPM; + int seconds = (frames / FPS) % 60; + int remainingFrames = frames % FPS; + int milliseconds = (int)(remainingFrames * 1000.0 / FPS); + + bool changed = false; + var flags = ImGuiInputTextFlags.CharsDecimal | ImGuiInputTextFlags.AutoSelectAll; + + string minutesS = minutes.ToString(); + string secondsS = seconds.ToString("00"); + string millisecondsS = milliseconds.ToString("000"); + + ImGui.SetNextItemWidth(16); + if (ImGui.InputText($"{id}_minutes", ref minutesS, 1, flags)) + { + int.TryParse(minutesS, out minutes); + minutes = Math.Max(0, minutes); + changed = true; + } + + ImGui.SameLine(0, 2); + ImGui.Text(":"); + ImGui.SameLine(0, 2); + + ImGui.SetNextItemWidth(24); + if (ImGui.InputText($"{id}_seconds", ref secondsS, 2, flags)) + { + int.TryParse(secondsS, out seconds); + seconds = Math.Max(0, Math.Min(59, seconds)); + changed = true; + } + + ImGui.SameLine(0, 2); + ImGui.Text("."); + ImGui.SameLine(0, 2); + + ImGui.SetNextItemWidth(32); + if (ImGui.InputText($"{id}_milliseconds", ref millisecondsS, 3, flags)) + { + int.TryParse(millisecondsS, out milliseconds); + milliseconds = Math.Max(0, Math.Min(999, milliseconds)); + changed = true; + } + + if (changed) + { + // Convert the edited m:ss.mmm back to frames. + frames = + minutes * FPM + + seconds * FPS + + (int)(milliseconds * FPS / 1000.0); + } + + return changed; + } + + private static readonly Vector2 BadgePadding = new Vector2(5f, 1f); + private Vector2 getBadgeSize(string label) { + return ImGui.CalcTextSize(label) + BadgePadding * 2f; + } + + /// + /// Draws a badge with some label + /// + /// + private void DrawBadge(string label, Vector4? bgColor = null, float rounding = 0.4f) + { + Vector4 _bgColor = bgColor ?? new Vector4(0.2f, 0.3f, 0.4f, 1.0f); + Vector2 size = getBadgeSize(label); + Vector2 pos = ImGui.GetCursorScreenPos(); + uint background = ImGui.GetColorU32(_bgColor); + + ImGui.GetWindowDrawList().AddRectFilled(pos, pos + size, background, size.Y * rounding); + + ImGui.SetCursorScreenPos(pos + BadgePadding); + ImGui.Text(label); + + ImGui.SetCursorScreenPos(pos); + ImGui.Dummy(size); + } + + private void DrawPlatformBadges(MetaPlatforms p) + { + List> badges = []; + var versionU = p.VersionU; + var versionDX = p.VersionDX; + if (versionU >= UVersion.Base) + badges.Add(Tuple.Create($" {IconManager.ICON_WII_U} {TranslationSource.GetText("PLATFORM_U")}", (Vector4?)UColor)); + if (versionU > UVersion.Base && versionU < UVersion.Modded) + badges.Add(Tuple.Create($" {IconManager.ICON_DOWNLOAD} {TranslationSource.GetText($"DLC_U_{versionU.ToString().ToUpper()}")}", (Vector4?)null)); + if (versionU == UVersion.Modded) + badges.Add(Tuple.Create($" {IconManager.ICON_MOD} {TranslationSource.GetText("PLATFORM_MOD")}", (Vector4?)ModColor)); + if (versionDX >= DXVersion.Base) + badges.Add(Tuple.Create($" {IconManager.ICON_SWITCH} {TranslationSource.GetText("PLATFORM_SWITCH")}", (Vector4?)DXColor)); + if (versionDX > DXVersion.Base && versionDX < DXVersion.Modded) + badges.Add(Tuple.Create($" {IconManager.ICON_DOWNLOAD} {TranslationSource.GetText($"DLC_DX_{versionDX.ToString().ToUpper()}")}", (Vector4?)null)); + if (versionDX == DXVersion.Modded) + badges.Add(Tuple.Create($" {IconManager.ICON_MOD} {TranslationSource.GetText("PLATFORM_MOD")}", (Vector4?)ModColor)); + + bool isFirst = true; + foreach (Tuple b in badges) + { + if (!isFirst) + ImGui.SameLine(); + isFirst = false; + DrawBadge(b.Item1, b.Item2); + } + } + + /// + /// Displays the meta information of a given parameter + /// + private void DisplayParamInfo(string uiId, ParamDescriptor pd, MapObjMeta meta, float param) + { + bool isValid = pd.Validate(param); + string buttonText = $" {(isValid ? IconManager.INFO_ICON : IconManager.WARNING_ICON)} "; + if (!pd.IsUsed || !meta.IsDocumented) + { + // Skip drawing info if the parameter is unused, or we didn't know the object + ImGui.Dummy(new Vector2(ImGui.CalcTextSize(buttonText).X, ImGui.GetFrameHeight())); + return; + } + + // Determine icon color based on platform/modded status + Vector4 color = ThemeHandler.Theme.Text; + var uVersion = pd.Platforms.VersionU; + var dxVersion = pd.Platforms.VersionDX; + + if (!isValid) + color = ThemeHandler.Theme.Warning; + else if (GlobalSettings.IsMK8D ? dxVersion == DXVersion.Modded : uVersion == UVersion.Modded) + color = ModColor; + else if (dxVersion == DXVersion.None && uVersion != UVersion.None) + color = UColor; + else if (dxVersion != DXVersion.None && uVersion == UVersion.None) + color = DXColor; + ImGui.AlignTextToFramePadding(); - ImGui.Text(name); - ImGui.NextColumn(); - bool input = ImGui.InputFloat($"###{id}", ref value); - ImGui.NextColumn(); - return input; + ImGui.TextColored(color, buttonText); + if (ImGui.IsItemHovered()) + { + ImGui.AlignTextToFramePadding(); + ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(6f, 6f)); + ImGui.PushStyleColor(ImGuiCol.Border, new Vector4(0.5f, 0.5f, 0.5f, 1f)); + ImGui.BeginTooltip(); + + // Name and type + ImGui.PushTextWrapPos(ImGui.GetCursorPos().X + 500f); + DrawBadge(pd.Type == ParamDescriptor.ParamType.UNKNOWN ? "???" : pd.Type.ToString(), null, 0.1f); + ImGui.SameLine(0, 5f); + ImGuiHelper.BoldText(pd.Name); + ImGui.Separator(); + + // Display platforms (U, DX, mod) + DrawPlatformBadges(pd.Platforms); + + // Description + if (!string.IsNullOrWhiteSpace(pd.Description)) + ImGui.TextWrapped(pd.Description); + + + // Display default/min/max + ImGuiHelper.BoldTextLabel(TranslationSource.GetText("PARAM_DEFAULT"), $"{pd.Default:0.0##}"); + if (pd.MinValue is not null) + { + ImGui.SameLine(); + ImGuiHelper.BoldTextLabel(TranslationSource.GetText("PARAM_MIN"), $"{pd.MinValue:0.0##}"); + } + if (pd.MaxValue is not null) + { + ImGui.SameLine(); + ImGuiHelper.BoldTextLabel(TranslationSource.GetText("PARAM_MAX"), $"{pd.MaxValue:0.0##}"); + } + + // Example values + if (pd.Samples.Count > 0) + ImGuiHelper.BoldTextLabel(TranslationSource.GetText("PARAM_SAMPLE"), string.Join(" | ", pd.Samples.Select(s => $"{s:0.###}"))); + + // Invalid + if (!isValid) + ImGui.TextColored(ThemeHandler.Theme.Warning, string.Format(TranslationSource.GetText("PARAM_WARNING"), $"{param:0.0##}")); + + ImGui.PopStyleVar(); + ImGui.PopStyleColor(); + ImGui.EndTooltip(); + } + } } } \ No newline at end of file diff --git a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/ObjectEditor.cs b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/ObjectEditor.cs index 1db0570..2473f9f 100644 --- a/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/ObjectEditor.cs +++ b/Plugins/TurboLibrary/Editors/MapEditor/MapObjEditor/ObjectEditor.cs @@ -454,6 +454,7 @@ private EditableObject Create(Obj obj) //Set the UI label and property tag render.UINode.Header = GetNodeHeader(obj); + render.UINode.Aliases = obj.Meta.Aliases; render.UINode.Tag = obj; render.UINode.ContextMenus.Add(new MenuItemModel("EXPORT", () => ExportModel())); //Set custom UI properties @@ -673,8 +674,8 @@ private EditableObject AddObject(int id, bool spawnAtCursor = false) var ob = rend.UINode.Tag as Obj; //Reset parameters to defaults - if (ParamDatabase.ParameterDefaults.ContainsKey(ob.ObjId)) - ob.Params = ParamDatabase.ParameterDefaults[ob.ObjId].ToList(); + for (int i = 0; i < ob.Meta.Params.Length; i++) + ob.Params[i] = ob.Meta.Params[i].Default; //Define some parameters based on the existing objects in the scene @@ -711,8 +712,8 @@ private EditableObject EditObject(EditableObject render, int id) Add(editedRender); //Reset parameters to defaults - if (ParamDatabase.ParameterDefaults.ContainsKey(obj.ObjId)) - obj.Params = ParamDatabase.ParameterDefaults[obj.ObjId].ToList(); + for (int i = 0; i < obj.Meta.Params.Length; i++) + obj.Params[i] = obj.Meta.Params[i].Default; //Keep the same node order Root.Children.Remove(editedRender.UINode); diff --git a/Plugins/TurboLibrary/FileData/Muunt/MapObj/Obj.cs b/Plugins/TurboLibrary/FileData/Muunt/MapObj/Obj.cs index b3d666b..2d495c2 100644 --- a/Plugins/TurboLibrary/FileData/Muunt/MapObj/Obj.cs +++ b/Plugins/TurboLibrary/FileData/Muunt/MapObj/Obj.cs @@ -84,11 +84,37 @@ public void SetLinkIndex(string name, int index) // ---- PROPERTIES --------------------------------------------------------------------------------------------- + private int _objId; + public ObjDefinition ObjDef { get; private set; } + private MapObjMeta _objMeta; // local copy in case no corresponding ObjDefinition exists + /// /// Gets or sets the ID determining the type of this object. /// [ByamlMember] - public int ObjId { get; set; } + public int ObjId { + get { return _objId; } + set { + if (_objId == value) + return; + // ObjId changes, should update the corresponding definition as well + _objId = value; + ObjDef = null; + _objMeta = null; + if (GlobalSettings.ObjDatabase.ContainsKey(value)) + ObjDef = GlobalSettings.ObjDatabase[this.ObjId]; + else + _objMeta = GlobalSettings.ParamDataBase.GetMeta(value); + } + } + + public MapObjMeta Meta { get + { + if (ObjDef is not null) + return ObjDef.Meta; + return _objMeta; + } + } [BindGUI("MULTI2P", Category = "OBJECT", ColumnIndex = 0, Control = BindControl.ToggleButton)] public bool HasMulti2P @@ -259,14 +285,6 @@ public string Label [ByamlMember] public List Params { get; set; } - public string[] GetParameterNames() - { - if (ParamDatabase.ParameterObjs.ContainsKey(ObjId)) - return ParamDatabase.ParameterObjs[ObjId]; - else - return new string[8]; - } - public bool IsSkybox { get @@ -286,7 +304,7 @@ public Obj() this.Translate = new ByamlVector3F(); this.Scale = new ByamlVector3F(1, 1, 1); this.Rotate = new ByamlVector3F(); - ObjId = 1018; + ObjId = 1018; // Meta is updated by updating objId Params = new List(); for (int i = 0; i < 8; i++) diff --git a/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDatabase.cs b/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDatabase.cs index 06f9306..6649847 100644 --- a/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDatabase.cs +++ b/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDatabase.cs @@ -1,737 +1,139 @@ -using Newtonsoft.Json; +using MapStudio.UI; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Toolbox.Core; namespace TurboLibrary { - public class ParamDatabase + /// + /// General storage for MapObj descriptions, parameter usage, parameter descriptions, parameter defaults, etc. + /// + public sealed class ParamDataBaseSingleton { - static string GetPath() => System.IO.Path.Combine(Runtime.ExecutableDir, "User", $"MapObjDB.json"); + public string GetUserArchivesPath() => System.IO.Path.Combine(Runtime.ExecutableDir, "User", "MapObjArchives"); + private readonly string ArchiveExt = "*.json"; - public static void Load() + private Dictionary MetaDB = new Dictionary(); + + public static ParamDataBaseSingleton Instance { get; } = new ParamDataBaseSingleton(); + + private ParamDataBaseSingleton() { - var path = GetPath(); - if (!File.Exists(path)) - Save(); - else - { - ParameterObjs = JsonConvert.DeserializeObject>(File.ReadAllText(path)); + // Load vanilla archives first + string archiveU_base = System.IO.Path.Combine(Runtime.ExecutableDir, "Resources", "MapObj_U_Base.json"); + string archiveU_DLC = System.IO.Path.Combine(Runtime.ExecutableDir, "Resources", "MapObj_U_DLC.json"); + string archiveDX_base = System.IO.Path.Combine(Runtime.ExecutableDir, "Resources", "MapObj_DX_Base.json"); + string archiveDX_BCP = System.IO.Path.Combine(Runtime.ExecutableDir, "Resources", "MapObj_DX_BCP.json"); + + if (File.Exists(archiveU_base)) + LoadArchiveFromFile(MetaDB, archiveU_base); + if (File.Exists(archiveU_DLC)) + LoadArchiveFromFile(MetaDB, archiveU_DLC); + if (File.Exists(archiveDX_base)) + LoadArchiveFromFile(MetaDB, archiveDX_base); + if (File.Exists(archiveDX_BCP)) + LoadArchiveFromFile(MetaDB, archiveDX_BCP); + + // Load any use archives, if present + LoadArchivesFromDirectory(MetaDB, GetUserArchivesPath(), ArchiveExt); + + //Console.WriteLine("Master MetaDB:\n======================="); + //foreach (KeyValuePair obj in MetaDB) + //{ + // Console.WriteLine($"MapObjMeta ({obj.Key}):"); + // obj.Value.WriteDebugLog(); + // Console.WriteLine("------"); + //} + } + + public MapObjMeta GetMeta(int objId) + { + if (!MetaDB.ContainsKey(objId)) { + // Attempted to retrieve meta info for an object not in the database. This can happen if + // Track studio's internal files run behind a game release with new mapObjs (unlikely). + // Furthermore, a objflow.byaml might have been modified with new mapObjs. + // We explicitly mention this was added later and not documented properly. + Console.Error.WriteLine($"Encountered unknown mapObj id: {objId}. Added it to the paramDB."); + MetaDB[objId] = new MapObjMeta(false); } + return MetaDB[objId]; } - public static void Save() + /// + /// Adds new meta information to a meta database, merging pre-existing data if needed. + /// + /// Object ID + /// New meta info to store + /// Pre-existing archive + private void AddMetaToArchive(int objId, MapObjMeta newMeta, Dictionary metaArchive) { - string json = JsonConvert.SerializeObject(ParameterObjs, Formatting.Indented); - File.WriteAllText(GetPath(), json); + if (!metaArchive.ContainsKey(objId)) + { + // Attempted to retrieve meta info for an object not in the database, add it! + metaArchive[objId] = new MapObjMeta(true); + } + MapObjMeta curMeta = metaArchive[objId]; + curMeta.Merge(newMeta); } - public static Dictionary ParameterDefaults = new Dictionary() + /// + /// Populates a metaDB based on all files in a directory. + /// + /// Meta database to populate + /// Directory path + /// File extension + private void LoadArchivesFromDirectory(Dictionary metaDB, string path, string archiveExt) { - { 1012, new float[8] { 0, 5, 0, 0, 0, 0, 0, 0 }}, // Sanbo - { 1021, new float[8] { 0, 0, 1, 3, 100, 0, 0, 0 }}, // Basabasa - { 1036, new float[8] { 1, 0, 0, 0, 0, 0, 0, 0 }}, // PcBalloon - { 1040, new float[8] { 1, 0, 0, 0, 0, 0, 0, 0 }}, // TowerKuribo - { 3026, new float[8] { 6, 5, 5, 6, 0, 0, 0, 1 }}, // DL_Metro - { 4048, new float[8] { 0, 700, 2300, 400, 0, 0, 0, 0 }}, // BDSandGeyser - }; + string[] files = []; + Console.WriteLine($"Loading MapObj archives ({archiveExt}) from {path}"); + try + { + files = Directory.GetFiles(path, archiveExt); + Array.Sort(files); + } + catch (Exception e) + { + Console.Error.WriteLine($"Could not open directory: {path}\n{e.GetType()}: {e.Message}"); + DialogHandler.ShowException(e); + } + Console.WriteLine($"Found {files.Length} MapObj archives!"); + foreach (var file in files) + { + LoadArchiveFromFile(metaDB, file, true); + } + } - public static Dictionary ParameterObjs = new Dictionary() + /// + /// Populates a metaDB based on a single file + /// + /// Meta database to populate + /// Filepath + private void LoadArchiveFromFile(Dictionary metaDB, string path, bool writeToConsole = false) { - { 1003, new string[8] {null, null, null, null, null, null, null, null} }, // Choropoo - { 1004, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // Frogoon - { 1005, new string[8] {null, null, null, null, null, null, null, null} }, // PylonB - { 1006, new string[8] {"Initial Delay", "Life Time", "Delay", "Unknown 4", null, null, null, null} }, // PackunMusic - { 1007, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // KuriboBoard - { 1008, new string[8] {null, null, null, null, null, null, null, null} }, // DKBarrel - { 1009, new string[8] {null, null, null, null, null, null, null, null} }, // PylonY - { 1010, new string[8] {null, null, null, null, null, null, null, null} }, // DdQuicksand - { 1011, new string[8] { null, "Lap Point Search Range", null, null, null, null, null, null} }, // Kuribo - { 1012, new string[8] {"Inital Delay", "Wait Cycle", null, null, null, null, null, null} }, // Sanbo - { 1013, new string[8] { "Is Double (MK8D)", null, null, null, null, null, null, null} }, // ItemBox - { 1014, new string[8] {"Initial Delay", "Slam Delay", "Unknown 3", null, null, null, null, null} }, // Dossun - { 1015, new string[8] {null, null, null, null, null, null, null, null} }, // Crab - { 1016, new string[8] {null, null, null, null, null, null, null, null} }, // SnowRock - { 1017, new string[8] {null, null, null, null, null, null, null, null} }, // BushBoard - { 1018, new string[8] {"Unknown 1", null, null, "Unknown 4", null, null, null, null} }, // Coin - { 1019, new string[8] {null, null, null, null, null, null, null, null} }, // Dokan1 - { 1021, new string[8] { "Initial Delay", "Spawn Interval", "Spawn Count", "Start Distance", "Space Between", null, null, null} }, // Basabasa - { 1022, new string[8] {null, null, null, null, null, null, null, null} }, // Barrel - { 1023, new string[8] {null, null, null, null, null, null, null, null} }, // CrashBox - { 1024, new string[8] {null, null, null, null, null, null, null, null} }, // PylonR - { 1025, new string[8] {"Inital Delay", "Unknown 2", "Spawn Count", "Start Distance", "Space Between", null, null, null} }, // Pukupuku - { 1026, new string[8] {null, null, null, null, null, null, null, null} }, // TikiTak - { 1027, new string[8] {"First Wait Frame", "Angle (Degrees)", null, null, null, null, null, null} }, // PackunFlower - { 1028, new string[8] {null, null, null, null, null, null, null, null} }, // PuchiPackun - { 1029, new string[8] {null, null, null, null, null, null, null, null} }, // SkateHeyhoR - { 1030, new string[8] {null, null, null, null, null, null, null, null} }, // Note - { 1031, new string[8] {null, null, "Spawn Count", "Unknown 4", "Unknown 5", null, null, null} }, // SkateHeyhoB - { 1032, new string[8] {null, null, null, null, null, null, null, null} }, // SnowMan - { 1033, new string[8] {null, "Unknown 2", null, null, null, null, null, null} }, // MovingCoin - { 1034, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // MovingItemBox - { 1035, new string[8] {null, null, null, null, null, null, null, null} }, // Oil - { 1036, new string[8] {"Spawn Count", "Recolor Start Index", null, null, null, null, null, null} }, // PcBalloon - { 1037, new string[8] {null, null, null, null, null, null, null, null} }, // N64YoshiEgg - { 1039, new string[8] { "Min Return Lap Point", "Max Return Lap Point", null, null, null, null, null, null} }, // Bird - { 1040, new string[8] {"Spawn Count", "Unknown 2", null, null, null, null, null, null} }, // TowerKuribo - { 1041, new string[8] { "Unknown {3/4 seen} },", null, null, null, null, null, null, null} }, // Cow - { 1042, new string[8] {null, null, "Unknown 3", "Unknown 4", "Unknown 5", null, null, null} }, // FishBone - { 1043, new string[8] {"Unknown 1", "Spawn Count", "Unknown 3", null, null, null, null, null} }, // Teresa - { 1044, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CmnToad - { 1055, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // RelayCar - { 1056, new string[8] {null, null, null, null, null, null, null, null} }, // Seagull - { 1057, new string[8] {null, null, null, null, null, null, null, null} }, // ExTram - { 1058, new string[8] {null, null, null, null, null, null, null, null} }, // GingerBread - { 1059, new string[8] {null, null, null, null, null, null, null, null} }, // CakePylonB - { 1060, new string[8] {null, null, null, null, null, null, null, null} }, // CakePylonA - { 1063, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ShyguyWatchman - { 1064, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // ShyguyPickax - { 1066, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // PackunFlower2 - { 1067, new string[8] {"Initial Delay", null, null, null, null, null, null, null} }, // HhStatue - { 1068, new string[8] {null, null, null, null, null, null, null, null} }, // CakeBalloon - { 1070, new string[8] {null, null, null, null, null, null, null, null} }, // Karon - { 1071, new string[8] {null, null, null, null, null, null, null, null} }, // PylonTechno - { 1072, new string[8] {null, null, null, null, null, null, null, null} }, // DokanTechno - { 1073, new string[8] {null, null, null, null, null, null, null, null} }, // PackunCake - { 1074, new string[8] {null, "Unknown 2", null, null, null, null, null, null} }, // APMoveCBox - { 1075, new string[8] {null, null, null, null, null, null, null, null} }, // Moray - { 1076, new string[8] {null, null, null, null, null, null, null, null} }, // DokanCake - { 1077, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // MareM - { 1078, new string[8] {null, null, null, null, null, null, null, null} }, // BarrelFlower - { 1079, new string[8] {null, null, null, null, null, null, null, null} }, // Helicopter - { 1081, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, "Unknown 5", null, null, null} }, // SnowBoardHeyho - { 1083, new string[8] {null, null, null, null, null, null, null, null} }, // CmnHeyho - { 1084, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // FireSnake - { 1085, new string[8] {null, null, null, null, null, null, null, null} }, // CmnBirdNest - { 1086, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // MonteM - { 1087, new string[8] {null, null, null, null, null, null, null, null} }, // CmnYoshi - { 1088, new string[8] {null, null, null, null, null, null, null, null} }, // OcManta - { 1090, new string[8] {null, null, null, null, null, null, null, null} }, // OcLifton - { 1091, new string[8] {null, null, null, null, null, null, null, null} }, // SnorkelToad - { 1092, new string[8] {null, null, null, null, null, null, null, null} }, // OcLightJellyfish - { 1093, new string[8] {null, null, null, null, null, null, null, null} }, // CmnHawk - { 1094, new string[8] {null, null, null, null, null, null, null, null} }, // FcClown - { 1095, new string[8] {null, null, "Unknown 3", null, "Unknown 5", null, null, null} }, // PukupukuMecha - { 1097, new string[8] {null, null, null, null, null, null, null, null} }, // CmnPatapataUD - { 1098, new string[8] {null, null, null, null, null, null, null, null} }, // CmnPatapataLR - { 1099, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CmnGroupToad - { 1100, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // NoteChild - { 1101, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // PackunHone - { 1103, new string[8] {null, null, null, null, null, null, null, null} }, // KoopaClaw - { 1104, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // PackunTechno - { 1105, new string[8] {null, null, null, null, null, null, null, null} }, // DokanHone - { 1106, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadB - { 1107, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadY - { 1108, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadG - { 1109, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadP - { 1110, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadR - { 1111, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadW - { 1112, new string[8] {null, null, null, null, null, null, null, null} }, // DKBanana - { 1114, new string[8] {null, null, null, null, null, null, null, null} }, // JungleBird - { 1115, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // PitToadWro - { 1117, new string[8] {null, null, null, null, null, null, null, null} }, // ShyguyRope - { 1118, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CmnNokonoko - { 1119, new string[8] {"Road Index {0/1} },", "Initial Delay", "Slam Delay", null, null, null, null, null} }, // CrWanwanB - { 1120, new string[8] {null, null, null, null, null, null, null, null} }, // CmnBros - { 1123, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // TcHeyho - { 1124, new string[8] {null, null, null, null, null, null, null, null} }, // SmToad - { 1125, new string[8] {null, null, null, null, null, null, null, null} }, // SmHeyho - { 1126, new string[8] {null, null, null, null, null, null, null, null} }, // SmYoshi - { 1127, new string[8] {"Unknown 1", null, "Unknown 3", null, "Unknown 5", null, null, null} }, // JumpPukupuku - { 1130, new string[8] {null, null, null, null, null, null, null, null} }, // CmnCow - { 1131, new string[8] {null, "Unknown 2", null, null, null, null, null, null} }, // SpaceToad - { 1132, new string[8] {null, null, null, "Unknown 4", null, null, null, null} }, // PackunTechno_NoAt - { 1134, new string[8] {null, null, null, null, null, null, null, null} }, // CmnKaron - { 1135, new string[8] {null, "Unknown 2", "Spawn Count", null, "Spawn Radius", null, null, null} }, // JumpPukuClip - { 1136, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_StarDossun - { 1137, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_CmnAnimalA - { 1138, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_CmnAnimalB - { 1139, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_CmnAnimalC - { 1140, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_CmnAnimalD - { 1144, new string[8] {null, null, null, null, null, null, null, null} }, // DL_CmnSoldier - { 1145, new string[8] {null, null, null, null, null, null, null, null} }, // DL_IceToad - { 1147, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", "Unknown 5", null, null, null} }, // DL_Keith - { 1148, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // DL_Dekubaba - { 1149, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCAirship - { 1150, new string[8] {null, null, null, null, null, null, null, null} }, // DL_ShyguyPickaxR - { 1151, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // DL_YcHelicopter - { 1152, new string[8] {null, null, null, null, null, null, null, null} }, // DL_IceHelicopter - { 1153, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WoPulleyShyguy - { 1154, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // DL_Reset - { 1156, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkClown - { 1157, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // DL_NkClownW - { 1158, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalTotakeke - { 1159, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalRisa - { 1160, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalFuta - { 1161, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalAsami - { 1162, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalKinuyo - { 1163, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalTanukichi - { 1164, new string[8] {null, "Unknown 2", null, null, null, null, null, null} }, // DL_MovingItemBoxDLC - { 1165, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MechaKoopa - { 1166, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_Wanwan - { 1167, new string[8] {null, "Unknown 2", null, null, null, null, null, null} }, // DL_WdMovingCoin - { 1168, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalKaizo - { 1169, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalSnowman - { 1170, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // DL_WdBird - { 1171, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_SurpriseBox - { 1172, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RibbonToad - { 1173, new string[8] {null, null, null, null, null, null, null, null} }, // DL_ItemBoxMetro - { 1174, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WdBarrel - { 1175, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WdBarrelR - { 1202, new string[8] {"Fall Distance", "Flip (Degrees)", "Fall State Time", "Initial Smash Delay", null, null, null, null} }, // Battan - { 2004, new string[8] {null, null, null, null, null, null, null, null} }, // ChimneySmoke - { 2006, new string[8] {null, null, null, null, null, null, null, null} }, // Fountain - { 2007, new string[8] {"Initial Delay", "Life Time", "Unknown 3", null, null, null, null, null} }, // VolFlame - { 2009, new string[8] {"Initial Delay", "Life Time", null, null, null, null, null, null} }, // VolBomb - { 2010, new string[8] {null, null, null, null, null, null, null, null} }, // Flyingbug - { 2011, new string[8] {null, null, null, null, null, null, null, null} }, // ButterflyB - { 2012, new string[8] {null, null, null, null, null, null, null, null} }, // ButterflyA - { 2013, new string[8] {null, null, null, null, null, null, null, null} }, // ButterflySp - { 2014, new string[8] {null, null, null, null, null, null, null, null} }, // WPFountain - { 2015, new string[8] {"Counter Clockwise {0/1}", "Initial Rotation", null, null, null, null, null, null} }, // WsFirebar - { 2016, new string[8] {"Counter Clockwise {0/1}", "Initial Rotation", null, null, null, null, null, null} }, // WsFirering - { 2017, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", "Unknown 5", null, null, null} }, // CmnWaterCurrent - { 2018, new string[8] {null, null, null, null, null, null, null, null} }, // Balloon - { 2021, new string[8] {null, null, null, null, null, null, null, null} }, // CmnCloud - { 2022, new string[8] {null, null, null, null, null, null, null, null} }, // Candle - { 2023, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, "Model Index {Boost plate} },"} }, // ClThunder - { 2024, new string[8] {null, null, null, null, null, null, null, null} }, // DiTorchInside - { 2025, new string[8] {null, null, null, null, null, null, null, null} }, // BDTorch - { 2026, new string[8] {null, null, null, null, null, null, null, null} }, // VolTorch - { 2027, new string[8] {null, null, null, null, null, null, null, null} }, // DiTorchOutside - { 2028, new string[8] {null, null, null, "Unknown 4", null, null, null, null} }, // SandFallSmoke - { 2030, new string[8] {null, null, null, null, null, null, null, null} }, // TCSearchLight - { 2031, new string[8] {null, null, null, null, null, null, null, null} }, // SeaLight - { 2032, new string[8] {null, null, null, null, null, null, null, null} }, // PsSplashA - { 2033, new string[8] {null, null, null, null, null, null, null, null} }, // CakeSplash - { 2034, new string[8] {null, null, null, null, null, null, null, null} }, // CakeFountain - { 2035, new string[8] {null, null, null, null, null, null, null, null} }, // SunLight - { 2036, new string[8] {null, null, null, null, null, null, null, null} }, // PowderSugar - { 2037, new string[8] {null, null, null, null, null, null, null, null} }, // CakeBubble - { 2039, new string[8] {null, null, null, null, null, null, null, null} }, // FcSearchLight - { 2040, new string[8] {null, null, null, null, null, null, null, null} }, // OcManyFish - { 2041, new string[8] {null, null, null, null, null, null, null, null} }, // CakeSplashB - { 2042, new string[8] {null, null, null, null, null, null, null, null} }, // CakeFountainB - { 2043, new string[8] {null, null, null, null, null, null, null, null} }, // CakeBottleBubble - { 2045, new string[8] {null, null, null, null, null, null, null, null} }, // TCFountain - { 2046, new string[8] {null, null, null, null, null, null, null, null} }, // DiFluff - { 2047, new string[8] {null, null, null, null, null, null, null, null} }, // DiWaterfall - { 2048, new string[8] {null, null, null, null, null, null, null, null} }, // DdWaterCurent - { 2050, new string[8] {null, null, null, null, null, null, null, null} }, // BDSunLight - { 2051, new string[8] {null, null, null, null, null, null, null, null} }, // VolTorchL - { 2052, new string[8] {null, null, null, null, null, null, null, null} }, // TCSplashSet1 - { 2053, new string[8] {null, null, null, null, null, null, null, null} }, // TCSplashSet2 - { 2054, new string[8] {null, null, null, null, null, null, null, null} }, // TCFireworks - { 2055, new string[8] {null, null, null, null, null, null, null, null} }, // TTCSunLight - { 2056, new string[8] {null, null, null, null, null, null, null, null} }, // DkTorch - { 2057, new string[8] {"Initial Delay", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // LaserBeam - { 2059, new string[8] {null, null, null, null, null, null, null, null} }, // BCTorch1 - { 2060, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // BCExplosion - { 2061, new string[8] {null, null, null, null, null, null, null, null} }, // BCSearchLight - { 2062, new string[8] {null, null, null, null, null, null, null, null} }, // FireworksFc - { 2063, new string[8] {null, null, null, null, null, null, null, null} }, // FireworksSl - { 2064, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // FireworksN64R - { 2065, new string[8] {null, null, null, null, null, null, null, null} }, // TTCSunLightS - { 2066, new string[8] {null, null, null, null, null, null, null, null} }, // McSplash - { 2067, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // OcWaterCurrent - { 2068, new string[8] {null, null, null, null, null, null, null, null} }, // VolSmoke - { 2069, new string[8] {null, null, null, null, null, null, null, null} }, // FireworksN64Rs - { 2070, new string[8] {null, null, null, null, null, null, null, null} }, // DdQuickSandSplash - { 2071, new string[8] {null, null, null, null, null, null, null, null} }, // EntranceSunLight - { 2072, new string[8] {null, null, null, null, null, null, null, null} }, // LibrarySunLight - { 2073, new string[8] {null, null, null, null, null, null, null, null} }, // CorridorSunLight - { 2074, new string[8] {null, null, null, null, null, null, null, null} }, // AnnexeSunLight - { 2077, new string[8] {null, null, null, null, null, null, null, null} }, // DpManyFish - { 2078, new string[8] {null, null, null, null, null, null, null, null} }, // SlAurora - { 2079, new string[8] {null, null, null, null, null, null, null, null} }, // FcSearchLightClip - { 2081, new string[8] {null, null, null, null, null, null, null, null} }, // FcSearchLightOutside - { 2082, new string[8] {null, null, null, null, null, null, null, null} }, // BCTorch2 - { 2083, new string[8] {null, null, null, null, null, null, null, null} }, // DkSunLight - { 2084, new string[8] {null, null, null, null, null, null, null, null} }, // DL_Triforce - { 2085, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HySmoke - { 2086, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RainbowMountainA - { 2087, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RainbowMountainB - { 2088, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HyTorch - { 2089, new string[8] {null, null, null, null, null, null, null, null} }, // DL_McStartLogo - { 2090, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // DL_YoshiWaterCurrent - { 2091, new string[8] {null, null, null, null, null, null, null, null} }, // DL_DrTorch - { 2092, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_HySalute - { 2093, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HyHouseSmoke - { 2094, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WdChimneySmoke - { 2096, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkThunder - { 2097, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbStartLogoA - { 2098, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbStartLogoB - { 2099, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalFountain - { 2100, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalSmoke - { 3002, new string[8] {"Initial Delay", "Unknown 2", "Launch Velocity", "Launch Angle (Degrees)", null, null, null, null} }, // Rock1 - { 3004, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CarA - { 3006, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // TruckA - { 3007, new string[8] {null, null, null, null, null, null, null, null} }, // DkAirship - { 3008, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // Bus - { 3009, new string[8] {null, null, null, null, null, null, null, null} }, // Trolley - { 3011, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CarrierCar - { 3012, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // BDSandShip - { 3013, new string[8] {null, null, null, null, null, null, null, null} }, // Submarine - { 3014, new string[8] {null, null, null, null, null, null, null, null} }, // TrolleyNoMove - { 3015, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // APJetFly - { 3016, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // DiWheel - { 3018, new string[8] {"Unknown 1", null, "Unknown 3", null, null, null, null, null} }, // Chairlift - { 3020, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // CarSurf - { 3021, new string[8] {null, null, null, null, null, null, null, null} }, // N64RTrain - { 3022, new string[8] {null, null, null, null, null, null, null, null} }, // BDSandShipNoMove - { 3023, new string[8] {null, null, null, null, null, null, null, null} }, // GessoShuttle - { 3024, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_WarioTram - { 3025, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WarioTramB - { 3026, new string[8] {"Number of trains", "Unknown 2", "Unknown 3", "Unknown 4", "First respawn duration (#frames)", "Consecutive respawn duration (#frames)", "Train color ({0 red/1 blue})", "Unknown 8"} }, // DL_Metro - { 3027, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalTrain - { 4004, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ClockGearY - { 4005, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ClockHandL - { 4006, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // ClockGearZ - { 4007, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // Furiko - { 4036, new string[8] {null, null, null, null, null, null, null, null} }, // CityBoat - { 4038, new string[8] {null, null, null, null, null, null, null, null} }, // HorrorRoad - { 4039, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ClockHandS - { 4040, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // ClockGearPole - { 4042, new string[8] {"Fall Delay", null, null, null, null, null, null, null} }, // KaraPillar - { 4043, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // MpBoard - { 4044, new string[8] {null, null, null, null, null, null, null, null} }, // ExDash - { 4048, new string[8] {"Initial Delay", "Up Duration", "Delay between rise", "Geyser Height", null, null, null, null} }, // BDSandGeyser - { 4050, new string[8] {"Unknown 1", "Unknown 2", "Shake speed", "Unknown 4", "Unknown 5", "Unknown 6", null, null} }, // VolMovRoadPlus - { 4051, new string[8] {null, null, "Shake speed", "Unknown 4", "Unknown 5", "Unknown 6", null, null} }, // VolMovRoad - { 4052, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, "Model Index"} }, // VolcanoPiece - { 4055, new string[8] {null, null, null, null, null, null, null, null} }, // DiDomino - { 4060, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", "Unknown 5", null, null, null} }, // DkScreamPillar - { 4061, new string[8] {null, null, null, null, null, null, null, null} }, // SmDash - { 4065, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ClockHandL2 - { 4066, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // ClockHandS2 - { 4068, new string[8] {null, null, null, null, null, null, null, null} }, // KoopaRoadR - { 4069, new string[8] {null, null, null, null, null, null, null, null} }, // KoopaRoadL - { 4070, new string[8] {null, null, null, null, null, null, null, null} }, // RRroadout - { 4071, new string[8] {null, null, null, null, null, null, null, null} }, // RRroadin - { 4072, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // TtcBoard - { 4074, new string[8] {null, null, null, null, null, null, null, null} }, // SpikeBall - { 4075, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // ClockGearArrow - { 4077, new string[8] {null, null, null, null, null, null, null, null} }, // N64RRoad1 - { 4078, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // N64RRoad2 - { 4081, new string[8] {null, null, null, null, null, null, null, null} }, // DonutsRoadA - { 4082, new string[8] {null, null, null, null, null, null, null, null} }, // DonutsRoadB - { 4084, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // BCCannon - { 4085, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // RRdash - { 4086, new string[8] {null, null, null, null, null, null, null, "ID"} }, // DL_EbField - { 4087, new string[8] {"Pattern //", null, null, null, null, null, null, null} }, // DL_EbDirt - { 4088, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // DL_LotusLeaf - { 4089, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_AnimalBalloon - { 4090, new string[8] {null, null, null, null, null, null, null, null} }, // DL_EbDirtBig - { 4091, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HySwitch - { 4092, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HyJump - { 4095, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", null, null, null, null, null} }, // DL_Iceberg - { 4096, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_RainbowArrow - { 4097, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MasterSword - { 4098, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCGoalLine - { 4099, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SfcRRoad1 - { 4100, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SfcRRoad2 - { 4101, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SfcRRoad3 - { 4102, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SfcRRoad4 - { 4103, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCDashSet - { 4104, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RibbonRoad1 - { 4106, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_TicketGate - { 4107, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MetroTollBar - { 4108, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MetroDash - { 4109, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbDash - { 4110, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FallenLeaf - { 4111, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalShell - { 4112, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_RibbonBox - { 4113, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RibbonRoad2 - { 4114, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalApple - { 4115, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalOrange - { 4116, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalLemon - { 5002, new string[8] {null, null, null, null, null, null, null, null} }, // BumpingFlower - { 5005, new string[8] {null, null, null, null, null, null, null, null} }, // WindMill - { 5014, new string[8] {null, null, null, null, null, null, null, null} }, // TreeAgb - { 5015, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSnow - { 5016, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSph - { 5017, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64A - { 5019, new string[8] {null, null, null, null, null, null, null, null} }, // TreeTri - { 5020, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64Deep - { 5021, new string[8] {null, null, null, null, null, null, null, null} }, // WaterSurface - { 5022, new string[8] {null, null, null, null, null, null, null, null} }, // WaterBox - { 5023, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartDossun - { 5024, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartMario - { 5025, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartMooMoo - { 5026, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartAGB - { 5027, new string[8] {null, null, null, null, null, null, null, null} }, // YachtG - { 5028, new string[8] {null, null, null, null, null, null, null, null} }, // YachtP - { 5029, new string[8] {null, null, null, null, null, null, null, null} }, // YachtR - { 5030, new string[8] {null, null, null, null, null, null, null, null} }, // YachtY - { 5031, new string[8] {null, null, null, null, null, null, null, null} }, // HhDoor - { 5033, new string[8] {null, null, null, null, null, null, null, null} }, // HhChandelier - { 5034, new string[8] {null, null, null, null, null, null, null, null} }, // HhMovingWall - { 5041, new string[8] {null, null, null, null, null, null, null, null} }, // RotaryBoard - { 5042, new string[8] {null, null, null, null, null, null, null, null} }, // FlagRope1 - { 5044, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle1 - { 5047, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCakeB - { 5049, new string[8] {null, null, null, null, null, null, null, null} }, // WindMillCake - { 5051, new string[8] {null, null, null, null, null, null, null, null} }, // MpTrumpet - { 5052, new string[8] {null, null, null, null, null, null, null, null} }, // MpTambourin - { 5053, new string[8] {null, null, null, null, null, null, null, null} }, // MpSax - { 5054, new string[8] {null, null, null, null, null, null, null, null} }, // MpSpeaker - { 5056, new string[8] {null, null, null, null, null, null, null, null} }, // MpCymbal - { 5057, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // MpPiston - { 5058, new string[8] {null, null, null, null, null, null, null, null} }, // SearchLight - { 5059, new string[8] {null, null, null, null, null, null, null, null} }, // TollBar - { 5060, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCakeD - { 5062, new string[8] {null, null, null, null, null, null, null, null} }, // HhFan - { 5063, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle2 - { 5064, new string[8] {null, null, null, null, null, null, null, null} }, // ExExcavator - { 5070, new string[8] {null, null, null, null, null, null, null, null} }, // ClGun - { 5071, new string[8] {null, null, null, null, null, null, null, null} }, // ClBattleShip - { 5072, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64Yoshi - { 5075, new string[8] {null, null, null, null, null, null, null, null} }, // BDSearchLight - { 5076, new string[8] {null, null, null, null, null, null, null, null} }, // BDFlagSquare1 - { 5077, new string[8] {null, null, null, null, null, null, null, null} }, // BDWindmill - { 5078, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryDossun - { 5079, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryPeach - { 5080, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryMusic - { 5081, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle3 - { 5082, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // TcMirrorBall - { 5083, new string[8] {null, null, null, null, null, null, null, null} }, // Kanransya - { 5084, new string[8] {"// Cups in Circle", null, null, null, null, null, null, null} }, // CoffeeCup - { 5085, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSph_AddCol - { 5088, new string[8] {null, null, null, null, null, null, null, null} }, // TreeTriB - { 5089, new string[8] {null, null, null, null, null, null, null, null} }, // TreeBush - { 5090, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCityA - { 5091, new string[8] {null, null, null, null, null, null, null, null} }, // APGuide - { 5093, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCakeBB - { 5094, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCakeBY - { 5095, new string[8] {null, null, null, null, null, null, null, null} }, // APCBelt - { 5096, new string[8] {null, null, null, null, null, null, null, null} }, // APSBelt - { 5097, new string[8] {null, null, null, null, null, null, null, null} }, // APTollBar - { 5098, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle4 - { 5103, new string[8] {null, null, null, null, null, null, null, null} }, // WPTollBar - { 5104, new string[8] {null, null, null, null, null, null, null, null} }, // McGate - { 5106, new string[8] {null, null, null, null, null, null, null, null} }, // DrumInside - { 5107, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumA - { 5108, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumB - { 5109, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumC - { 5110, new string[8] {null, null, null, null, null, null, null, null} }, // ClTrampoline - { 5111, new string[8] {null, null, null, null, null, null, null, null} }, // SmHelicopter - { 5112, new string[8] {null, null, null, null, null, null, null, "Unknown 8"} }, // FcGallery - { 5114, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // AccelRing - { 5115, new string[8] {null, null, null, null, null, null, null, null} }, // RacingPole - { 5116, new string[8] {null, null, null, null, null, null, null, "Unknown 8"} }, // TechnoStepGreen - { 5117, new string[8] {null, null, null, null, null, null, null, "Unknown 8"} }, // TechnoStepRed - { 5118, new string[8] {null, null, null, null, null, null, null, null} }, // BarrelCannon - { 5119, new string[8] {null, null, null, null, null, null, null, null} }, // OcRing - { 5120, new string[8] {null, null, null, null, null, null, null, null} }, // APPropeller - { 5121, new string[8] {null, null, null, null, null, null, null, null} }, // FlagSquareAP - { 5122, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle5 - { 5124, new string[8] {null, null, null, null, null, null, null, null} }, // ClBattleShipS - { 5125, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryFc - { 5130, new string[8] {null, null, null, null, null, null, null, null} }, // CakeCannon - { 5131, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryWp - { 5132, new string[8] {null, null, null, null, null, null, null, null} }, // GuardrailRSpot - { 5133, new string[8] {null, null, null, null, null, null, null, null} }, // ExExcavatorBig - { 5134, new string[8] {null, null, null, null, null, null, null, null} }, // ClPropeller - { 5136, new string[8] {null, null, null, null, null, null, null, null} }, // BDRope - { 5137, new string[8] {null, null, null, null, null, null, null, null} }, // BDCloth - { 5138, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoA - { 5139, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoB - { 5140, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoC - { 5141, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // TcStarSpeaker - { 5142, new string[8] {null, null, null, null, null, null, null, null} }, // TcSpeaker - { 5145, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoD - { 5146, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoE - { 5147, new string[8] {null, null, null, null, null, null, null, null} }, // TcDisplay - { 5155, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoF - { 5156, new string[8] {null, null, null, null, null, null, null, null} }, // GearDecoG - { 5157, new string[8] {null, null, null, null, null, null, null, null} }, // ClockSpring - { 5161, new string[8] {null, null, null, null, null, null, null, null} }, // TcDisplayR - { 5162, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // TcSoundRoadG - { 5163, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // TcSoundRoadR - { 5165, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSnow_AddCol - { 5166, new string[8] {null, null, null, null, null, null, null, null} }, // TreeCityACol - { 5167, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumWarioC - { 5168, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumWarioA - { 5169, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStadiumWarioB - { 5170, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryWs - { 5171, new string[8] {null, null, null, null, null, null, null, null} }, // SlRopeL - { 5172, new string[8] {null, null, null, null, null, null, null, null} }, // SlRopeM - { 5173, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestrySl - { 5174, new string[8] {null, null, null, null, null, null, null, null} }, // GravityBox - { 5175, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartSnow - { 5176, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // N64RAccelRing - { 5177, new string[8] {null, null, null, null, null, null, null, null} }, // N64RCheck - { 5178, new string[8] {null, null, null, null, null, null, null, null} }, // N64RStart - { 5179, new string[8] {null, null, null, null, null, null, null, null} }, // SwanBoatR - { 5180, new string[8] {null, null, null, null, null, null, null, "Tire Stack Count" } }, // Tire - { 5181, new string[8] {null, null, null, null, null, null, null, null} }, // SwanBoatB - { 5182, new string[8] {null, null, null, null, null, null, null, null} }, // WaterPlantA - { 5183, new string[8] {null, null, null, null, null, null, null, null} }, // WaterPlantB - { 5184, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTapestryPs - { 5185, new string[8] {null, null, null, null, null, null, null, null} }, // WPBoatA - { 5186, new string[8] {null, null, null, null, null, null, null, null} }, // WPBoatB - { 5187, new string[8] {null, null, null, null, null, null, null, null} }, // WPBoatC - { 5188, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // N64RAccelRingAir - { 5189, new string[8] {null, null, null, null, null, null, null, null} }, // N64RStageSet - { 5190, new string[8] {null, null, null, null, null, null, null, null} }, // UltraArm - { 5192, new string[8] {null, null, null, null, null, null, null, null} }, // ClockBell - { 5193, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64Middle - { 5194, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64Light - { 5195, new string[8] {null, null, null, null, null, null, null, null} }, // FlagPeachCircuit - { 5196, new string[8] {null, null, null, null, null, null, null, null} }, // MilkTank - { 5198, new string[8] {null, null, null, null, null, null, null, null} }, // StrawRoll - { 5200, new string[8] {null, null, null, null, null, null, null, null} }, // ClockArm - { 5201, new string[8] {null, null, null, null, null, null, null, null} }, // ClockCylinder - { 5202, new string[8] {null, null, null, null, null, null, null, null} }, // BCGate - { 5203, new string[8] {null, null, null, null, null, null, null, null} }, // BCElevator - { 5204, new string[8] {null, null, null, null, null, null, null, null} }, // BCEngine - { 5205, new string[8] {null, null, null, null, null, null, null, null} }, // BCFlag - { 5207, new string[8] {null, null, null, null, null, null, null, null} }, // BCChain - { 5210, new string[8] {null, null, null, null, null, null, null, null} }, // TreeDD - { 5217, new string[8] {null, null, null, null, null, null, null, null} }, // TreeDonuts - { 5218, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64DeepCol - { 5219, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64MiddleCol - { 5220, new string[8] {null, null, null, null, null, null, null, null} }, // Tree64LightCol - { 5221, new string[8] {null, null, null, null, null, null, null, null} }, // TreePukupuku - { 5222, new string[8] {null, null, null, null, null, null, null, null} }, // ConnectBoard - { 5223, new string[8] {null, null, null, null, null, null, null, null} }, // SlRedSpot - { 5224, new string[8] {null, null, null, null, null, null, null, null} }, // BDFlagSquare2 - { 5225, new string[8] {null, null, null, null, null, null, null, null} }, // FlagStartPukupuku - { 5227, new string[8] {null, null, null, null, null, null, null, null} }, // SpinTurboBar_BD - { 5228, new string[8] {null, null, null, null, null, null, null, null} }, // FlagSquare1 - { 5229, new string[8] {null, null, null, null, null, null, null, null} }, // WsGate - { 5230, new string[8] {null, null, null, null, null, null, null, null} }, // PeachBell - { 5231, new string[8] {null, null, null, null, null, null, null, null} }, // SpinTurboBar_TC - { 5232, new string[8] {null, null, null, null, null, null, null, null} }, // SpinTurboBar_AP - { 5234, new string[8] {null, null, null, null, null, null, null, null} }, // OceanWaterPlantA - { 5235, new string[8] {null, null, null, null, null, null, null, null} }, // OceanWaterPlantB - { 5236, new string[8] {null, null, null, null, null, null, null, null} }, // RRstationA - { 5237, new string[8] {null, null, null, null, null, null, null, null} }, // RRstationB - { 5238, new string[8] {null, null, null, null, null, null, null, null} }, // RRstationC - { 5239, new string[8] {null, null, null, null, null, null, null, null} }, // RRguide - { 5240, new string[8] {null, null, null, null, null, null, null, null} }, // RRring - { 5241, new string[8] {null, null, null, null, null, null, null, null} }, // RRseat - { 5242, new string[8] {null, null, null, null, null, null, null, null} }, // WindMillSmall - { 5244, new string[8] {null, null, null, null, null, null, null, "Tire Stack Count"} }, // TireR - { 5245, new string[8] {null, null, null, null, null, null, null, "Tire Stack Count" } }, // TireW - { 5246, new string[8] {null, null, null, null, null, null, null, null} }, // PsFan - { 5247, new string[8] {null, null, null, null, null, null, null, null} }, // TcMoveLight - { 5248, new string[8] {null, null, null, null, null, null, null, null} }, // Weathercock - { 5249, new string[8] {null, null, null, null, null, null, null, null} }, // RRstartring - { 5250, new string[8] {null, null, null, null, null, null, null, null} }, // TcChandelier - { 5251, new string[8] {null, null, null, null, null, null, null, null} }, // FlagMusicSwing - { 5252, new string[8] {null, null, null, null, null, null, null, null} }, // SherbetPlantA - { 5253, new string[8] {null, null, null, null, null, null, null, null} }, // SherbetPlantB - { 5254, new string[8] {null, null, null, null, null, null, null, null} }, // FlagTriangle3Y - { 5255, new string[8] {null, null, null, null, null, null, null, null} }, // N64RStageSet2 - { 5256, new string[8] {null, null, null, null, null, null, null, null} }, // N64RStar - { 5257, new string[8] {null, null, null, null, null, null, null, null} }, // TcChandelierS - { 5258, new string[8] {null, null, null, null, null, null, null, null} }, // TcChandelierM - { 5259, new string[8] {null, null, null, null, null, null, null, null} }, // WindMillB - { 5261, new string[8] {null, null, null, null, null, null, null, null} }, // SpinTurboBar_RR - { 5262, new string[8] {null, null, null, null, null, null, null, null} }, // CmnDashBoard - { 5263, new string[8] {null, null, null, null, null, null, null, null} }, // McJump - { 5265, new string[8] {null, null, null, null, null, null, null, null} }, // MmJump - { 5266, new string[8] {null, null, null, null, null, null, null, null} }, // KhJump - { 5267, new string[8] {null, null, null, null, null, null, null, null} }, // SmFan - { 5268, new string[8] {null, null, null, null, null, null, null, null} }, // BCParts - { 5269, new string[8] {null, null, null, null, null, null, null, null} }, // ClGuide - { 5270, new string[8] {null, null, null, null, null, null, null, null} }, // BCPiston - { 5271, new string[8] {null, null, null, null, null, null, null, null} }, // BCBattleShipS - { 5272, new string[8] {null, null, null, null, null, null, null, null} }, // SearchLightNoClip - { 5273, new string[8] {null, null, null, null, null, null, null, null} }, // RRbox - { 5274, new string[8] {null, null, null, null, null, null, null, null} }, // McKart - { 5275, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSphB - { 5276, new string[8] {null, null, null, null, null, null, null, null} }, // CiJump - { 5277, new string[8] {null, null, null, null, null, null, null, null} }, // TreeSphB_AddCol - { 5278, new string[8] {null, null, null, null, null, null, null, null} }, // Holography - { 5279, new string[8] {"Unknown 1", null, "Unknown 3", null, null, null, null, null} }, // ChairliftNoMove - { 5280, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeTri - { 5281, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeApple - { 5282, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_DR - { 5283, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_MC - { 5284, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WgExcavator - { 5285, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WgGear - { 5286, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WgGearBig - { 5287, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagStartIce - { 5289, new string[8] {null, null, null, null, null, null, null, null} }, // DL_EbGridGate - { 5290, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeOrange - { 5291, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeLemon - { 5292, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeSphYoshi - { 5293, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagTriangle6 - { 5294, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WgFlagSquare - { 5295, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeAnimal - { 5296, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagStadiumEB - { 5297, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreePineA - { 5298, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreePineB - { 5299, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagDragon - { 5300, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCRotaryBoardA - { 5301, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCBldgParts - { 5302, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCCars - { 5303, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCTriangleBoard - { 5304, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCPipeRing - { 5305, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCJets - { 5306, new string[8] {null, null, null, null, null, null, null, null} }, // DL_HyFlagSquare - { 5307, new string[8] {null, null, null, null, null, null, null, null} }, // DL_IceFlagSquare - { 5308, new string[8] {null, null, null, null, null, null, null, null} }, // DL_YcYacht - { 5309, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_IP - { 5310, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WeathercockYoshi - { 5311, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagStartYoshi - { 5312, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagRopeYoshi - { 5313, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MasterSwordBase - { 5314, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCRotaryBoardB - { 5315, new string[8] {null, null, null, null, null, null, null, null} }, // DL_MCRotaryBoardC - { 5316, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", "Unknown 5", "Unknown 6", null, null} }, // DL_WoElevator - { 5317, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WoWaterWheel - { 5318, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbAirship - { 5319, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbCars - { 5320, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbJets - { 5321, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpSwingride - { 5322, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpPirate - { 5323, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpParatroopa - { 5324, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpWingA - { 5325, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpWingB - { 5326, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpGear - { 5327, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_CheeseBox - { 5328, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreePalm - { 5329, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_CoinStone - { 5330, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpKanransya - { 5331, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpCoaster - { 5332, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeAutumnApple - { 5333, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeAutumnLemon - { 5334, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeAutumnOrange - { 5335, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeWinter - { 5336, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeWinterApple - { 5337, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeWinterLemon - { 5338, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeWinterOrange - { 5339, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeSakura - { 5340, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeBushAutumn - { 5341, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeBushWinter - { 5342, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_TreeAutumn - { 5343, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkSearchLight - { 5344, new string[8] {null, null, null, null, null, null, null, null} }, // DL_StationAlarm - { 5345, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagStartWoods - { 5346, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeSakura2 - { 5347, new string[8] {null, null, null, null, null, null, null, null} }, // DL_TreeSakura3 - { 5348, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalJump - { 5349, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkGate - { 5350, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkArrowArea_A - { 5351, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkArrowArea_B - { 5352, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkArrowArea_C - { 5353, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_Bb - { 5354, new string[8] {null, null, null, null, null, null, null, null} }, // DL_Bbguide - { 5355, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbAccelRing - { 5356, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbCannon - { 5357, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbBuildA - { 5358, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbCarsB - { 5359, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalFlag - { 5360, new string[8] {null, null, null, null, null, null, null, null} }, // DL_FlagTriangle7 - { 5361, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkElevator - { 5362, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkRotaryBoard_A - { 5363, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkCars_A - { 5372, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BpStartGate - { 5373, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_Nk - { 5376, new string[8] {null, null, null, null, null, null, null, null} }, // DL_SpinTurboBar_Cl - { 5377, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbPipeRing - { 5378, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbRotaryBoardA - { 5379, new string[8] {null, null, null, null, null, null, null, null} }, // DL_BbBoardPart - { 5381, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkArrowArea_D - { 5382, new string[8] {null, null, null, null, null, null, null, null} }, // DL_NkArrowArea_E - { 5383, new string[8] {"Unknown 1", "Unknown 2", "Unknown 3", "Unknown 4", null, null, null, null} }, // DL_CoinStoneSnow - { 6002, new string[8] {null, null, null, null, null, null, null, "Spawn Index"} }, // TestStart - { 6003, new string[8] {null, null, null, null, null, null, null, "Spawn Index" } }, // Start - { 6004, new string[8] {null, null, null, null, null, null, null, null} }, // Sun - { 6005, new string[8] {null, null, null, null, null, null, null, null} }, // Moon - { 6006, new string[8] {null, null, null, null, null, null, null, null} }, // Sunset - { 6008, new string[8] {null, null, null, null, null, null, null, null} }, // SunInf - { 6009, new string[8] {null, null, null, null, null, null, null, null} }, // SunInfY - { 6010, new string[8] {null, null, null, null, null, null, null, null} }, // MoonInf - { 6011, new string[8] {null, null, null, null, null, null, null, null} }, // MoonInfY - { 6012, new string[8] {null, null, null, null, null, null, null, null} }, // SunsetInf - { 6013, new string[8] {null, null, null, null, null, null, null, null} }, // SunsetInfY - { 6014, new string[8] {null, null, null, null, null, null, null, null} }, // Moon2Inf - { 6015, new string[8] {null, null, null, null, null, null, null, null} }, // Moon2InfY - { 6016, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RainbowLightA - { 6017, new string[8] {null, null, null, null, null, null, null, null} }, // DL_RainbowLightB - { 7005, new string[8] {null, null, null, null, null, null, null, null} }, // VR64Highway - { 7006, new string[8] {null, null, null, null, null, null, null, null} }, // VRfair - { 7008, new string[8] {null, null, null, null, null, null, null, null} }, // VRagbMario - { 7009, new string[8] {null, null, null, null, null, null, null, null} }, // VR64Peach - { 7010, new string[8] {null, null, null, null, null, null, null, null} }, // VRHorror - { 7011, new string[8] {null, null, null, null, null, null, null, null} }, // VRCake - { 7012, new string[8] {null, null, null, null, null, null, null, null} }, // VRcloudSea - { 7013, new string[8] {null, null, null, null, null, null, null, null} }, // VRWaterPark - { 7014, new string[8] {null, null, null, null, null, null, null, null} }, // VRFirst - { 7015, new string[8] {null, null, null, null, null, null, null, null} }, // VRAirport - { 7016, new string[8] {null, null, null, null, null, null, null, null} }, // VRTechno - { 7017, new string[8] {null, null, null, null, null, null, null, null} }, // VRSnowMt - { 7018, new string[8] {null, null, null, null, null, null, null, null} }, // VRCloud - { 7019, new string[8] {null, null, null, null, null, null, null, null} }, // VRDesert - { 7020, new string[8] {null, null, null, null, null, null, null, null} }, // VRExpert - { 7021, new string[8] {null, null, null, null, null, null, null, null} }, // VRCity - { 7022, new string[8] {null, null, null, null, null, null, null, null} }, // VRDossun - { 7023, new string[8] {null, null, null, null, null, null, null, null} }, // VRMario - { 7024, new string[8] {null, null, null, null, null, null, null, null} }, // VR64Yoshi - { 7025, new string[8] {null, null, null, null, null, null, null, null} }, // VRMenu - { 7026, new string[8] {null, null, null, null, null, null, null, null} }, // VRStorm - { 7027, new string[8] {null, null, null, null, null, null, null, null} }, // VRGcDesert - { 7028, new string[8] {null, null, null, null, null, null, null, null} }, // VRWiiMoo - { 7029, new string[8] {null, null, null, null, null, null, null, null} }, // VRCosmos - { 7030, new string[8] {null, null, null, null, null, null, null, null} }, // VRCustomizer - { 7031, new string[8] {null, null, null, null, null, null, null, null} }, // VRWarioStadium - { 7032, new string[8] {null, null, null, null, null, null, null, null} }, // VRG64Rainbow - { 7033, new string[8] {null, null, null, null, null, null, null, null} }, // VRRainbowRoad - { 7034, new string[8] {null, null, null, null, null, null, null, null} }, // VRClock - { 7035, new string[8] {null, null, null, null, null, null, null, null} }, // VROcean - { 7036, new string[8] {null, null, null, null, null, null, null, null} }, // VRSherbet - { 7037, new string[8] {null, null, null, null, null, null, null, null} }, // VRDonuts - { 7038, new string[8] {null, null, null, null, null, null, null, null} }, // VRPackunS - { 7039, new string[8] {null, null, null, null, null, null, null, null} }, // VRPukuB - { 7040, new string[8] {null, null, null, null, null, null, null, null} }, // VRBowser - { 7041, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRSfcRainbow - { 7042, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRMuteCity - { 7043, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRDragon - { 7044, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRExciteBike - { 7045, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRHyrule - { 7046, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRIcePark - { 7047, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRBabyPark - { 7048, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRYoshiCircuit - { 7049, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRWoods - { 7050, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRNeoBowserCity - { 7051, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRRibbon - { 7052, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRAnimalSpring - { 7053, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRAnimalSummer - { 7054, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRAnimalAutumn - { 7055, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRAnimalWinter - { 7056, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRCheeseLand - { 7057, new string[8] {null, null, null, null, null, null, null, null} }, // DL_VRBigBlue - { 8001, new string[8] {null, null, null, null, null, null, null, null} }, // ColCylinder - { 8008, new string[8] {"Spawn Index", null, null, null, null, null, null, null} }, // StartEx - { 8009, new string[8] {null, null, null, null, null, null, null, null} }, // ColCylinderStone - { 8010, new string[8] {null, null, null, null, null, null, null, null} }, // ColCylinderWood - { 8011, new string[8] {null, null, null, null, null, null, null, null} }, // ColCylinderMetal - { 8014, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // CmnWaterCurrent_NoMdl - { 8015, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // CmnWaterCurrent_NoEff - { 8016, new string[8] {null, null, null, null, null, null, null, null} }, // ColSpinDash - { 8017, new string[8] {null, null, null, null, null, null, null, null} }, // ColCylinderGum - { 8021, new string[8] {null, null, null, null, null, null, null, null} }, // RRsat - { 8022, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // N64RCoin - { 8024, new string[8] {null, null, null, null, null, null, null, null} }, // ColLeafBox - { 8025, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // NoteArea - { 8026, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // ShortCutBox - { 8027, new string[8] {null, null, null, null, null, null, null, null} }, // DL_EbCheerCol - { 8028, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_EbApproachCol - { 8029, new string[8] {"Unknown 1", "Unknown 2", null, null, null, null, null, null} }, // Adjuster200cc - { 8030, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WanwanSearchArea - { 8031, new string[8] {null, null, null, null, null, null, null, null} }, // DL_WanwanAttackPoint - { 8032, new string[8] {"Unknown 1", null, null, null, null, null, null, null} }, // DL_AnimalVoiceAutumn - { 8033, new string[8] {null, null, null, null, null, null, null, null} }, // DL_AnimalVoiceSummer - { 9006, new string[8] {null, null, null, null, null, null, null, null} }, // KaraPillarBase - { 9007, new string[8] {null, null, null, null, null, null, null, null} }, // ItemBoxFont - }; + Console.WriteLine($"Reading MapObj archive {path}..."); + var content = File.ReadAllText(path); + try + { + Dictionary objects = JsonConvert.DeserializeObject>(content); + foreach (KeyValuePair obj in objects) + { + AddMetaToArchive(obj.Key, obj.Value, metaDB); + //Console.WriteLine($"MapObjMeta ({obj.Key}):"); + //obj.Value.WriteDebugLog(); + //Console.WriteLine("------"); + } + if (writeToConsole) + StudioLogger.WriteLine($"Succesfully loaded user meta <{System.IO.Path.GetFileName(path)}>"); + } + catch (Exception e) + { + Console.Error.WriteLine(e); + if (writeToConsole) + StudioLogger.WriteError($"Error loading user meta <{System.IO.Path.GetFileName(path)}>"); + DialogHandler.ShowException(new Exception($"Error loading MapObj meta in {path}.\n{e.Message}\n", e)); + } + } } } diff --git a/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDescriptors.cs b/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDescriptors.cs new file mode 100644 index 0000000..ad0dac7 --- /dev/null +++ b/Plugins/TurboLibrary/FileData/Muunt/MapObj/ParamDescriptors.cs @@ -0,0 +1,264 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using MapStudio.UI; +using Newtonsoft.Json; + +namespace TurboLibrary +{ + public enum UVersion + { + None = -1, + Base = 0, + Zelda, + Animal, + Mercedes, + Modded, + } + + public enum DXVersion + { + None = -1, + Base = 0, + BCP_1, + BCP_2, + BCP_3, + BCP_4, + BCP_5, + BCP_6, + Modded, + } + + public class MetaPlatforms + { + private UVersion? _uVersion = null; + private DXVersion? _dxVersion = null; + public UVersion VersionU { get => _uVersion == null ? UVersion.Base : (UVersion)_uVersion; set => _uVersion = value; } // Parameter is used in the Wii U version; null assumes true + public DXVersion VersionDX { get => _dxVersion == null ? DXVersion.Base : (DXVersion)_dxVersion; set => _dxVersion = value; } // Parameter is used in Deluxe on the Switch; null assumes true + + /// + /// Merges this platform info with another one. + /// + /// + public void Merge(MetaPlatforms other) + { + _uVersion = other._uVersion ?? _uVersion; + _dxVersion = other._dxVersion ?? _dxVersion; + } + } + + /// + /// Meta information for an object () placed in the course. This information is not present + /// in the objflow.byaml, but serves as more user-friendly guidelines for editing. + /// + public class MapObjMeta + { + public bool IsDocumented { get; private set; } + + public string Name { get; set; } = ""; + + public string Description { get; set; } = ""; + + public List Aliases { get; set; } = []; + + public List Usages { get; set; } = []; // "U Sunshine Airport, ..." + + public ParamDescriptor[] Params { get; } = [ + new ParamDescriptor(0), new ParamDescriptor(1), new ParamDescriptor(2), new ParamDescriptor(3), + new ParamDescriptor(4), new ParamDescriptor(5), new ParamDescriptor(6), new ParamDescriptor(7) + ]; + + // Wii U/Switch versions + public MetaPlatforms Platforms { get; } = new(); + [JsonProperty("VersionU")] private UVersion VersionU { set => Platforms.VersionU = value; } + [JsonProperty("VersionDX")] private DXVersion VersionDX { set => Platforms.VersionDX = value; } + + + // Utilised by JSON deserializer + private void setParam(int i, ParamDescriptor pd) + { + Params[i] = pd; + Params[i].IsUsed = true; + } + + // For deserialization. The JSON format is more user friendly when allowing parameters to be defined this way. + [JsonProperty("param_0")] private ParamDescriptor Param1 { set => setParam(0, value); } + [JsonProperty("param_1")] private ParamDescriptor Param2 { set => setParam(1, value); } + [JsonProperty("param_2")] private ParamDescriptor Param3 { set => setParam(2, value); } + [JsonProperty("param_3")] private ParamDescriptor Param4 { set => setParam(3, value); } + [JsonProperty("param_4")] private ParamDescriptor Param5 { set => setParam(4, value); } + [JsonProperty("param_5")] private ParamDescriptor Param6 { set => setParam(5, value); } + [JsonProperty("param_6")] private ParamDescriptor Param7 { set => setParam(6, value); } + [JsonProperty("param_7")] private ParamDescriptor Param8 { set => setParam(7, value); } + + // For JSON deserialization + [JsonConstructor] + public MapObjMeta() { } + + public MapObjMeta(bool isDocumented) + { + IsDocumented = isDocumented; + Name = ""; + Description = ""; + // Mark all parameters as used if we don't know this object + if (!isDocumented) + Array.ForEach(Params, pd => pd.IsUsed = true); + } + + /// + /// Writes this Meta information to the console for debugging purposes + /// + public void WriteDebugLog() + { + foreach (var property in GetType().GetProperties()) + { + Console.WriteLine("{0} = {1}", property.Name, property.GetValue(this, null)); + } + Console.Write($"Aliases = {string.Join("|", Usages)}"); + Console.Write($"Usages = {string.Join("|", Usages)}"); + + for (int i = 0; i < Params.Length; i++) + { + Console.WriteLine($"Param {i}"); + ParamDescriptor pd = Params[i]; + + if (pd is null) + { + Console.WriteLine("\tnull"); + continue; + } + + foreach (var property in pd.GetType().GetProperties()) + { + Console.WriteLine("\t{0} = {1}", property.Name, property.GetValue(pd, null)); + } + Console.WriteLine("\tEnum: " + string.Join("|", pd.Enum.Select(kvp => $"{kvp.Key}: {kvp.Value}"))); + } + } + + public void Merge(MapObjMeta other) + { + IsDocumented = IsDocumented || other.IsDocumented; + Name = string.IsNullOrWhiteSpace(other.Name) ? Name : other.Name; + Description = string.IsNullOrWhiteSpace(other.Description) ? Description : other.Description; + Aliases.AddRange(other.Aliases); + Aliases.Sort(); + Usages.AddRange(other.Usages); + Usages.Sort(); + Platforms.Merge(other.Platforms); + + for (int i = 0; i < Params.Length; i++) + { + Params[i].Merge(other.Params[i]); + } + } + + } + + /// + /// Parameter descriptions + /// + public class ParamDescriptor + { + public enum ParamType + { + UNKNOWN, + Float, + Int, + Bool, + Time, // Timer. 60fps, so a value of 60.0 means 1 second. + Enum, + Bytes, // Raw bytes + } + + public bool IsUsed { get; internal set; } = false; + + public int paramIndex { get; set; } = -1; + + private string _name = ""; + public string Name + { + get { + if (!string.IsNullOrWhiteSpace(_name)) + return _name; + if (!IsUsed) + return string.Format(TranslationSource.GetText("PARAM_UNUSED"), paramIndex); + return string.Format(TranslationSource.GetText("PARAM_NOTDOC"), paramIndex); + } + set => _name = value; + } + + public string Description { get; set; } = ""; + + private float? _default = null; + public float Default { get => _default ?? 0f; set => _default = value; } + + public List Samples { get; set; } = []; + + public ParamType Type { get; set; } = ParamType.UNKNOWN; + + public float? MinValue { get; set; } = null; + public float? MaxValue { get; set; } = null; + + public Dictionary Enum { get; set; } = []; + + // Wii U/Switch versions + public MetaPlatforms Platforms { get; } = new(); + [JsonProperty("VersionU")] private UVersion VersionU { set => Platforms.VersionU = value; } + [JsonProperty("VersionDX")] private DXVersion VersionDX { set => Platforms.VersionDX = value; } + + public ParamDescriptor(int i) { + paramIndex = i; + } + + public bool Validate(float value) + { + switch (Type) + { + case ParamType.Bytes: + // Always valid + break; + case ParamType.Float: + return ValidateMinMax(value); + case ParamType.Int: + // account for rounding errors + return MathF.Abs(value - MathF.Round(value)) <= float.Epsilon && ValidateMinMax(value); + case ParamType.Time: + // account for rounding errors + return value >= 0 && MathF.Abs(value - MathF.Round(value)) <= float.Epsilon && ValidateMinMax(value); + case ParamType.Bool: + return value == 0f || value == 1f; + case ParamType.Enum: + return Enum.ContainsKey(value); + } + return true; + } + + private bool ValidateMinMax(float Value) + { + return (MinValue is null || Value >= MinValue) && (MaxValue is null || Value <= MaxValue); + } + + /// + /// Merges this descriptor with another one. The other descriptor has priority, assuming values are set. + /// + /// + public void Merge(ParamDescriptor other) + { + IsUsed = IsUsed || other.IsUsed; + _name = string.IsNullOrWhiteSpace(other._name) ? _name : other._name; + Description = string.IsNullOrWhiteSpace(other.Description) ? Description : other.Description; + _default = other._default ?? _default; + Samples.AddRange(other.Samples); + Samples.Sort(); + Type = other.Type == ParamType.UNKNOWN ? Type : other.Type; + MinValue = other.MinValue ?? MinValue; + MaxValue = other.MaxValue ?? MaxValue; + foreach (KeyValuePair kv in other.Enum) { + Enum[kv.Key] = kv.Value; + } + Platforms.Merge(other.Platforms); + } + } + +} diff --git a/Plugins/TurboLibrary/FileData/Muunt/ObjDefinitionDb/ObjDefinition.cs b/Plugins/TurboLibrary/FileData/Muunt/ObjDefinitionDb/ObjDefinition.cs index 6665786..ecb3d4f 100644 --- a/Plugins/TurboLibrary/FileData/Muunt/ObjDefinitionDb/ObjDefinition.cs +++ b/Plugins/TurboLibrary/FileData/Muunt/ObjDefinitionDb/ObjDefinition.cs @@ -12,6 +12,7 @@ namespace TurboLibrary public class ObjDefinition { // ---- PROPERTIES --------------------------------------------------------------------------------------------- + public MapObjMeta Meta { get; private set; } /// /// Gets or sets the way the AI interacts with this Obj. @@ -274,7 +275,10 @@ public bool NotCreate public int ObjId { get => objId; - set => SetField(ref objId, value); + set { + Meta = GlobalSettings.ParamDataBase.GetMeta(value); + SetField(ref objId, value); + } } private int objId; diff --git a/Plugins/TurboLibrary/GlobalSettings.cs b/Plugins/TurboLibrary/GlobalSettings.cs index 99dadb0..498accd 100644 --- a/Plugins/TurboLibrary/GlobalSettings.cs +++ b/Plugins/TurboLibrary/GlobalSettings.cs @@ -17,6 +17,12 @@ public class GlobalSettings /// public static Dictionary ObjDatabase = new Dictionary(); + /// + /// The database for obj actor parameters meta information. Things like parameter descriptions and types, or aliases. + /// This information cannot be extracted from the game files. + /// + public static ParamDataBaseSingleton ParamDataBase = ParamDataBaseSingleton.Instance; + /// /// The games content path. /// diff --git a/Plugins/TurboLibrary/Lib/Languages/English/TurboStudio.txt b/Plugins/TurboLibrary/Lib/Languages/English/TurboStudio.txt index 715ca6c..8a76ee8 100644 --- a/Plugins/TurboLibrary/Lib/Languages/English/TurboStudio.txt +++ b/Plugins/TurboLibrary/Lib/Languages/English/TurboStudio.txt @@ -46,8 +46,8 @@ OBJECT - Object # These are short for game modes (multiplayer 2 player, 4 player, wifi, etc) MULTI2P - Multi2P MULTI4P - Multi4P -WIFI = WiFi -WIFI2P = WiFi2P +WIFI - WiFi +WIFI2P - WiFi2P NAME - Name DISABLE_COLLISION - Disable Collision @@ -56,10 +56,35 @@ SINGLE - Single PATH_SPEED - Path Speed EDIT_PATH - Edit Path +PLATFORM_U - Wii U +PLATFORM_SWITCH - Switch +PLATFORM_MOD - Mod +DLC_U_ZELDA - Zelda DLC +DLC_U_ANIMAL - Animal Crossing DLC +DLC_U_MERCEDES - Mercedes DLC +DLC_DX_BCP_1 - BCP (Wave 1) +DLC_DX_BCP_2 - BCP (Wave 2) +DLC_DX_BCP_3 - BCP (Wave 3) +DLC_DX_BCP_4 - BCP (Wave 4) +DLC_DX_BCP_5 - BCP (Wave 5) +DLC_DX_BCP_6 - BCP (Wave 6) + +TRACK_USAGE - Used in +TAGS - Tags PARAMETERS - Parameters PATHS - Paths -DISPLAY_UNUSED - Display Unused -UNUSED = Unused +DISPLAY - Display +DISPLAY_UNUSED - Unused +DISPLAY_RAW - Raw +DISPLAY_ANY_PLATFORM - Unsupported +PARAM_UNUSED - UNUSED {0} +PARAM_NOTDOC - Unknown {0} +ENUM_UNKNOWN - UNKNOWN +PARAM_DEFAULT - Default +PARAM_MIN - Min +PARAM_MAX - Max +PARAM_SAMPLE - Example(s) +PARAM_WARNING - {0}f is the current value. It is considered invalid and may not be displayed properly in this widget. RELATIVES - Relatives RELATIVE_OBJECT - Relative Object diff --git a/Plugins/TurboLibrary/Resources/MapObj_DX_BCP.json b/Plugins/TurboLibrary/Resources/MapObj_DX_BCP.json new file mode 100644 index 0000000..f351347 --- /dev/null +++ b/Plugins/TurboLibrary/Resources/MapObj_DX_BCP.json @@ -0,0 +1,17 @@ +{ + "1202": { + "name": "Battan", + "description": "", + "aliases": ["Whomp", "It makes me so mad!"], + "usages": ["Tour Berlin Byways"], + "versionU": -1, + "versionDX": "BCP_3", + "param_0": {"name": "Fall Distance"}, + "param_1": {"name": "Flip (Degrees)"}, + "param_2": {"name": "Fall State Time"}, + "param_3": { + "name": "Initial Smash Delay", + "type": "time" + } + } +} diff --git a/Plugins/TurboLibrary/Resources/MapObj_DX_Base.json b/Plugins/TurboLibrary/Resources/MapObj_DX_Base.json new file mode 100644 index 0000000..92d4270 --- /dev/null +++ b/Plugins/TurboLibrary/Resources/MapObj_DX_Base.json @@ -0,0 +1,10 @@ +{ + "1013": { + "name": "ItemBox", + "param_0": { + "name": "Is Double", + "type": "bool", + "versionU": -1, + } + } +} diff --git a/Plugins/TurboLibrary/Resources/MapObj_U_Base.json b/Plugins/TurboLibrary/Resources/MapObj_U_Base.json new file mode 100644 index 0000000..c1ebb3b --- /dev/null +++ b/Plugins/TurboLibrary/Resources/MapObj_U_Base.json @@ -0,0 +1,2585 @@ +{ + "1003": { + "name": "Choropoo", + "description": "A mole that follows a path while burrowed, creating a trickable surface. Occasionally jumps up through a hole, hitting drivers.", + "aliases": ["Monty Mole"], + "usages": ["Wii Moo Moo Meadows", "SNES Donut Plains 3"] + }, + "1004": { + "name": "Frogoon", + "description": "", + "usages": ["3DS DK Jungle"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1005": { + "name": "PylonB", + "description": "A blue traffic cone.", + "aliases": ["Cone"], + "usages": [] + }, + "1006": { + "name": "PackunMusic", + "description": "", + "aliases": ["Piranha Plant"], + "usages": ["3DS Music Park"], + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": { + "name": "Life Time", + "type": "time" + }, + "param_2": { + "name": "Delay", + "type": "time" + }, + "param_3": {} + }, + "1007": { + "name": "KuriboBoard", + "description": "A wooden board featuring a goomba. Can be dashed through with a mushroom.", + "aliases": ["Goomba"], + "usages": ["3DS Piranha Plant Slide"], + "param_0": {} + }, + "1008": { + "name": "DKBarrel", + "description": "A barrel featuring a DK logo.", + "usages": ["3DS DK Jungle"] + }, + "1009": { + "name": "PylonY", + "description": "A yellow traffic cone. Unused in the base game.", + "aliases": ["cone"], + }, + "1010": { + "name": "DdQuicksand", + "description": "", + "usages": ["GCN Dry Dry Desert"] + }, + "1011": { + "name": "Kuribo", + "description": "A goomba, which can walk along a path.", + "aliases": ["Goomba"], + "param_1": {"name": "Lap Point Search Range"} + }, + "1012": { + "name": "Sanbo", + "description": "A pokey that moves along a path, occasionally tilting to form a gate with a coin.", + "aliases": ["Pokey", "Coin"], + "usages": ["GCN Dry Dry Desert"], + "param_0": { + "name": "Inital Delay", + "description": "Delay until it forms the first coin gate.", + "type": "time", + "default": 0, + }, + "param_1": { + "name": "Wait Cycle", + "description": "Delay between coin gates. Note that this value is not in frames. This value also affects its respawn timer.\nIf 0, the pokey does not respawn! When coin gates are not desired, use a very high initial delay instead.", + "default": 5, + } + }, + "1013": { + "name": "ItemBox", + "description": "A respawnable box that grants an item.", + }, + "1014": { + "name": "Dossun", + "description": "A thwomp that crashes down to crush drivers.", + "aliases": ["Thwomp"], + "usages": ["U Thwomp Ruins"], + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": { + "name": "Slam Delay", + "type": "time" + }, + "param_2": {} + }, + "1015": { + "name": "Crab", + "description": "", + "usages": ["DS Cheep Cheep Beach"] + }, + "1016": { + "name": "SnowRock", + "description": "A stationary freezie that can be dashed through with a mushroom.", + "aliases": ["Freezie"], + "usages": ["GCN Sherbet Land"] + }, + "1017": { + "name": "BushBoard", + "description": "A wooden board featuring a bush.", + "usages": ["3DS Piranha Plant Slide"] + }, + "1018": { + "name": "Coin", + "description": "A collectible coin that respawns. Drivers can collect at most 10, with each coin increasing the driver's max speed by a little.", + "param_0": {}, + "param_3": {} + }, + "1019": { + "name": "Dokan1", + "description": "", + "aliases": ["Pipe"], + }, + "1021": { + "name": "Basabasa", + "description": "A set number of bats flying along a path.", + "aliases": ["Swoop", "Bat", "Bird"], + "usages": ["U Mount Wario", "N64 Yoshi Valley", "Wii Wario's Goldmine"], + "param_0": { + "name": "Initial Delay", + "type": "time", + "default": 0 + }, + "param_1": { + "name": "Spawn Interval", + "description": "Delay between the last bat despawning at the end of the path, and the first one respawning at the start of the path.", + "default": 0 + }, + "param_2": { + "name": "Spawn Count", + "description": "Number of bats", + "default": 1, + "minValue": 1, + }, + "param_3": { + "name": "Start Distance", + "default": 3, + "samples": [3, 4] + }, + "param_4": { + "name": "Space Between", + "description": "Distance between two consecutive bats (if using more than one)", + "default": 100 + } + }, + "1022": { + "name": "Barrel", + "description": "A normal barrel, without a DK logo", + "usages": ["N64 Yoshi Valley"] + }, + "1023": { + "name": "CrashBox", + "description": "A breakable crate.", + "aliases": ["barrel"], + "usages": ["U Toad Harbor"] + }, + "1024": { + "name": "PylonR", + "description": "A red traffic cone.", + "aliases": ["Cone"] + }, + "1025": { + "name": "Pukupuku", + "description": "A swimming cheep cheep.", + "aliases": ["Cheep Cheep"], + "usages": ["DS Cheep Cheep Beach", "U Dolphin Shoals"], + "param_0": { + "name": "Inital Delay", + "type": "time" + }, + "param_1": {}, + "param_2": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_3": {"name": "Start Distance"}, + "param_4": {"name": "Space Between"} + }, + "1026": { + "name": "TikiTak", + "description": "A Tiki Goon from the Donkey Kong series.", + "usages": ["3DS DK Jungle"] + }, + "1027": { + "name": "PackunFlower", + "description": "A Piranha Plant with a pipe.", + "aliases": ["Piranha Plant", "Pipe"], + "usages": ["3DS Piranha Plant Slide", ""], + "param_0": { + "name": "First Wait Frame", + "type": "time" + }, + "param_1": {"name": "Angle (Degrees)"} + }, + "1028": { + "name": "PuchiPackun", + "description": "A snoozing Piranha Plant that jumps up when hit.", + "aliases": ["Piranha Plant"], + "usages": ["N64 Royal Raceway"] + }, + "1029": { + "name": "SkateHeyhoR", + "description": "A red ice skating Shy Guy. Occasionally jumps.", + "aliases": ["Shy Guy", "Ice"], + "usages": ["GCN Sherbet Land"] + }, + "1030": { + "name": "Note", + "description": "A bouncing note that jumps up and down based on the track's rhythm.", + "aliases": ["Rhythm"], + "usages": ["3DS Music Park"] + }, + "1031": { + "name": "SkateHeyhoB", + "description": "A blue ice skating Shy Guy. Occasionally jumps.", + "aliases": ["Shy Guy", "Ice"], + "usages": ["GCN Sherbet Land"], + "param_2": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_3": {}, + "param_4": {} + }, + "1032": { + "name": "SnowMan", + "description": "", + "usages": ["GCN Sherbet Land"] + }, + "1033": { + "name": "MovingCoin", + "description": "A coin that can move along a path.", + "param_1": {} + }, + "1034": { + "name": "MovingItemBox", + "description": "An item box that can move along a path.", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1035": { + "name": "Oil", + "description": "An oil slick that spins drivers out.", + "aliases": ["Slick"], + "usages": ["GBA Mario Circuit"] + }, + "1036": { + "name": "PcBalloon", + "description": "A hot air balloon. Comes in several varities.", + "usages": ["N64 Royal Raceway"], + "param_0": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_1": { + "name": "Recolor Start Index", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "1037": { + "name": "N64YoshiEgg", + "description": "A giant spinning yoshi egg.", + "usages": ["N64 Yoshi Valley"] + }, + "1039": { + "name": "Bird", + "description": "A bird sitting on the road. It flies away when a driver comes close.", + "param_0": {"name": "Min Return Lap Point"}, + "param_1": {"name": "Max Return Lap Point"} + }, + "1040": { + "name": "TowerKuribo", + "description": "A stack of Goombas", + "aliases": ["Goomba"], + "usages": ["U Mario Circuit"], + "param_0": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_1": {} + }, + "1041": { + "name": "Cow", + "description": "A cow that jumps up when hit.", + "aliases": ["Moo Moo"], + "usages": ["Wii Moo Moo Meadows"], + "param_0": {"name": "Unknown {3/4 seen} },"} + }, + "1042": { + "name": "FishBone", + "description": "", + "usages": ["U Twisted Mansion"], + "param_2": {}, + "param_3": {}, + "param_4": {} + }, + "1043": { + "name": "Teresa", + "description": "", + "aliases": ["Boo"], + "usages": ["U Twisted Mansion"], + "param_0": {}, + "param_1": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_2": {} + }, + "1044": { + "name": "CmnToad", + "description": "A spectator Toad. Comes in various colors.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1055": { + "name": "RelayCar", + "description": "", + "param_0": {} + }, + "1056": { + "name": "Seagull", + "description": "", + }, + "1057": { + "name": "ExTram", + "description": "", + "aliases": ["Car"], + "usages": ["U Toad Harbour"] + }, + "1058": { + "name": "GingerBread", + "description": "Spectator gingerbread men.", + "usages": ["U Sweet Sweet Canyon"] + }, + "1059": { + "name": "CakePylonB", + "description": "A traffic cone in the form of an upside down ice cream cone.", + "aliases": ["Cone"], + "usages": ["U Sweet Sweet Canyon"] + }, + "1060": { + "name": "CakePylonA", + "description": "A traffic cone in the form of an upside down ice cream cone.", + "aliases": ["Cone"], + "usages": ["U Sweet Sweet Canyon"] + }, + "1063": { + "name": "ShyguyWatchman", + "description": "", + "aliases": ["Heyho"], + "usages": ["U Shy Guy Falls"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1064": { + "name": "ShyguyPickax", + "description": "", + "aliases": ["Heyho"], + "usages": ["U Shy Guy Falls"], + "param_0": {} + }, + "1066": { + "name": "PackunFlower2", + "description": "", + "aliases": ["Piranha Plant"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1067": { + "name": "HhStatue", + "description": "An iron statue slamming down a hammer, squashing drivers.", + "usages": ["U Twisted Mansion"], + "param_0": { + "name": "Initial Delay", + "type": "time" + } + }, + "1068": { + "name": "CakeBalloon", + "description": "", + "usages": ["U Sweet Sweet Canyon"] + }, + "1070": { + "name": "Karon", + "description": "A Dry Bones that, when hit, scatters into various bones and bounces the driver back.", + "aliases": ["Dry Bones"], + "usages": ["U Bone Dry Dunes"] + }, + "1071": { + "name": "PylonTechno", + "description": "A traffic cone with a moving pattern.", + "aliases": ["Cone"], + "usages": ["U Electrodrome"] + }, + "1072": { + "name": "DokanTechno", + "description": "A pipe with a moving pattern.", + "aliases": ["Pipe"], + "usages": ["U Electrodrome"] + }, + "1073": { + "name": "PackunCake", + "description": "A Piranha Plant", + "aliases": ["Piranha Plant"], + "usages": ["U Sweet Sweet Canyon"] + }, + "1074": { + "name": "APMoveCBox", + "description": "A breakable crate featuring various stickers.", + "aliases": ["crate", "barrel"], + "usages": ["U Sunshine Airport"], + "param_1": {} + }, + "1075": { + "name": "Moray", + "description": "A giant eel, on whose back drivers can perform tricks.", + "aliases": ["Eel"], + "usages": ["U Dolphin Shoals"] + }, + "1076": { + "name": "DokanCake", + "description": "A pipe.", + "aliases": ["Pipe"], + "usages": ["U Sweet Sweet Canyon"] + }, + "1077": { + "name": "MareM", + "description": "A Noki spectator.", + "aliases": ["Spectator", "Noki"], + "param_0": {} + }, + "1078": { + "name": "BarrelFlower", + "description": "A barrel with flowers.", + }, + "1079": { + "name": "Helicopter", + "description": "", + }, + "1081": { + "name": "SnowBoardHeyho", + "description": "", + "aliases": ["Shy Guy"], + "usages": ["U Mount Wario"], + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_4": {} + }, + "1083": { + "name": "CmnHeyho", + "description": "", + "aliases": ["Spectator", "Shy Guy"], + }, + "1084": { + "name": "FireSnake", + "description": "A Fire Snake that spawns from a pipe.", + "usages": ["Wii Grumble Volcano"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1085": { + "name": "CmnBirdNest", + "description": "", + }, + "1086": { + "name": "MonteM", + "description": "A spectator pianta.", + "aliases": ["Spectator", "Pianta"], + "param_0": {} + }, + "1087": { + "name": "CmnYoshi", + "description": "A spectator Yoshi. Comes in various colors.", + "aliases": ["Spectator"], + }, + "1088": { + "name": "OcManta", + "description": "A Manta Ray with goggles.", + "aliases": ["Manta Ray"], + "usages": ["U Dolphin Shoals"] + }, + "1090": { + "name": "OcLifton", + "description": "", + "aliases": ["Dolphin"], + "usages": ["U Dolphin Shoals"] + }, + "1091": { + "name": "SnorkelToad", + "description": "", + "aliases": ["Spectator"], + }, + "1092": { + "name": "OcLightJellyfish", + "description": "", + "usages": ["U Dolphin Shoals"] + }, + "1093": { + "name": "CmnHawk", + "description": "", + }, + "1094": { + "name": "FcClown", + "description": "A clow car with an electronic display.", + "aliases": ["Koopa Clown Car"], + "usages": ["U Mario Circuit"] + }, + "1095": { + "name": "PukupukuMecha", + "description": "A mechanical Cheep Cheep.", + "aliases": ["Cheep Cheep", "Robot"], + "usages": ["U Water Park"], + "param_2": {}, + "param_4": {} + }, + "1097": { + "name": "CmnPatapataUD", + "description": "Spectator paratroopa moving up and down.", + "aliases": ["Spectator", "Paratroopa"], + }, + "1098": { + "name": "CmnPatapataLR", + "description": "Spectator paratroopa moving left and right.", + "aliases": ["Spectator", "Paratroopa"], + }, + "1099": { + "name": "CmnGroupToad", + "description": "Three spectator toads.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1100": { + "name": "NoteChild", + "description": "A spectator note.", + "aliases": ["Spectator"], + "usages": ["3DS Music Park"], + "param_0": {} + }, + "1101": { + "name": "PackunHone", + "description": "A skeleton Piranha Plant.", + "aliases": ["Piranha Plant", "Dry Bones"], + "usages": ["U Bone Dry Dunes"], + "param_0": {}, + "param_1": {} + }, + "1103": { + "name": "KoopaClaw", + "description": "A giant magma Bowser that slams the road, allowing drivers to perform tricks.", + "aliases": ["Bowser"], + "usages": ["U Bowser's Castle"] + }, + "1104": { + "name": "PackunTechno", + "description": "", + "aliases": ["Piranha Plant", "Rhythm"], + "usages": ["U Electrodrome"], + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "1105": { + "name": "DokanHone", + "description": "", + "aliases": ["Pipe"], + }, + "1106": { + "name": "PitToadB", + "description": "A blue pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1107": { + "name": "PitToadY", + "description": "A yellow pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1108": { + "name": "PitToadG", + "description": "A green pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1109": { + "name": "PitToadP", + "description": "A pink pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1110": { + "name": "PitToadR", + "description": "A red pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1111": { + "name": "PitToadW", + "description": "A white pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1112": { + "name": "DKBanana", + "description": "A giant spinning banana statue.", + "usages": ["3DS DK Jungle"] + }, + "1114": { + "name": "JungleBird", + "description": "A parrot.", + "aliases": ["Parrot"], + "usages": ["3DS DK Jungle"] + }, + "1115": { + "name": "PitToadWro", + "description": "A purple pit crew toad.", + "aliases": ["Spectator"], + "param_0": {} + }, + "1117": { + "name": "ShyguyRope", + "description": "", + "aliases": ["Shy Guy"], + }, + "1118": { + "name": "CmnNokonoko", + "description": "A spectator Koopa Troopa.", + "aliases": ["Spectator", "Koopa Troopa"], + "param_0": {} + }, + "1119": { + "name": "CrWanwanB", + "description": "A bouncing Chain Chomp. When it hits the ground, allows drivers to trick.", + "aliases": ["Chain Chomp"], + "usages": ["N64 Rainbow Road"], + "param_0": { + "name": "Road Index {0/1} }", + "type": "int" + }, + "param_1": { + "name": "Initial Delay", + "type": "time" + }, + "param_2": { + "name": "Slam Delay", + "type": "time" + } + }, + "1120": { + "name": "CmnBros", + "description": "Randomly chooses a hammer, fire, or ice bro spectator to spawn.", + "aliases": ["Spectator", "Hammer bro"], + }, + "1123": { + "name": "TcHeyho", + "description": "A spectator Shy Guy.", + "aliases": ["Shy Guy", "Spectator"], + "param_0": {} + }, + "1124": { + "name": "SmToad", + "description": "A spectator Toad.", + "aliases": ["Spectator"], + }, + "1125": { + "name": "SmHeyho", + "description": "A spectator Shy Guy", + "aliases": ["Spectator", "Shy Guy"], + }, + "1126": { + "name": "SmYoshi", + "description": "A spectator Yoshi.", + "aliases": ["Spectator"], + }, + "1127": { + "name": "JumpPukupuku", + "description": "A Cheep Cheep that jumps out of the water.", + "aliases": ["Cheep Cheep"], + "usages": ["SNES Donut Plains 3"], + "param_0": {}, + "param_2": {}, + "param_4": {} + }, + "1130": { + "name": "CmnCow", + "description": "Spectator Moo Moo.", + "aliases": ["Spectator", "Moo Moo"], + "usages": ["Wii Moo Moo Meadows"] + }, + "1131": { + "name": "SpaceToad", + "description": "A spectator Toad with a space suit.", + "aliases": ["Spectator"], + "usages": ["U Rainbow Road"], + "param_1": {} + }, + "1132": { + "name": "PackunTechno_NoAt", + "description": "", + "aliases": ["Piranha Plant"], + "usages": ["U Electrodrome"], + "param_3": {} + }, + "1134": { + "name": "CmnKaron", + "description": "Spectator Dry Bones", + "aliases": ["Spectator", "Dry Bones"], + }, + "1135": { + "name": "JumpPukuClip", + "description": "A Cheep Cheep that jumps out of the water.", + "aliases": ["Cheep Cheep"], + "usages": ["DS Cheep Cheep Beach"], + "param_1": {}, + "param_2": { + "name": "Spawn Count", + "type": "int", + "default": 1, + "minValue": 1 + }, + "param_4": {"name": "Spawn Radius"} + }, + "2004": { + "name": "ChimneySmoke", + "description": "", + }, + "2006": { + "name": "Fountain", + "description": "", + }, + "2007": { + "name": "VolFlame", + "description": "A lava column that rises out of the lava.", + "aliases": ["Lava", "Magma"], + "usages": ["U Bowser's Castle", "Wii Grumble Volcano"], + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": { + "name": "Life Time", + "type": "time" + }, + "param_2": {} + }, + "2009": { + "name": "VolBomb", + "description": "A volcano rock that falls from the sky.", + "aliases": ["Lava", "Magma", "Volcano"], + "usages": ["Wii Grumble Volcano"], + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": { + "name": "Life Time", + "type": "time" + } + }, + "2010": { + "name": "Flyingbug", + "description": "", + }, + "2011": { + "name": "ButterflyB", + "description": "", + }, + "2012": { + "name": "ButterflyA", + "description": "", + }, + "2013": { + "name": "ButterflySp", + "description": "", + }, + "2014": { + "name": "WPFountain", + "description": "", + }, + "2015": { + "name": "WsFirebar", + "description": "A fire bar with three ends.", + "usages": ["DS Wario Stadium"], + "param_0": { + "name": "Counter Clockwise", + "type": "bool" + }, + "param_1": {"name": "Initial Rotation"} + }, + "2016": { + "name": "WsFirering", + "description": "A ring of fireballs.", + "usages": ["DS Wario Stadium"], + "param_0": { + "name": "Counter Clockwise {0/1}", + "type": "bool" + }, + "param_1": {"name": "Initial Rotation"} + }, + "2017": { + "name": "CmnWaterCurrent", + "description": "", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {}, + "param_4": {} + }, + "2018": { + "name": "Balloon", + "description": "", + }, + "2021": { + "name": "CmnCloud", + "description": "", + }, + "2022": { + "name": "Candle", + "description": "", + }, + "2023": { + "name": "ClThunder", + "description": "", + "param_0": {}, + "param_1": {}, + "param_7": { + "name": "Model Index {Boost plate} }", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "2024": { + "name": "DiTorchInside", + "description": "", + "usages": ["U Thwomp Ruins"] + }, + "2025": { + "name": "BDTorch", + "description": "", + "usages": ["U Bone Dry Dunes"] + }, + "2026": { + "name": "VolTorch", + "description": "", + }, + "2027": { + "name": "DiTorchOutside", + "description": "", + }, + "2028": { + "name": "SandFallSmoke", + "description": "", + "param_3": {} + }, + "2030": { + "name": "TCSearchLight", + "description": "", + }, + "2031": { + "name": "SeaLight", + "description": "", + }, + "2032": { + "name": "PsSplashA", + "description": "", + }, + "2033": { + "name": "CakeSplash", + "description": "", + }, + "2034": { + "name": "CakeFountain", + "description": "", + }, + "2035": { + "name": "SunLight", + "description": "", + }, + "2036": { + "name": "PowderSugar", + "description": "", + }, + "2037": { + "name": "CakeBubble", + "description": "", + }, + "2039": { + "name": "FcSearchLight", + "description": "", + }, + "2040": { + "name": "OcManyFish", + "description": "", + }, + "2041": { + "name": "CakeSplashB", + "description": "", + }, + "2042": { + "name": "CakeFountainB", + "description": "", + }, + "2043": { + "name": "CakeBottleBubble", + "description": "", + }, + "2045": { + "name": "TCFountain", + "description": "", + }, + "2046": { + "name": "DiFluff", + "description": "", + }, + "2047": { + "name": "DiWaterfall", + "description": "", + }, + "2048": { + "name": "DdWaterCurent", + "description": "", + }, + "2050": { + "name": "BDSunLight", + "description": "", + }, + "2051": { + "name": "VolTorchL", + "description": "", + }, + "2052": { + "name": "TCSplashSet1", + "description": "", + }, + "2053": { + "name": "TCSplashSet2", + "description": "", + }, + "2054": { + "name": "TCFireworks", + "description": "", + }, + "2055": { + "name": "TTCSunLight", + "description": "", + }, + "2056": { + "name": "DkTorch", + "description": "", + }, + "2057": { + "name": "LaserBeam", + "description": "", + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": {}, + "param_2": {} + }, + "2059": { + "name": "BCTorch1", + "description": "", + }, + "2060": { + "name": "BCExplosion", + "description": "", + "param_0": {}, + "param_1": {} + }, + "2061": { + "name": "BCSearchLight", + "description": "", + }, + "2062": { + "name": "FireworksFc", + "description": "", + }, + "2063": { + "name": "FireworksSl", + "description": "", + }, + "2064": { + "name": "FireworksN64R", + "description": "", + "param_0": {} + }, + "2065": { + "name": "TTCSunLightS", + "description": "", + }, + "2066": { + "name": "McSplash", + "description": "", + }, + "2067": { + "name": "OcWaterCurrent", + "description": "", + "param_0": {}, + "param_1": {} + }, + "2068": { + "name": "VolSmoke", + "description": "", + }, + "2069": { + "name": "FireworksN64Rs", + "description": "", + }, + "2070": { + "name": "DdQuickSandSplash", + "description": "", + }, + "2071": { + "name": "EntranceSunLight", + "description": "", + }, + "2072": { + "name": "LibrarySunLight", + "description": "", + }, + "2073": { + "name": "CorridorSunLight", + "description": "", + }, + "2074": { + "name": "AnnexeSunLight", + "description": "", + }, + "2077": { + "name": "DpManyFish", + "description": "", + }, + "2078": { + "name": "SlAurora", + "description": "", + }, + "2079": { + "name": "FcSearchLightClip", + "description": "", + }, + "2081": { + "name": "FcSearchLightOutside", + "description": "", + }, + "2082": { + "name": "BCTorch2", + "description": "", + }, + "2083": { + "name": "DkSunLight", + "description": "", + }, + "3002": { + "name": "Rock1", + "description": "", + "param_0": { + "name": "Initial Delay", + "type": "time" + }, + "param_1": {}, + "param_2": {"name": "Launch Velocity"}, + "param_3": {"name": "Launch Angle (Degrees)"} + }, + "3004": { + "name": "CarA", + "description": "", + "param_0": {} + }, + "3006": { + "name": "TruckA", + "description": "", + "aliases": ["Car"], + "param_0": {}, + "param_1": {} + }, + "3007": { + "name": "DkAirship", + "description": "", + }, + "3008": { + "name": "Bus", + "description": "", + "aliases": ["Car"], + "param_0": {}, + "param_1": {} + }, + "3009": { + "name": "Trolley", + "description": "", + "aliases": ["Car"], + }, + "3011": { + "name": "CarrierCar", + "description": "", + "param_0": {} + }, + "3012": { + "name": "BDSandShip", + "description": "", + "param_0": {} + }, + "3013": { + "name": "Submarine", + "description": "", + "aliases": ["Ship"], + }, + "3014": { + "name": "TrolleyNoMove", + "description": "", + "aliases": ["Car"], + }, + "3015": { + "name": "APJetFly", + "description": "", + "aliases": ["Airplane"], + "usages": ["U Sunshine Airport"], + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "3016": { + "name": "DiWheel", + "description": "", + "usages": ["U Thwomp Ruins"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "3018": { + "name": "Chairlift", + "description": "", + "param_0": {}, + "param_2": {} + }, + "3020": { + "name": "CarSurf", + "description": "", + "param_0": {} + }, + "3021": { + "name": "N64RTrain", + "description": "A flying train that throws coins", + "aliases": ["Coin"], + "usages": ["N64 Rainbow Road"] + }, + "3022": { + "name": "BDSandShipNoMove", + "description": "", + "aliases": ["Coin"], + "usages": ["A ship that throws coins."] + }, + "3023": { + "name": "GessoShuttle", + "description": "", + "aliases": ["Blooper", "Spaceship"], + "usages": ["U Rainbow Road"] + }, + "4004": { + "name": "ClockGearY", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4005": { + "name": "ClockHandL", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4006": { + "name": "ClockGearZ", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {} + }, + "4007": { + "name": "Furiko", + "description": "", + "aliases": ["Clock"], + "usages": ["DS Tick Tock Clock"], + "param_0": {} + }, + "4036": { + "name": "CityBoat", + "description": "", + }, + "4038": { + "name": "HorrorRoad", + "description": "", + "usages": ["U Twisted Mansion"] + }, + "4039": { + "name": "ClockHandS", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4040": { + "name": "ClockGearPole", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {} + }, + "4042": { + "name": "KaraPillar", + "description": "A desert pillar that can fall after some period of time. It briefly shakes before it falls. Drivers hit by the pillar while it is falling are spun out.\nSome sand particles are spawned when the pillar finishes falling (GCN Dry Dry Desert's ptcl required).\nOnly one side is trickable/drivable, the other sides act as walls.\nThis object should not be scaled, as the pillar and the base are scaled from their own separate origins!", + "aliases": ["Falling"], + "usages": ["GCN Dry Dry Desert"], + "param_0": { + "name": "Fall Delay", + "type": "time" + } + }, + "4043": { + "name": "MpBoard", + "description": "", + "aliases": ["Glider"], + "usages": ["3DS Music Park"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4044": { + "name": "ExDash", + "description": "", + }, + "4048": { + "name": "BDSandGeyser", + "description": "", + "usages": ["U Bone Dry Dunes"], + "param_0": { + "name": "Initial Delay", + "type": "time", + "default": 0 + }, + "param_1": { + "name": "Up Duration", + "type": "time", + "default": 700 + }, + "param_2": { + "name": "Delay between rise", + "type": "time", + "default": 2300 + }, + "param_3": { + "name": "Geyser Height", + "default": 400 + } + }, + "4050": { + "name": "VolMovRoadPlus", + "description": "", + "param_0": {}, + "param_1": {}, + "param_2": {"name": "Shake speed"}, + "param_3": {}, + "param_4": {}, + "param_5": {} + }, + "4051": { + "name": "VolMovRoad", + "description": "", + "param_2": {"name": "Shake speed"}, + "param_3": {}, + "param_4": {}, + "param_5": {} + }, + "4052": { + "name": "VolcanoPiece", + "description": "A sinking piece of road.", + "usages": ["Wii Grumble Volcano"], + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {}, + "param_7": { + "name": "Model Index", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "4055": { + "name": "DiDomino", + "description": "A brick structure that breaks when a wheel rolls into it.", + "aliases": ["Wheel"], + "usages": ["U Thwomp Ruins"] + }, + "4060": { + "name": "DkScreamPillar", + "description": "A screaming pillar whose breath affects gliders.", + "aliases": ["Glider"], + "usages": ["3DS DK Jungle"], + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {}, + "param_4": {} + }, + "4061": { + "name": "SmDash", + "description": "", + }, + "4065": { + "name": "ClockHandL2", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4066": { + "name": "ClockHandS2", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4068": { + "name": "KoopaRoadR", + "description": "A road that moves when the giant Bowser statue slams into it.", + "usages": ["U Bowser's Castle"] + }, + "4069": { + "name": "KoopaRoadL", + "description": "A road that moves when the giant Bowser statue slams into it.", + "usages": ["U Bowser's Castle"] + }, + "4070": { + "name": "RRroadout", + "description": "", + }, + "4071": { + "name": "RRroadin", + "description": "", + }, + "4072": { + "name": "TtcBoard", + "description": "", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4074": { + "name": "SpikeBall", + "description": "", + "usages": ["U Bowser's Castle"] + }, + "4075": { + "name": "ClockGearArrow", + "description": "", + "usages": ["DS Tick Tock Clock"], + "param_0": {} + }, + "4077": { + "name": "N64RRoad1", + "description": "", + }, + "4078": { + "name": "N64RRoad2", + "description": "", + "param_0": {} + }, + "4081": { + "name": "DonutsRoadA", + "description": "", + "aliases": ["Bridge"], + "usages": ["SNES Donut Plains 3"] + }, + "4082": { + "name": "DonutsRoadB", + "description": "", + "aliases": ["Bridge"], + "usages": ["SNES Donut Plains 3"] + }, + "4084": { + "name": "BCCannon", + "description": "", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4085": { + "name": "RRdash", + "description": "", + "param_0": {} + }, + "5002": { + "name": "BumpingFlower", + "description": "A flower that can be tricked off.", + "usages": ["3DS DK Jungle"] + }, + "5005": { + "name": "WindMill", + "description": "", + }, + "5014": { + "name": "TreeAgb", + "description": "", + }, + "5015": { + "name": "TreeSnow", + "description": "", + }, + "5016": { + "name": "TreeSph", + "description": "", + "aliases": ["Based"], + }, + "5017": { + "name": "Tree64A", + "description": "", + }, + "5019": { + "name": "TreeTri", + "description": "", + }, + "5020": { + "name": "Tree64Deep", + "description": "", + }, + "5021": { + "name": "WaterSurface", + "description": "", + }, + "5022": { + "name": "WaterBox", + "description": "", + }, + "5023": { + "name": "FlagStartDossun", + "description": "", + }, + "5024": { + "name": "FlagStartMario", + "description": "", + }, + "5025": { + "name": "FlagStartMooMoo", + "description": "", + }, + "5026": { + "name": "FlagStartAGB", + "description": "", + }, + "5027": { + "name": "YachtG", + "description": "", + }, + "5028": { + "name": "YachtP", + "description": "", + }, + "5029": { + "name": "YachtR", + "description": "", + }, + "5030": { + "name": "YachtY", + "description": "", + }, + "5031": { + "name": "HhDoor", + "description": "", + }, + "5033": { + "name": "HhChandelier", + "description": "", + }, + "5034": { + "name": "HhMovingWall", + "description": "", + }, + "5041": { + "name": "RotaryBoard", + "description": "", + }, + "5042": { + "name": "FlagRope1", + "description": "", + }, + "5044": { + "name": "FlagTriangle1", + "description": "", + }, + "5047": { + "name": "TreeCakeB", + "description": "", + }, + "5049": { + "name": "WindMillCake", + "description": "", + }, + "5051": { + "name": "MpTrumpet", + "description": "", + "usages": ["3DS Music Park"] + }, + "5052": { + "name": "MpTambourin", + "description": "", + "aliases": ["Instrument"], + "usages": ["3DS Music Park"] + }, + "5053": { + "name": "MpSax", + "description": "", + "aliases": ["Instrument"], + "usages": ["3DS Music Park"] + }, + "5054": { + "name": "MpSpeaker", + "description": "", + "aliases": ["Instrument"], + "usages": ["3DS Music Park"] + }, + "5056": { + "name": "MpCymbal", + "description": "", + "aliases": ["Instrument"], + "usages": ["3DS Music Park"] + }, + "5057": { + "name": "MpPiston", + "description": "", + "aliases": ["Instrument"], + "usages": ["3DS Music Park"], + "param_0": {} + }, + "5058": { + "name": "SearchLight", + "description": "", + }, + "5059": { + "name": "TollBar", + "description": "", + }, + "5060": { + "name": "TreeCakeD", + "description": "", + }, + "5062": { + "name": "HhFan", + "description": "", + }, + "5063": { + "name": "FlagTriangle2", + "description": "", + }, + "5064": { + "name": "ExExcavator", + "description": "", + }, + "5070": { + "name": "ClGun", + "description": "", + }, + "5071": { + "name": "ClBattleShip", + "description": "", + }, + "5072": { + "name": "Tree64Yoshi", + "description": "", + }, + "5075": { + "name": "BDSearchLight", + "description": "", + }, + "5076": { + "name": "BDFlagSquare1", + "description": "", + }, + "5077": { + "name": "BDWindmill", + "description": "", + }, + "5078": { + "name": "FlagTapestryDossun", + "description": "", + }, + "5079": { + "name": "FlagTapestryPeach", + "description": "", + }, + "5080": { + "name": "FlagTapestryMusic", + "description": "", + }, + "5081": { + "name": "FlagTriangle3", + "description": "", + }, + "5082": { + "name": "TcMirrorBall", + "description": "", + "param_0": {} + }, + "5083": { + "name": "Kanransya", + "description": "Ferris Wheel", + "aliases": ["Ferris Wheel"], + "usages": ["U Water Park"] + }, + "5084": { + "name": "CoffeeCup", + "description": "", + "usages": ["U Water Park"], + "param_0": { + "name": "Cups in Circle", + "type": "int" + } + }, + "5085": { + "name": "TreeSph_AddCol", + "description": "", + }, + "5088": { + "name": "TreeTriB", + "description": "", + }, + "5089": { + "name": "TreeBush", + "description": "", + }, + "5090": { + "name": "TreeCityA", + "description": "", + }, + "5091": { + "name": "APGuide", + "description": "", + }, + "5093": { + "name": "TreeCakeBB", + "description": "", + }, + "5094": { + "name": "TreeCakeBY", + "description": "", + }, + "5095": { + "name": "APCBelt", + "description": "", + }, + "5096": { + "name": "APSBelt", + "description": "", + }, + "5097": { + "name": "APTollBar", + "description": "", + }, + "5098": { + "name": "FlagTriangle4", + "description": "", + }, + "5103": { + "name": "WPTollBar", + "description": "", + }, + "5104": { + "name": "McGate", + "description": "", + }, + "5106": { + "name": "DrumInside", + "description": "", + }, + "5107": { + "name": "FlagStadiumA", + "description": "", + }, + "5108": { + "name": "FlagStadiumB", + "description": "", + }, + "5109": { + "name": "FlagStadiumC", + "description": "", + }, + "5110": { + "name": "ClTrampoline", + "description": "", + }, + "5111": { + "name": "SmHelicopter", + "description": "", + }, + "5112": { + "name": "FcGallery", + "description": "", + "param_7": {} + }, + "5114": { + "name": "AccelRing", + "description": "A ring that gives a speed boost when driven through.", + "aliases": ["Gate"], + "param_0": {} + }, + "5115": { + "name": "RacingPole", + "description": "", + }, + "5116": { + "name": "TechnoStepGreen", + "description": "", + "param_7": {} + }, + "5117": { + "name": "TechnoStepRed", + "description": "", + "param_7": {} + }, + "5118": { + "name": "BarrelCannon", + "description": "", + }, + "5119": { + "name": "OcRing", + "description": "A ring that gives a speed boost when driven through.", + "aliases": ["Gate"], + "usages": ["U Dolphin Shoals"] + }, + "5120": { + "name": "APPropeller", + "description": "", + }, + "5121": { + "name": "FlagSquareAP", + "description": "", + }, + "5122": { + "name": "FlagTriangle5", + "description": "", + }, + "5124": { + "name": "ClBattleShipS", + "description": "", + }, + "5125": { + "name": "FlagTapestryFc", + "description": "", + }, + "5130": { + "name": "CakeCannon", + "description": "", + }, + "5131": { + "name": "FlagTapestryWp", + "description": "", + }, + "5132": { + "name": "GuardrailRSpot", + "description": "", + }, + "5133": { + "name": "ExExcavatorBig", + "description": "", + }, + "5134": { + "name": "ClPropeller", + "description": "", + }, + "5136": { + "name": "BDRope", + "description": "", + }, + "5137": { + "name": "BDCloth", + "description": "", + }, + "5138": { + "name": "GearDecoA", + "description": "", + }, + "5139": { + "name": "GearDecoB", + "description": "", + }, + "5140": { + "name": "GearDecoC", + "description": "", + }, + "5141": { + "name": "TcStarSpeaker", + "description": "", + "param_0": {} + }, + "5142": { + "name": "TcSpeaker", + "description": "", + }, + "5145": { + "name": "GearDecoD", + "description": "", + }, + "5146": { + "name": "GearDecoE", + "description": "", + }, + "5147": { + "name": "TcDisplay", + "description": "", + }, + "5155": { + "name": "GearDecoF", + "description": "", + }, + "5156": { + "name": "GearDecoG", + "description": "", + }, + "5157": { + "name": "ClockSpring", + "description": "", + }, + "5161": { + "name": "TcDisplayR", + "description": "", + }, + "5162": { + "name": "TcSoundRoadG", + "description": "", + "param_0": {} + }, + "5163": { + "name": "TcSoundRoadR", + "description": "", + "param_0": {} + }, + "5165": { + "name": "TreeSnow_AddCol", + "description": "", + }, + "5166": { + "name": "TreeCityACol", + "description": "", + }, + "5167": { + "name": "FlagStadiumWarioC", + "description": "", + }, + "5168": { + "name": "FlagStadiumWarioA", + "description": "", + }, + "5169": { + "name": "FlagStadiumWarioB", + "description": "", + }, + "5170": { + "name": "FlagTapestryWs", + "description": "", + }, + "5171": { + "name": "SlRopeL", + "description": "", + }, + "5172": { + "name": "SlRopeM", + "description": "", + }, + "5173": { + "name": "FlagTapestrySl", + "description": "", + }, + "5174": { + "name": "GravityBox", + "description": "", + }, + "5175": { + "name": "FlagStartSnow", + "description": "", + }, + "5176": { + "name": "N64RAccelRing", + "description": "", + "param_0": {} + }, + "5177": { + "name": "N64RCheck", + "description": "", + }, + "5178": { + "name": "N64RStart", + "description": "", + }, + "5179": { + "name": "SwanBoatR", + "description": "", + }, + "5180": { + "name": "Tire", + "description": "", + "param_7": { + "name": "Tire Stack Count", + "type": "int", + "default": 1, + "minValue": 1 + } + }, + "5181": { + "name": "SwanBoatB", + "description": "", + }, + "5182": { + "name": "WaterPlantA", + "description": "", + }, + "5183": { + "name": "WaterPlantB", + "description": "", + }, + "5184": { + "name": "FlagTapestryPs", + "description": "", + }, + "5185": { + "name": "WPBoatA", + "description": "", + }, + "5186": { + "name": "WPBoatB", + "description": "", + }, + "5187": { + "name": "WPBoatC", + "description": "", + }, + "5188": { + "name": "N64RAccelRingAir", + "description": "A flying ring that gives a speed boost when driven through.", + "aliases": ["Gate"], + "usages": ["N64 Rainbow Road"], + "param_0": {} + }, + "5189": { + "name": "N64RStageSet", + "description": "", + }, + "5190": { + "name": "UltraArm", + "description": "", + }, + "5192": { + "name": "ClockBell", + "description": "", + }, + "5193": { + "name": "Tree64Middle", + "description": "", + }, + "5194": { + "name": "Tree64Light", + "description": "", + }, + "5195": { + "name": "FlagPeachCircuit", + "description": "", + }, + "5196": { + "name": "MilkTank", + "description": "", + }, + "5198": { + "name": "StrawRoll", + "description": "", + }, + "5200": { + "name": "ClockArm", + "description": "", + }, + "5201": { + "name": "ClockCylinder", + "description": "", + }, + "5202": { + "name": "BCGate", + "description": "", + }, + "5203": { + "name": "BCElevator", + "description": "", + }, + "5204": { + "name": "BCEngine", + "description": "", + }, + "5205": { + "name": "BCFlag", + "description": "", + }, + "5207": { + "name": "BCChain", + "description": "", + }, + "5210": { + "name": "TreeDD", + "description": "", + }, + "5217": { + "name": "TreeDonuts", + "description": "", + }, + "5218": { + "name": "Tree64DeepCol", + "description": "", + }, + "5219": { + "name": "Tree64MiddleCol", + "description": "", + }, + "5220": { + "name": "Tree64LightCol", + "description": "", + }, + "5221": { + "name": "TreePukupuku", + "description": "", + }, + "5222": { + "name": "ConnectBoard", + "description": "", + }, + "5223": { + "name": "SlRedSpot", + "description": "", + }, + "5224": { + "name": "BDFlagSquare2", + "description": "", + }, + "5225": { + "name": "FlagStartPukupuku", + "description": "", + }, + "5227": { + "name": "SpinTurboBar_BD", + "description": "", + }, + "5228": { + "name": "FlagSquare1", + "description": "", + }, + "5229": { + "name": "WsGate", + "description": "", + }, + "5230": { + "name": "PeachBell", + "description": "", + }, + "5231": { + "name": "SpinTurboBar_TC", + "description": "", + }, + "5232": { + "name": "SpinTurboBar_AP", + "description": "", + }, + "5234": { + "name": "OceanWaterPlantA", + "description": "", + }, + "5235": { + "name": "OceanWaterPlantB", + "description": "", + }, + "5236": { + "name": "RRstationA", + "description": "", + }, + "5237": { + "name": "RRstationB", + "description": "", + }, + "5238": { + "name": "RRstationC", + "description": "", + }, + "5239": { + "name": "RRguide", + "description": "", + }, + "5240": { + "name": "RRring", + "description": "", + }, + "5241": { + "name": "RRseat", + "description": "", + }, + "5242": { + "name": "WindMillSmall", + "description": "", + }, + "5244": { + "name": "TireR", + "description": "", + "param_7": { + "name": "Tire Stack Count", + "type": "int", + "default": 1, + "minValue": 1 + } + }, + "5245": { + "name": "TireW", + "description": "", + "param_7": { + "name": "Tire Stack Count", + "type": "int", + "default": 1, + "minValue": 1 + } + }, + "5246": { + "name": "PsFan", + "description": "", + }, + "5247": { + "name": "TcMoveLight", + "description": "", + }, + "5248": { + "name": "Weathercock", + "description": "", + }, + "5249": { + "name": "RRstartring", + "description": "", + }, + "5250": { + "name": "TcChandelier", + "description": "", + }, + "5251": { + "name": "FlagMusicSwing", + "description": "", + }, + "5252": { + "name": "SherbetPlantA", + "description": "", + }, + "5253": { + "name": "SherbetPlantB", + "description": "", + }, + "5254": { + "name": "FlagTriangle3Y", + "description": "", + }, + "5255": { + "name": "N64RStageSet2", + "description": "", + }, + "5256": { + "name": "N64RStar", + "description": "", + }, + "5257": { + "name": "TcChandelierS", + "description": "", + }, + "5258": { + "name": "TcChandelierM", + "description": "", + }, + "5259": { + "name": "WindMillB", + "description": "", + }, + "5261": { + "name": "SpinTurboBar_RR", + "description": "", + }, + "5262": { + "name": "CmnDashBoard", + "description": "", + }, + "5263": { + "name": "McJump", + "description": "", + }, + "5265": { + "name": "MmJump", + "description": "", + }, + "5266": { + "name": "KhJump", + "description": "", + }, + "5267": { + "name": "SmFan", + "description": "", + }, + "5268": { + "name": "BCParts", + "description": "", + }, + "5269": { + "name": "ClGuide", + "description": "", + }, + "5270": { + "name": "BCPiston", + "description": "", + }, + "5271": { + "name": "BCBattleShipS", + "description": "", + }, + "5272": { + "name": "SearchLightNoClip", + "description": "", + }, + "5273": { + "name": "RRbox", + "description": "", + }, + "5274": { + "name": "McKart", + "description": "", + }, + "5275": { + "name": "TreeSphB", + "description": "", + }, + "5276": { + "name": "CiJump", + "description": "", + }, + "5277": { + "name": "TreeSphB_AddCol", + "description": "", + }, + "5278": { + "name": "Holography", + "description": "", + }, + "5279": { + "name": "ChairliftNoMove", + "description": "", + "param_0": {}, + "param_2": {} + }, + "6002": { + "name": "TestStart", + "description": "", + "param_7": { + "name": "Spawn Index", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "6003": { + "name": "Start", + "description": "", + "param_7": { + "name": "Spawn Index", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "6004": { + "name": "Sun", + "description": "", + }, + "6005": { + "name": "Moon", + "description": "", + }, + "6006": { + "name": "Sunset", + "description": "", + }, + "6008": { + "name": "SunInf", + "description": "", + }, + "6009": { + "name": "SunInfY", + "description": "", + }, + "6010": { + "name": "MoonInf", + "description": "", + }, + "6011": { + "name": "MoonInfY", + "description": "", + }, + "6012": { + "name": "SunsetInf", + "description": "", + }, + "6013": { + "name": "SunsetInfY", + "description": "", + }, + "6014": { + "name": "Moon2Inf", + "description": "", + }, + "6015": { + "name": "Moon2InfY", + "description": "", + }, + "7005": { + "name": "VR64Highway", + "description": "", + }, + "7006": { + "name": "VRfair", + "description": "", + }, + "7008": { + "name": "VRagbMario", + "description": "", + }, + "7009": { + "name": "VR64Peach", + "description": "", + }, + "7010": { + "name": "VRHorror", + "description": "", + }, + "7011": { + "name": "VRCake", + "description": "", + }, + "7012": { + "name": "VRcloudSea", + "description": "", + }, + "7013": { + "name": "VRWaterPark", + "description": "", + }, + "7014": { + "name": "VRFirst", + "description": "", + }, + "7015": { + "name": "VRAirport", + "description": "", + }, + "7016": { + "name": "VRTechno", + "description": "", + }, + "7017": { + "name": "VRSnowMt", + "description": "", + }, + "7018": { + "name": "VRCloud", + "description": "", + }, + "7019": { + "name": "VRDesert", + "description": "", + }, + "7020": { + "name": "VRExpert", + "description": "", + }, + "7021": { + "name": "VRCity", + "description": "", + }, + "7022": { + "name": "VRDossun", + "description": "", + }, + "7023": { + "name": "VRMario", + "description": "", + }, + "7024": { + "name": "VR64Yoshi", + "description": "", + }, + "7025": { + "name": "VRMenu", + "description": "", + }, + "7026": { + "name": "VRStorm", + "description": "", + }, + "7027": { + "name": "VRGcDesert", + "description": "", + }, + "7028": { + "name": "VRWiiMoo", + "description": "", + }, + "7029": { + "name": "VRCosmos", + "description": "", + }, + "7030": { + "name": "VRCustomizer", + "description": "", + }, + "7031": { + "name": "VRWarioStadium", + "description": "", + }, + "7032": { + "name": "VRG64Rainbow", + "description": "", + }, + "7033": { + "name": "VRRainbowRoad", + "description": "", + }, + "7034": { + "name": "VRClock", + "description": "", + }, + "7035": { + "name": "VROcean", + "description": "", + }, + "7036": { + "name": "VRSherbet", + "description": "", + }, + "7037": { + "name": "VRDonuts", + "description": "", + }, + "7038": { + "name": "VRPackunS", + "description": "", + }, + "7039": { + "name": "VRPukuB", + "description": "", + }, + "7040": { + "name": "VRBowser", + "description": "", + }, + "8001": { + "name": "ColCylinder", + "description": "", + }, + "8008": { + "name": "StartEx", + "description": "", + "param_0": { + "name": "Spawn Index", + "type": "int", + "default": 0, + "minValue": 0 + } + }, + "8009": { + "name": "ColCylinderStone", + "description": "", + }, + "8010": { + "name": "ColCylinderWood", + "description": "", + }, + "8011": { + "name": "ColCylinderMetal", + "description": "", + }, + "8014": { + "name": "CmnWaterCurrent_NoMdl", + "description": "", + "param_0": {}, + "param_1": {} + }, + "8015": { + "name": "CmnWaterCurrent_NoEff", + "description": "", + "param_0": {}, + "param_1": {} + }, + "8016": { + "name": "ColSpinDash", + "description": "", + }, + "8017": { + "name": "ColCylinderGum", + "description": "", + }, + "8021": { + "name": "RRsat", + "description": "", + }, + "8022": { + "name": "N64RCoin", + "description": "", + "param_0": {}, + "param_1": {} + }, + "8024": { + "name": "ColLeafBox", + "description": "", + }, + "8025": { + "name": "NoteArea", + "description": "", + "param_0": {} + }, + "8026": { + "name": "ShortCutBox", + "description": "", + "param_0": {}, + "param_1": {} + }, + "8029": { + "name": "Adjuster200cc", + "description": "", + "param_0": {}, + "param_1": {} + }, + "9006": { + "name": "KaraPillarBase", + "description": "", + }, + "9007": { + "name": "ItemBoxFont", + "description": "", + } +} diff --git a/Plugins/TurboLibrary/Resources/MapObj_U_DLC.json b/Plugins/TurboLibrary/Resources/MapObj_U_DLC.json new file mode 100644 index 0000000..29fad8c --- /dev/null +++ b/Plugins/TurboLibrary/Resources/MapObj_U_DLC.json @@ -0,0 +1,1184 @@ +{ + "1136": { + "name": "DL_StarDossun", + "description": "", + "aliases": ["Thwomp"], + "usages": ["SNES Rainbow Road"], + "versionU": "Zelda", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "1137": { + "name": "DL_CmnAnimalA", + "description": "", + "aliases": ["Spectator"], + "usages": ["U Animal Crossing"], + "versionU": "Animal", + "param_0": {} + }, + "1138": { + "name": "DL_CmnAnimalB", + "description": "", + "aliases": ["Spectator"], + "usages": ["U Animal Crossing"], + "versionU": "Animal", + "param_0": {} + }, + "1139": { + "name": "DL_CmnAnimalC", + "description": "", + "aliases": ["Spectator"], + "usages": ["U Animal Crossing"], + "versionU": "Animal", + "param_0": {} + }, + "1140": { + "name": "DL_CmnAnimalD", + "description": "", + "aliases": ["Spectator"], + "usages": ["U Animal Crossing"], + "versionU": "Animal", + "param_0": {} + }, + "1144": { + "name": "DL_CmnSoldier", + "description": "", + "aliases": ["Spectator"], + "usages": ["U Animal Crossing"], + "versionU": "Animal", + }, + "1145": { + "name": "DL_IceToad", + "description": "", + "usages": ["U Ice Ice Outpost"], + "versionU": "Animal", + }, + "1147": { + "name": "DL_Keith", + "description": "A bat from the Legend of Zelda series.", + "aliases": ["Bat", "Swoop"], + "usages": ["U Hyrule Circuit"], + "versionU": "Zelda", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {}, + "param_4": {} + }, + "1148": { + "name": "DL_Dekubaba", + "description": "A plant from the Legend of Zelda series. Acts like a regular Piranha Plant.", + "aliases": ["Piranha Plant"], + "usages": ["U Hyrule Circuit"], + "versionU": "Zelda", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1149": { + "name": "DL_MCAirship", + "description": "", + "versionU": "Zelda", + }, + "1150": { + "name": "DL_ShyguyPickaxR", + "description": "", + "versionU": "Zelda", + }, + "1151": { + "name": "DL_YcHelicopter", + "description": "", + "versionU": "Zelda", + "param_0": {}, + "param_1": {} + }, + "1152": { + "name": "DL_IceHelicopter", + "description": "", + "versionU": "Zelda", + }, + "1153": { + "name": "DL_WoPulleyShyguy", + "description": "", + "versionU": "Animal", + }, + "1154": { + "name": "DL_Reset", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {} + }, + "1156": { + "name": "DL_NkClown", + "description": "", + "versionU": "Animal", + }, + "1157": { + "name": "DL_NkClownW", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "1158": { + "name": "DL_AnimalTotakeke", + "description": "", + "versionU": "Animal", + }, + "1159": { + "name": "DL_AnimalRisa", + "description": "", + "versionU": "Animal", + }, + "1160": { + "name": "DL_AnimalFuta", + "description": "", + "versionU": "Animal", + }, + "1161": { + "name": "DL_AnimalAsami", + "description": "", + "versionU": "Animal", + }, + "1162": { + "name": "DL_AnimalKinuyo", + "description": "", + "versionU": "Animal", + }, + "1163": { + "name": "DL_AnimalTanukichi", + "description": "", + "versionU": "Animal", + }, + "1164": { + "name": "DL_MovingItemBoxDLC", + "description": "", + "versionU": "Animal", + "param_1": {} + }, + "1165": { + "name": "DL_MechaKoopa", + "description": "", + "usages": ["GBA Ribbon Road"], + "versionU": "Animal", + }, + "1166": { + "name": "DL_Wanwan", + "description": "A chain chomp on a chain.", + "aliases": ["Chain Chomp"], + "usages": ["GBA Cheese Land"], + "versionU": "Animal", + "param_0": {} + }, + "1167": { + "name": "DL_WdMovingCoin", + "description": "", + "versionU": "Animal", + "param_1": {} + }, + "1168": { + "name": "DL_AnimalKaizo", + "description": "", + "versionU": "Animal", + }, + "1169": { + "name": "DL_AnimalSnowman", + "description": "", + "versionU": "Animal", + }, + "1170": { + "name": "DL_WdBird", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {} + }, + "1171": { + "name": "DL_SurpriseBox", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "1172": { + "name": "DL_RibbonToad", + "description": "A toy toad.", + "aliases": ["Spectator"], + "usages": ["GBA Ribbon Road"], + "versionU": "Animal", + }, + "1173": { + "name": "DL_ItemBoxMetro", + "description": "", + "versionU": "Animal", + }, + "1174": { + "name": "DL_WdBarrel", + "description": "", + "versionU": "Animal", + }, + "1175": { + "name": "DL_WdBarrelR", + "description": "", + "versionU": "Animal", + }, + "2084": { + "name": "DL_Triforce", + "description": "", + "versionU": "Zelda", + }, + "2085": { + "name": "DL_HySmoke", + "description": "", + "versionU": "Zelda", + }, + "2086": { + "name": "DL_RainbowMountainA", + "description": "", + "versionU": "Zelda", + }, + "2087": { + "name": "DL_RainbowMountainB", + "description": "", + "versionU": "Zelda", + }, + "2088": { + "name": "DL_HyTorch", + "description": "", + "versionU": "Zelda", + }, + "2089": { + "name": "DL_McStartLogo", + "description": "", + "versionU": "Zelda", + }, + "2090": { + "name": "DL_YoshiWaterCurrent", + "description": "", + "versionU": "Zelda", + "param_0": {}, + "param_1": {} + }, + "2091": { + "name": "DL_DrTorch", + "description": "", + "versionU": "Zelda", + }, + "2092": { + "name": "DL_HySalute", + "description": "", + "versionU": "Zelda", + "param_0": {} + }, + "2093": { + "name": "DL_HyHouseSmoke", + "description": "", + "versionU": "Zelda", + }, + "2094": { + "name": "DL_WdChimneySmoke", + "description": "", + "versionU": "Animal", + }, + "2096": { + "name": "DL_NkThunder", + "description": "", + "versionU": "Animal", + }, + "2097": { + "name": "DL_BbStartLogoA", + "description": "", + "versionU": "Animal", + }, + "2098": { + "name": "DL_BbStartLogoB", + "description": "", + "versionU": "Animal", + }, + "2099": { + "name": "DL_AnimalFountain", + "description": "", + "versionU": "Animal", + }, + "2100": { + "name": "DL_AnimalSmoke", + "description": "", + "versionU": "Animal", + }, + "3024": { + "name": "DL_WarioTram", + "description": "A minekart that gives a spinboost when hit.", + "aliases": ["Minekart"], + "usages": ["U Wario's Goldmine"], + "versionU": "Zelda", + "param_0": {} + }, + "3025": { + "name": "DL_WarioTramB", + "description": "A minekart that gives a spinboost when hit.", + "aliases": ["Minekart"], + "usages": ["U Wario's Goldmine"], + "versionU": "Zelda", + }, + "3026": { + "name": "DL_Metro", + "description": "A subway train with a variable number of wagons.", + "aliases": [ "Train", "Subway" ], + "usages": [ "U Super Bell Subway" ], + "versionU": "Animal", + "param_0": { + "name": "Number of trains", + "description": "Number of wagons. The locomotive has a boost panel at the front.", + "type": "int", + "default": 6, + "minValue": 1 + }, + "param_1": { + "default": 5 + }, + "param_2": { + "default": 5 + }, + "param_3": { + "default": 6 + }, + "param_4": { + "name": "First respawn delay", + "description": "The duration after which the train respawns in its starting position. The train will respawn at path point 0 of its assigned rail path when the timer ends, even if it's still moving on its path. If 0, the train doesn't respawn. For path-loops this means it keeps going.", + "type": "time", + "default": 0, + "minValue": 0 + }, + "param_5": { + "name": "Consecutive respawn delay", + "description": "Identical to the previous parameter, but instead for every respawn after the first.", + "type": "time", + "default": 0, + "minValue": 0 + }, + "param_6": { + "name": "Train color", + "type": "enum", + "default": 1, + "enum": { + 0: "Red", + 1: "Blue" + } + }, + "param_7": { + "default": 1 + } + }, + "3027": { + "name": "DL_AnimalTrain", + "description": "", + "versionU": "Animal", + }, + "4086": { + "name": "DL_EbField", + "description": "", + "versionU": "Zelda", + "param_7": {"name": "ID"} + }, + "4087": { + "name": "DL_EbDirt", + "description": "", + "versionU": "Zelda", + "param_0": {"name": "Pattern //"} + }, + "4088": { + "name": "DL_LotusLeaf", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {} + }, + "4089": { + "name": "DL_AnimalBalloon", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "4090": { + "name": "DL_EbDirtBig", + "description": "", + "versionU": "Zelda", + }, + "4091": { + "name": "DL_HySwitch", + "description": "", + "versionU": "Zelda", + }, + "4092": { + "name": "DL_HyJump", + "description": "", + "versionU": "Zelda", + }, + "4095": { + "name": "DL_Iceberg", + "description": "", + "versionU": "Zelda", + "param_0": {}, + "param_1": {}, + "param_2": {} + }, + "4096": { + "name": "DL_RainbowArrow", + "description": "", + "versionU": "Zelda", + "param_0": {} + }, + "4097": { + "name": "DL_MasterSword", + "description": "", + "versionU": "Zelda", + }, + "4098": { + "name": "DL_MCGoalLine", + "description": "", + "versionU": "Zelda", + }, + "4099": { + "name": "DL_SfcRRoad1", + "description": "", + "versionU": "Zelda", + }, + "4100": { + "name": "DL_SfcRRoad2", + "description": "", + "versionU": "Zelda", + }, + "4101": { + "name": "DL_SfcRRoad3", + "description": "", + "versionU": "Zelda", + }, + "4102": { + "name": "DL_SfcRRoad4", + "description": "", + "versionU": "Zelda", + }, + "4103": { + "name": "DL_MCDashSet", + "description": "", + "versionU": "Zelda", + }, + "4104": { + "name": "DL_RibbonRoad1", + "description": "", + "versionU": "Animal", + }, + "4106": { + "name": "DL_TicketGate", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "4107": { + "name": "DL_MetroTollBar", + "description": "", + "versionU": "Animal", + }, + "4108": { + "name": "DL_MetroDash", + "description": "", + "versionU": "Animal", + }, + "4109": { + "name": "DL_BbDash", + "description": "", + "versionU": "Animal", + }, + "4110": { + "name": "DL_FallenLeaf", + "description": "", + "versionU": "Animal", + }, + "4111": { + "name": "DL_AnimalShell", + "description": "", + "versionU": "Animal", + }, + "4112": { + "name": "DL_RibbonBox", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "4113": { + "name": "DL_RibbonRoad2", + "description": "", + "versionU": "Animal", + }, + "4114": { + "name": "DL_AnimalApple", + "description": "", + "versionU": "Animal", + }, + "4115": { + "name": "DL_AnimalOrange", + "description": "", + "versionU": "Animal", + }, + "4116": { + "name": "DL_AnimalLemon", + "description": "", + "versionU": "Animal", + }, + "5280": { + "name": "DL_TreeTri", + "description": "", + "versionU": "Zelda", + }, + "5281": { + "name": "DL_TreeApple", + "description": "", + "usages": ["U Animal Crossing (Summer)"], + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5282": { + "name": "DL_SpinTurboBar_DR", + "description": "", + "versionU": "Zelda", + }, + "5283": { + "name": "DL_SpinTurboBar_MC", + "description": "", + "versionU": "Zelda", + }, + "5284": { + "name": "DL_WgExcavator", + "description": "", + "versionU": "Zelda", + }, + "5285": { + "name": "DL_WgGear", + "description": "", + "versionU": "Zelda", + }, + "5286": { + "name": "DL_WgGearBig", + "description": "", + "versionU": "Zelda", + }, + "5287": { + "name": "DL_FlagStartIce", + "description": "", + "versionU": "Zelda", + }, + "5289": { + "name": "DL_EbGridGate", + "description": "", + "versionU": "Zelda", + }, + "5290": { + "name": "DL_TreeOrange", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5291": { + "name": "DL_TreeLemon", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5292": { + "name": "DL_TreeSphYoshi", + "description": "", + "versionU": "Zelda", + }, + "5293": { + "name": "DL_FlagTriangle6", + "description": "", + "versionU": "Zelda", + }, + "5294": { + "name": "DL_WgFlagSquare", + "description": "", + "versionU": "Zelda", + }, + "5295": { + "name": "DL_TreeAnimal", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5296": { + "name": "DL_FlagStadiumEB", + "versionU": "Zelda", + "description": "", + }, + "5297": { + "name": "DL_TreePineA", + "description": "", + "versionU": "Zelda", + }, + "5298": { + "name": "DL_TreePineB", + "description": "", + "versionU": "Zelda", + }, + "5299": { + "name": "DL_FlagDragon", + "description": "", + "versionU": "Zelda", + }, + "5300": { + "name": "DL_MCRotaryBoardA", + "description": "", + "versionU": "Zelda", + }, + "5301": { + "name": "DL_MCBldgParts", + "description": "", + "versionU": "Zelda", + }, + "5302": { + "name": "DL_MCCars", + "description": "", + "versionU": "Zelda", + }, + "5303": { + "name": "DL_MCTriangleBoard", + "description": "", + "versionU": "Zelda", + }, + "5304": { + "name": "DL_MCPipeRing", + "description": "", + "versionU": "Zelda", + }, + "5305": { + "name": "DL_MCJets", + "description": "", + "versionU": "Zelda", + }, + "5306": { + "name": "DL_HyFlagSquare", + "description": "", + "versionU": "Zelda", + }, + "5307": { + "name": "DL_IceFlagSquare", + "description": "", + "versionU": "Zelda", + }, + "5308": { + "name": "DL_YcYacht", + "description": "", + "versionU": "Zelda", + }, + "5309": { + "name": "DL_SpinTurboBar_IP", + "description": "", + "versionU": "Zelda", + }, + "5310": { + "name": "DL_WeathercockYoshi", + "description": "", + "versionU": "Zelda", + }, + "5311": { + "name": "DL_FlagStartYoshi", + "description": "", + "versionU": "Zelda", + }, + "5312": { + "name": "DL_FlagRopeYoshi", + "description": "", + "versionU": "Zelda", + }, + "5313": { + "name": "DL_MasterSwordBase", + "description": "", + "versionU": "Zelda", + }, + "5314": { + "name": "DL_MCRotaryBoardB", + "description": "", + "versionU": "Zelda", + }, + "5315": { + "name": "DL_MCRotaryBoardC", + "description": "", + "versionU": "Zelda", + }, + "5316": { + "name": "DL_WoElevator", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {}, + "param_4": {}, + "param_5": {} + }, + "5317": { + "name": "DL_WoWaterWheel", + "description": "", + "versionU": "Animal", + }, + "5318": { + "name": "DL_BbAirship", + "description": "", + "versionU": "Animal", + }, + "5319": { + "name": "DL_BbCars", + "description": "", + "versionU": "Animal", + }, + "5320": { + "name": "DL_BbJets", + "description": "", + "versionU": "Animal", + }, + "5321": { + "name": "DL_BpSwingride", + "description": "", + "versionU": "Animal", + }, + "5322": { + "name": "DL_BpPirate", + "description": "", + "versionU": "Animal", + }, + "5323": { + "name": "DL_BpParatroopa", + "description": "", + "versionU": "Animal", + }, + "5324": { + "name": "DL_BpWingA", + "description": "", + "versionU": "Animal", + }, + "5325": { + "name": "DL_BpWingB", + "description": "", + "versionU": "Animal", + }, + "5326": { + "name": "DL_BpGear", + "description": "", + "versionU": "Animal", + }, + "5327": { + "name": "DL_CheeseBox", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "5328": { + "name": "DL_TreePalm", + "description": "", + "versionU": "Animal", + }, + "5329": { + "name": "DL_CoinStone", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5330": { + "name": "DL_BpKanransya", + "description": "", + "aliases": ["Ferris Wheel"], + "versionU": "Animal", + }, + "5331": { + "name": "DL_BpCoaster", + "description": "", + "versionU": "Animal", + }, + "5332": { + "name": "DL_TreeAutumnApple", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5333": { + "name": "DL_TreeAutumnLemon", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5334": { + "name": "DL_TreeAutumnOrange", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5335": { + "name": "DL_TreeWinter", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5336": { + "name": "DL_TreeWinterApple", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5337": { + "name": "DL_TreeWinterLemon", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5338": { + "name": "DL_TreeWinterOrange", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5339": { + "name": "DL_TreeSakura", + "description": "", + "versionU": "Animal", + }, + "5340": { + "name": "DL_TreeBushAutumn", + "description": "", + "versionU": "Animal", + }, + "5341": { + "name": "DL_TreeBushWinter", + "description": "", + "versionU": "Animal", + }, + "5342": { + "name": "DL_TreeAutumn", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "5343": { + "name": "DL_NkSearchLight", + "description": "", + "versionU": "Animal", + }, + "5344": { + "name": "DL_StationAlarm", + "description": "", + "versionU": "Animal", + }, + "5345": { + "name": "DL_FlagStartWoods", + "description": "", + "versionU": "Animal", + }, + "5346": { + "name": "DL_TreeSakura2", + "description": "", + "versionU": "Animal", + }, + "5347": { + "name": "DL_TreeSakura3", + "description": "", + "versionU": "Animal", + }, + "5348": { + "name": "DL_AnimalJump", + "description": "", + "versionU": "Animal", + }, + "5349": { + "name": "DL_NkGate", + "description": "", + "versionU": "Animal", + }, + "5350": { + "name": "DL_NkArrowArea_A", + "description": "", + "versionU": "Animal", + }, + "5351": { + "name": "DL_NkArrowArea_B", + "description": "", + "versionU": "Animal", + }, + "5352": { + "name": "DL_NkArrowArea_C", + "description": "", + "versionU": "Animal", + }, + "5353": { + "name": "DL_SpinTurboBar_Bb", + "description": "", + "versionU": "Animal", + }, + "5354": { + "name": "DL_Bbguide", + "description": "", + "versionU": "Animal", + }, + "5355": { + "name": "DL_BbAccelRing", + "description": "", + "aliases": ["Gate"], + "versionU": "Animal", + }, + "5356": { + "name": "DL_BbCannon", + "description": "", + "versionU": "Animal", + }, + "5357": { + "name": "DL_BbBuildA", + "description": "", + "versionU": "Animal", + }, + "5358": { + "name": "DL_BbCarsB", + "description": "", + "versionU": "Animal", + }, + "5359": { + "name": "DL_AnimalFlag", + "description": "", + "versionU": "Animal", + }, + "5360": { + "name": "DL_FlagTriangle7", + "description": "", + "versionU": "Animal", + }, + "5361": { + "name": "DL_NkElevator", + "description": "", + "versionU": "Animal", + }, + "5362": { + "name": "DL_NkRotaryBoard_A", + "description": "", + "versionU": "Animal", + }, + "5363": { + "name": "DL_NkCars_A", + "description": "", + "versionU": "Animal", + }, + "5372": { + "name": "DL_BpStartGate", + "description": "", + "versionU": "Animal", + }, + "5373": { + "name": "DL_SpinTurboBar_Nk", + "description": "", + "versionU": "Animal", + }, + "5376": { + "name": "DL_SpinTurboBar_Cl", + "description": "", + "versionU": "Animal", + }, + "5377": { + "name": "DL_BbPipeRing", + "description": "", + "versionU": "Animal", + }, + "5378": { + "name": "DL_BbRotaryBoardA", + "description": "", + "versionU": "Animal", + }, + "5379": { + "name": "DL_BbBoardPart", + "description": "", + "versionU": "Animal", + }, + "5381": { + "name": "DL_NkArrowArea_D", + "description": "", + "versionU": "Animal", + }, + "5382": { + "name": "DL_NkArrowArea_E", + "description": "", + "versionU": "Animal", + }, + "5383": { + "name": "DL_CoinStoneSnow", + "description": "", + "versionU": "Animal", + "param_0": {}, + "param_1": {}, + "param_2": {}, + "param_3": {} + }, + "6016": { + "name": "DL_RainbowLightA", + "description": "", + "versionU": "Zelda", + }, + "6017": { + "name": "DL_RainbowLightB", + "description": "", + "versionU": "Zelda", + }, + "7041": { + "name": "DL_VRSfcRainbow", + "description": "", + "versionU": "Zelda", + }, + "7042": { + "name": "DL_VRMuteCity", + "description": "", + "versionU": "Zelda", + }, + "7043": { + "name": "DL_VRDragon", + "description": "", + "versionU": "Zelda", + }, + "7044": { + "name": "DL_VRExciteBike", + "description": "", + "versionU": "Zelda", + }, + "7045": { + "name": "DL_VRHyrule", + "description": "", + "versionU": "Zelda", + }, + "7046": { + "name": "DL_VRIcePark", + "description": "", + "versionU": "Zelda", + }, + "7047": { + "name": "DL_VRBabyPark", + "description": "", + "versionU": "Animal", + }, + "7048": { + "name": "DL_VRYoshiCircuit", + "description": "", + "versionU": "Zelda", + }, + "7049": { + "name": "DL_VRWoods", + "description": "", + "versionU": "Animal", + }, + "7050": { + "name": "DL_VRNeoBowserCity", + "description": "", + "versionU": "Animal", + }, + "7051": { + "name": "DL_VRRibbon", + "description": "", + "versionU": "Animal", + }, + "7052": { + "name": "DL_VRAnimalSpring", + "description": "", + "versionU": "Animal", + }, + "7053": { + "name": "DL_VRAnimalSummer", + "description": "", + "versionU": "Animal", + }, + "7054": { + "name": "DL_VRAnimalAutumn", + "description": "", + "versionU": "Animal", + }, + "7055": { + "name": "DL_VRAnimalWinter", + "description": "", + "versionU": "Animal", + }, + "7056": { + "name": "DL_VRCheeseLand", + "description": "", + "versionU": "Animal", + }, + "7057": { + "name": "DL_VRBigBlue", + "description": "", + "versionU": "Animal", + }, + "8027": { + "name": "DL_EbCheerCol", + "description": "", + "versionU": "Zelda", + }, + "8028": { + "name": "DL_EbApproachCol", + "description": "", + "versionU": "Zelda", + "param_0": {} + }, + "8030": { + "name": "DL_WanwanSearchArea", + "description": "", + "versionU": "Zelda", + }, + "8031": { + "name": "DL_WanwanAttackPoint", + "description": "", + "versionU": "Zelda", + }, + "8032": { + "name": "DL_AnimalVoiceAutumn", + "description": "", + "versionU": "Animal", + "param_0": {} + }, + "8033": { + "name": "DL_AnimalVoiceSummer", + "description": "", + "versionU": "Animal", + } +} diff --git a/Plugins/TurboLibrary/TurboLibrary.csproj b/Plugins/TurboLibrary/TurboLibrary.csproj index e3f2e1e..b315c58 100644 --- a/Plugins/TurboLibrary/TurboLibrary.csproj +++ b/Plugins/TurboLibrary/TurboLibrary.csproj @@ -113,6 +113,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + diff --git a/Toolbox.Core b/Toolbox.Core index 01984e4..55d301f 160000 --- a/Toolbox.Core +++ b/Toolbox.Core @@ -1 +1 @@ -Subproject commit 01984e4c4d8953e1625dc65f84eb05bc301a208b +Subproject commit 55d301f2466b5e9722725d26f25344dfa5d151eb diff --git a/Track Studio/Lib/Languages/English/TurboStudio.txt b/Track Studio/Lib/Languages/English/TurboStudio.txt index 3700564..67eadf9 100644 --- a/Track Studio/Lib/Languages/English/TurboStudio.txt +++ b/Track Studio/Lib/Languages/English/TurboStudio.txt @@ -1,6 +1,9 @@ # Comments use # and will be ignored. # Label - Translated Text +ATTRIBUTE - Attribute +SPECIAL - Special + DISPLAY_HEX - Display Hex PATH_WARNING - Game path not configured! Set in "Game Config" menu. @@ -43,8 +46,8 @@ OBJECT - Object # These are short for game modes (multiplayer 2 player, 4 player, wifi, etc) MULTI2P - Multi2P MULTI4P - Multi4P -WIFI = WiFi -WIFI2P = WiFi2P +WIFI - WiFi +WIFI2P - WiFi2P NAME - Name DISABLE_COLLISION - Disable Collision @@ -53,10 +56,35 @@ SINGLE - Single PATH_SPEED - Path Speed EDIT_PATH - Edit Path +PLATFORM_U - Wii U +PLATFORM_SWITCH - Switch +PLATFORM_MOD - Modded +DLC_U_ZELDA - Zelda DLC +DLC_U_ANIMAL - Animal Crossing DLC +DLC_U_MERCEDES - Mercedes DLC +DLC_DX_BCP_1 - BCP (Wave 1) +DLC_DX_BCP_2 - BCP (Wave 2) +DLC_DX_BCP_3 - BCP (Wave 3) +DLC_DX_BCP_4 - BCP (Wave 4) +DLC_DX_BCP_5 - BCP (Wave 5) +DLC_DX_BCP_6 - BCP (Wave 6) + +TRACK_USAGE - Used in +TAGS - Tags PARAMETERS - Parameters PATHS - Paths -DISPLAY_UNUSED - Display Unused -UNUSED = Unused +DISPLAY - Display +DISPLAY_UNUSED - Unused +DISPLAY_RAW - Raw +DISPLAY_ANY_PLATFORM - Unsupported +PARAM_UNUSED - UNUSED {0} +PARAM_NOTDOC - Unknown {0} +ENUM_UNKNOWN - UNKNOWN +PARAM_DEFAULT - Default +PARAM_MIN - Min +PARAM_MAX - Max +PARAM_SAMPLE - Example(s) +PARAM_WARNING - {0}f is the current value. It is considered invalid and may not be displayed properly in this widget. RELATIVES - Relatives RELATIVE_OBJECT - Relative Object @@ -72,6 +100,7 @@ ENEMY_PATH_1 - Enemy Path 1 ENEMY_PATH_2 - Enemy Path 2 ITEM_PATH_1 - Item Path 1 ITEM_PATH_2 - Item Path 2 +ROUTE_CHANGE - Route Change # Object PARAMETERS diff --git a/Track Studio/TrackStudio.csproj b/Track Studio/TrackStudio.csproj index b8246bc..8948b03 100644 --- a/Track Studio/TrackStudio.csproj +++ b/Track Studio/TrackStudio.csproj @@ -162,6 +162,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -181,6 +184,7 @@ + diff --git a/Track Studio/User/MapObjArchives/MapObjArchivesHere.txt b/Track Studio/User/MapObjArchives/MapObjArchivesHere.txt new file mode 100644 index 0000000..b98717d --- /dev/null +++ b/Track Studio/User/MapObjArchives/MapObjArchivesHere.txt @@ -0,0 +1,64 @@ +You can add your own parameter documentation in this folder. Simply create a new file in this folder called . +Track Studio will load it automatically. + +Example: +---- +{ + ... + "3026": { // MapObj ID + "name": "DL_Metro", // MapObj name + "description": "A subway train with a variable number of wagons.", + "aliases": ["Train", "Subway"], // Additional search terms in the asset viewer and outliner + "usages": ["U Super Bell Subway"], + "versionU": 0, // Wii U version this mapObj was introduced in (Default 0/"base"). -1 means unsupported in Wii U + "versionDX": "base", // Same as above, but for Deluxe + "param_0": { + "name": "Number of trains", + "description": "Number of wagons. The locomotive has a boost panel at the front.", + "samples": [0.0, 3.0], // Example values + "versionU": 0, // Same as for the mapObj, but instead specifically for this parameter + "versionDX": 1, // Same as for the mapObj, but instead specifically for this parameter + "type": "int", // Determines which widget to use. Valid values include, int, float, bool, time, enum, bytes + "default": 0, // Default value when creating a new object + "minValue": 0, + "maxValue": null, + "enum": { // Predetermined values with special meaning + 0: "Red", + 1: "Blue", + } + }, + // Unused parameters can be skipped. E.g., skip "param_1" + "param_2": {} // Empty parameters are marked as 'used', but won't have any documentation + ... + "param_7": {} + }, + ... +} +---- + +Any value can be left out, meaning you'll only need to define the docs you wish to add. +E.g., the following is valid: +---- +{ + ... + "3026": { + "description": "Trains are fun!", + "param_6": { + "name": "Train Hue" + } + } + ... +} +---- +or even +---- +{ + ... + "3026": { + "param_4": {} + } + ... +} +---- + +Pull requests with parameter documentation is welcome. This way it can be included for all to use!