{"record":{"id":"b3d8aa4488881dd8","repo":"ppy/osu","slug":"unknown-command-type-commandtype","errorCode":null,"errorMessage":"Unknown command type: {commandType}","messagePattern":"Unknown command type: (.+?)","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"error","filePath":"osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs","lineNumber":335,"sourceCode":"                                    case \"A\":\r\n                                        currentCommandsGroup?.AddBlendingParameters(easing, startTime, endTime, BlendingParameters.Additive,\r\n                                            startTime == endTime ? BlendingParameters.Additive : BlendingParameters.Inherit);\r\n                                        break;\r\n\r\n                                    case \"H\":\r\n                                        currentCommandsGroup?.AddFlipH(easing, startTime, endTime, true, startTime == endTime);\r\n                                        break;\r\n\r\n                                    case \"V\":\r\n                                        currentCommandsGroup?.AddFlipV(easing, startTime, endTime, true, startTime == endTime);\r\n                                        break;\r\n                                }\r\n\r\n                                break;\r\n                            }\r\n\r\n                            default:\r\n                                throw new InvalidDataException($@\"Unknown command type: {commandType}\");\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private string parseLayer(string value) => Enum.Parse<LegacyStoryLayer>(value).ToString();\r\n\r\n        private Anchor parseOrigin(string value)\r\n        {\r\n            var origin = Enum.Parse<LegacyOrigins>(value);\r\n\r\n            switch (origin)\r\n            {\r\n                case LegacyOrigins.TopLeft:\r\n                    return Anchor.TopLeft;\r","sourceCodeStart":317,"sourceCodeEnd":353,"githubUrl":"https://github.com/ppy/osu/blob/d9c73e12adff2feaae4a3e158d36fe5883faf6ca/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs#L317-L353","documentation":"Thrown by LegacyStoryboardDecoder when parsing a storyboard command inside a sprite/animation's command list (depth>0, after the 'T'/'C'/'P' command-group markers) and the command letter doesn't match any recognized case (F, M, S, V, R, C, L, MX, MY, P, E, etc.). The default branch of the inner switch fires for any unrecognized command character.","triggerScenarios":"Decoding a .osu/.osb storyboard where a sprite's command block contains a command with an unrecognized letter prefix — e.g. '_X,0,1000,0,1' where 'X' is not a valid command. The commandType string is the first field after the leading underscores/spaces in a depth>0 event line.","commonSituations":"A storyboard created by a non-standard or experimental tool that emits unsupported command types; manual editing introducing a typo in a command letter (e.g. 'G' instead of 'F'); a corrupt storyboard file with garbled command data.","solutions":["Inspect the storyboard command shown in the error message and identify the unrecognized command letter.","Replace it with a valid command letter or remove the offending command line.","Valid command letters include: F (fade), M (move), MX/MY (move X/Y), S (scale), V (vector scale), R (rotate), C (colour), L (loop), P (parameter), T (trigger), E (event).","Re-export the storyboard from a compatible editor."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try\n{\n    storyboardDecoder.Decode(reader);\n}\ncatch (InvalidDataException ex) when (ex.Message.Contains(\"Unknown command type\"))\n{\n    Logger.Log($\"Unrecognized storyboard command — file may be corrupt: {ex.Message}\", LoggingTarget.Database);\n}","preventionTips":["Ensure storyboard command letters match the valid set (F, M, MX, MY, S, V, R, C, L, P, T, E).","Validate storyboard files from non-standard editors before use.","Reject or quarantine storyboard files with unknown command types during import."],"tags":["storyboard-decoding","commands","unknown-type","data-corruption"],"backgroundTag":null,"analyzedSha":"d9c73e12adff2feaae4a3e158d36fe5883faf6ca","analyzedAt":"2026-08-13T14:12:54.015Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}