private uint CompileExpression(ScriptValueType type, IScriptSyntax node) { if (node is ScriptGroup group) { return(CompileGroupExpression(type, group)); } switch (type.Halo3ODST) { case ScriptValueType.Halo3ODSTValue.Boolean: if (node is ScriptBoolean boolValue) { return(CompileBooleanExpression(boolValue)); } else { throw new FormatException(node.ToString()); } case ScriptValueType.Halo3ODSTValue.Real: if (node is ScriptReal realValue) { return(CompileRealExpression(realValue)); } else { throw new FormatException(node.ToString()); } case ScriptValueType.Halo3ODSTValue.Short: if (node is ScriptInteger shortValue) { return(CompileShortExpression(shortValue)); } else { throw new FormatException(node.ToString()); } case ScriptValueType.Halo3ODSTValue.Long: if (node is ScriptInteger longValue) { return(CompileLongExpression(longValue)); } else { throw new FormatException(node.ToString()); } case ScriptValueType.Halo3ODSTValue.String: if (node is ScriptString stringValue) { return(CompileStringExpression(stringValue)); } else { throw new FormatException(node.ToString()); } case ScriptValueType.Halo3ODSTValue.Script: break; case ScriptValueType.Halo3ODSTValue.StringId: break; case ScriptValueType.Halo3ODSTValue.UnitSeatMapping: break; case ScriptValueType.Halo3ODSTValue.TriggerVolume: break; case ScriptValueType.Halo3ODSTValue.CutsceneFlag: break; case ScriptValueType.Halo3ODSTValue.CutsceneCameraPoint: break; case ScriptValueType.Halo3ODSTValue.CutsceneTitle: break; case ScriptValueType.Halo3ODSTValue.CutsceneRecording: break; case ScriptValueType.Halo3ODSTValue.DeviceGroup: break; case ScriptValueType.Halo3ODSTValue.Ai: break; case ScriptValueType.Halo3ODSTValue.AiCommandList: break; case ScriptValueType.Halo3ODSTValue.AiCommandScript: break; case ScriptValueType.Halo3ODSTValue.AiBehavior: break; case ScriptValueType.Halo3ODSTValue.AiOrders: break; case ScriptValueType.Halo3ODSTValue.AiLine: break; case ScriptValueType.Halo3ODSTValue.StartingProfile: break; case ScriptValueType.Halo3ODSTValue.Conversation: break; case ScriptValueType.Halo3ODSTValue.ZoneSet: break; case ScriptValueType.Halo3ODSTValue.DesignerZone: break; case ScriptValueType.Halo3ODSTValue.PointReference: break; case ScriptValueType.Halo3ODSTValue.Style: break; case ScriptValueType.Halo3ODSTValue.ObjectList: break; case ScriptValueType.Halo3ODSTValue.Folder: break; case ScriptValueType.Halo3ODSTValue.Sound: break; case ScriptValueType.Halo3ODSTValue.Effect: break; case ScriptValueType.Halo3ODSTValue.Damage: break; case ScriptValueType.Halo3ODSTValue.LoopingSound: break; case ScriptValueType.Halo3ODSTValue.AnimationGraph: break; case ScriptValueType.Halo3ODSTValue.DamageEffect: break; case ScriptValueType.Halo3ODSTValue.ObjectDefinition: break; case ScriptValueType.Halo3ODSTValue.Bitmap: break; case ScriptValueType.Halo3ODSTValue.Shader: break; case ScriptValueType.Halo3ODSTValue.RenderModel: break; case ScriptValueType.Halo3ODSTValue.StructureDefinition: break; case ScriptValueType.Halo3ODSTValue.LightmapDefinition: break; case ScriptValueType.Halo3ODSTValue.CinematicDefinition: break; case ScriptValueType.Halo3ODSTValue.CinematicSceneDefinition: break; case ScriptValueType.Halo3ODSTValue.BinkDefinition: break; case ScriptValueType.Halo3ODSTValue.AnyTag: break; case ScriptValueType.Halo3ODSTValue.AnyTagNotResolving: break; case ScriptValueType.Halo3ODSTValue.GameDifficulty: break; case ScriptValueType.Halo3ODSTValue.Team: break; case ScriptValueType.Halo3ODSTValue.MpTeam: break; case ScriptValueType.Halo3ODSTValue.Controller: break; case ScriptValueType.Halo3ODSTValue.ButtonPreset: break; case ScriptValueType.Halo3ODSTValue.JoystickPreset: break; case ScriptValueType.Halo3ODSTValue.PlayerColor: break; case ScriptValueType.Halo3ODSTValue.PlayerCharacterType: break; case ScriptValueType.Halo3ODSTValue.VoiceOutputSetting: break; case ScriptValueType.Halo3ODSTValue.VoiceMask: break; case ScriptValueType.Halo3ODSTValue.SubtitleSetting: break; case ScriptValueType.Halo3ODSTValue.ActorType: break; case ScriptValueType.Halo3ODSTValue.ModelState: break; case ScriptValueType.Halo3ODSTValue.Event: break; case ScriptValueType.Halo3ODSTValue.CharacterPhysics: break; case ScriptValueType.Halo3ODSTValue.PrimarySkull: break; case ScriptValueType.Halo3ODSTValue.SecondarySkull: break; case ScriptValueType.Halo3ODSTValue.Object: break; case ScriptValueType.Halo3ODSTValue.Unit: break; case ScriptValueType.Halo3ODSTValue.Vehicle: break; case ScriptValueType.Halo3ODSTValue.Weapon: break; case ScriptValueType.Halo3ODSTValue.Device: break; case ScriptValueType.Halo3ODSTValue.Scenery: break; case ScriptValueType.Halo3ODSTValue.EffectScenery: break; case ScriptValueType.Halo3ODSTValue.ObjectName: break; case ScriptValueType.Halo3ODSTValue.UnitName: break; case ScriptValueType.Halo3ODSTValue.VehicleName: break; case ScriptValueType.Halo3ODSTValue.WeaponName: break; case ScriptValueType.Halo3ODSTValue.DeviceName: break; case ScriptValueType.Halo3ODSTValue.SceneryName: break; case ScriptValueType.Halo3ODSTValue.EffectSceneryName: break; case ScriptValueType.Halo3ODSTValue.CinematicLightprobe: break; case ScriptValueType.Halo3ODSTValue.AnimationBudgetReference: break; case ScriptValueType.Halo3ODSTValue.LoopingSoundBudgetReference: break; case ScriptValueType.Halo3ODSTValue.SoundBudgetReference: break; } throw new NotImplementedException(type.ToString()); }