diff --git a/Las gymkhanikas de Uli.csproj b/Las gymkhanikas de Uli.csproj
deleted file mode 100644
index ba5a9d9c..00000000
--- a/Las gymkhanikas de Uli.csproj
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- net8.0
- net9.0
- true
- LasgymkhanikasdeUli
-
-
\ No newline at end of file
diff --git a/Las gymkhanikas de Uli.sln b/Las gymkhanikas de Uli.sln
deleted file mode 100644
index ae9cfc63..00000000
--- a/Las gymkhanikas de Uli.sln
+++ /dev/null
@@ -1,19 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Las gymkhanikas de Uli", "Las gymkhanikas de Uli.csproj", "{9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- ExportDebug|Any CPU = ExportDebug|Any CPU
- ExportRelease|Any CPU = ExportRelease|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
- {9E3EA186-FBCB-4B4D-BF1C-89064EF61C6C}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/README.md b/README.md
index 53a79428..6acbfeed 100644
--- a/README.md
+++ b/README.md
@@ -8,13 +8,6 @@ Point-and-click adventure game developed using Escoria framework and Godot engin
2) Clone `escoria-demo-game` repo (develop branch)
3) Create `gymkhana/addons/escoria-core` symlink pointing to `escoria-demo-game/addons/escoria-core`
-### Frog Subtitles
-
-Frog Subtitles is a C# plugin which requires some extra steps:
-
-1) Use Godot .Net version
-2) Download .Net SDK v8+ (Ubuntu 24.04: `sudo apt install dotnet-sdk-8.0`)
-3) Build C# solution in Godot: Project -> Tools -> C# -> Create C# solution
## Video export.
- 1280 x 720 | 25fps
diff --git a/addons/frog_subtitles/SubtitlesImportPlugin.cs b/addons/frog_subtitles/SubtitlesImportPlugin.cs
deleted file mode 100644
index 3e960aa5..00000000
--- a/addons/frog_subtitles/SubtitlesImportPlugin.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-#if TOOLS
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Text;
-using System.Text.RegularExpressions;
-using Godot;
-using Godot.Collections;
-
-namespace Frog;
-
-public partial class SubtitlesImportPlugin : EditorImportPlugin
-{
- private readonly static Regex timeRegex = new Regex(@"(?[0-9,:\.]+)\ -->\ (?[0-9,:\.]+)");
- private readonly static Regex colorRegex = new Regex(@"");
- private readonly static Regex linePositionRegex = new Regex(@"\{\\a([0-9]+)\}");
-
- public override string _GetImporterName() => "frog-subtitles.plugin";
-
- public override string _GetVisibleName() => "Frog Subtitles";
-
- public override string[] _GetRecognizedExtensions() => new string[] { "srt" };
-
- public override string _GetSaveExtension() => "res";
-
- public override string _GetResourceType() => "Resource";
-
- public override int _GetPresetCount() => 1;
-
- public override float _GetPriority() => 1;
-
- public override int _GetImportOrder() => 0;
-
- public override string _GetPresetName(int presetIndex) => "Default";
-
- public override Array _GetImportOptions(string path, int presetIndex)
- {
- return new Array();
- }
-
- public override Error _Import(string sourceFile, string savePath, Dictionary options, Array platformVariants, Array genFiles)
- {
- Error parseResult = Error.Ok;
- ReaderState state = ReaderState.ReadId;
- List entries = new();
- try
- {
- int currentId = 0;
- TimeSpan startTime = TimeSpan.Zero;
- TimeSpan endTime = TimeSpan.Zero;
- StringBuilder content = new();
-
- void RegisterEntry()
- {
- content.Replace("", "[b]").Replace("", "[/b]").Replace("{b}", "[b]").Replace("{/b}", "[/b]");
- content.Replace("", "[i]").Replace("", "[/i]").Replace("{i}", "[i]").Replace("{/i}", "[/i]");
- content.Replace("", "[u]").Replace("", "[/u]").Replace("{u}", "[u]").Replace("{/u}", "[/u]");
- content.Replace("", "[/color]");
- string contentString = content.ToString();
- contentString = colorRegex.Replace(contentString, match => $"[color={match.Groups[1].Value}]");
- contentString = linePositionRegex.Replace(contentString, match =>
- {
- string result = string.Empty;
- if (int.TryParse(match.Groups[1].Value, out int lineCount))
- {
- for (int i = 1; i < lineCount; ++i)
- {
- result += '\n';
- }
- }
- else
- {
- Trace.TraceError($"Can't parse subtitles line position tag: {match.Value}");
- }
-
- return result;
- });
-
- entries.Add(new SubtitleEntry()
- {
- Id = currentId,
- StartTime = startTime.TotalSeconds,
- EndTime = endTime.TotalSeconds,
- Content = contentString,
- });
-
- content.Clear();
- }
-
- using (StreamReader reader = File.OpenText(ProjectSettings.GlobalizePath(sourceFile)))
- {
- while (!reader.EndOfStream)
- {
- string line = reader.ReadLine();
- switch (state)
- {
- case ReaderState.ReadId:
- if (!int.TryParse(line, out currentId))
- {
- Trace.TraceError($"Can't parse subtitles id: {line}");
- parseResult = Error.Failed;
- }
-
- state = ReaderState.ReadTime;
- break;
-
- case ReaderState.ReadTime:
- Match match = SubtitlesImportPlugin.timeRegex.Match(line);
- if (!match.Success ||
- !TimeSpan.TryParse(match.Groups["start"].Value.Replace(',', '.'), out startTime) ||
- !TimeSpan.TryParse(match.Groups["end"].Value.Replace(',', '.'), out endTime))
- {
- Trace.TraceError($"Can't parse subtitles time: {line}");
- parseResult = Error.Failed;
- }
-
- state = ReaderState.ReadContent;
- break;
-
- case ReaderState.ReadContent:
- if (string.IsNullOrEmpty(line))
- {
- // End of current entry. Store it and clear buffers.
- RegisterEntry();
- state = ReaderState.ReadId;
- break;
- }
-
- if (content.Length > 0)
- {
- content.Append('\n');
- }
-
- content.Append(line);
- break;
- }
- }
-
- // Register last entry (no need to end a line, end of file is enough)
- if (content.Length > 0)
- {
- RegisterEntry();
- }
- }
- }
- catch
- {
- return Error.Failed;
- }
-
- if (parseResult != Error.Ok)
- {
- return parseResult;
- }
-
- Debug.WriteLine($"{sourceFile} parsed. Found {entries.Count} subtitles entries.");
- entries.Sort((left, right) => left.Id.CompareTo(right.Id));
- var subtitles = new Subtitles()
- {
- Entries = new Array(entries),
- };
-
- string filename = $"{savePath}.{this._GetSaveExtension()}";
- return ResourceSaver.Save(subtitles, filename);
- }
-
- private enum ReaderState
- {
- ReadId,
- ReadTime,
- ReadContent,
- }
-}
-
-#endif
diff --git a/addons/frog_subtitles/SubtitlesImportPlugin.cs.uid b/addons/frog_subtitles/SubtitlesImportPlugin.cs.uid
deleted file mode 100644
index 053a41c4..00000000
--- a/addons/frog_subtitles/SubtitlesImportPlugin.cs.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://cp8l0est28gtv
diff --git a/addons/frog_subtitles/SubtitlesPlugin.cs b/addons/frog_subtitles/SubtitlesPlugin.cs
deleted file mode 100644
index bcd1571b..00000000
--- a/addons/frog_subtitles/SubtitlesPlugin.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-#if TOOLS
-using Godot;
-
-namespace Frog;
-
-[Tool]
-public partial class SubtitlesPlugin : EditorPlugin
-{
- private SubtitlesImportPlugin? importPlugin;
-
- public override void _EnterTree()
- {
- Script videoStreamSubtitlesScript = GD.Load