diff --git a/DS_Map/DSPRE.csproj b/DS_Map/DSPRE.csproj
index c7d812f..613d31c 100644
--- a/DS_Map/DSPRE.csproj
+++ b/DS_Map/DSPRE.csproj
@@ -191,9 +191,6 @@
LevelScriptEditor.cs
-
- Form
-
UserControl
@@ -272,6 +269,9 @@
TrainerEditor.cs
+
+ Form
+
@@ -751,6 +751,9 @@
+
+ Always
+
diff --git a/DS_Map/Editors/TextEditor.cs b/DS_Map/Editors/TextEditor.cs
index ee49a30..e37ae0f 100644
--- a/DS_Map/Editors/TextEditor.cs
+++ b/DS_Map/Editors/TextEditor.cs
@@ -11,7 +11,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static DSPRE.RomInfo;
-using static Tao.Platform.Windows.Winmm;
+using DSPRE.Editors.Utils;
namespace DSPRE.Editors
{
@@ -671,19 +671,35 @@ namespace DSPRE.Editors
selectTextFileComboBox.Items.Clear();
int textCount = parent.romInfo.GetTextArchivesCount();
- for (int i = 0; i < textCount; i++)
+
+ using (var loadingForm = new LoadingForm(textCount, "Loading text archives..."))
{
- Helpers.statusLabelMessage($"Parsing text file {i} of {textCount}");
- ExpandTextFile(i);
- selectTextFileComboBox.Items.Add("Text Archive " + i);
+ Helpers.statusLabelMessage("Setting up Text Editor...");
+
+ Task.Run(() =>
+ {
+ selectTextFileComboBox.Invoke((Action)(() => selectTextFileComboBox.Items.Clear()));
+ for (int i = 0; i < textCount; i++)
+ {
+ ExpandTextFile(i);
+ loadingForm.Invoke((Action)(() => loadingForm.UpdateProgress(i + 1)));
+ selectTextFileComboBox.Invoke((Action)(() => selectTextFileComboBox.Items.Add("Text Archive " + i)));
+ }
+
+ _parent.Invoke((Action)(() =>
+ {
+ Helpers.DisableHandlers();
+ hexRadiobutton.Checked = SettingsManager.Settings.textEditorPreferHex;
+ Helpers.EnableHandlers();
+ selectTextFileComboBox.SelectedIndex = 0;
+ Helpers.statusLabelMessage();
+ loadingForm.Close();
+ }));
+ });
+
+ // ShowDialog to keep the form modal while allowing background processing
+ loadingForm.ShowDialog();
}
-
- Helpers.DisableHandlers();
- hexRadiobutton.Checked = SettingsManager.Settings.textEditorPreferHex;
- Helpers.EnableHandlers();
-
- selectTextFileComboBox.SelectedIndex = 0;
- Helpers.statusLabelMessage();
}
public static void ExpandTextFile(int ID)
diff --git a/DS_Map/Editors/Utils/LoadingForm.cs b/DS_Map/Editors/Utils/LoadingForm.cs
new file mode 100644
index 0000000..3acbc65
--- /dev/null
+++ b/DS_Map/Editors/Utils/LoadingForm.cs
@@ -0,0 +1,104 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace DSPRE.Editors.Utils
+{
+ public class LoadingForm : Form
+ {
+ private ProgressBar progressBar;
+ private Label factLabel;
+ private readonly string[] pokemonFacts = new[]
+ {
+ "Did you know? Pikachu is the mascot of the Pokémon franchise!",
+ "Bulbasaur is the first Pokémon in the National Pokédex.",
+ "Mewtwo was created by scientists in a lab on Cinnabar Island.",
+ "Eevee has eight different evolutions, known as 'Eeveelutions'!",
+ "Charizard's tail flame burns brighter when it's healthy.",
+ "Gengar is said to steal the shadows of its victims.",
+ "The Pokémon world has eight regions, from Kanto to Paldea!",
+ "Snorlax can sleep for days and only wakes up to eat.",
+ "Magikarp is weak but evolves into the powerful Gyarados.",
+ "Jigglypuff loves to sing, but its song puts others to sleep!"
+ };
+ private Random random = new Random();
+ private Timer factTimer;
+
+ public LoadingForm(int totalAmount, string textDisplay)
+ {
+ Text = textDisplay;
+ Width = 400;
+ Height = 200;
+ FormBorderStyle = FormBorderStyle.FixedDialog;
+ StartPosition = FormStartPosition.CenterParent;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ ShowInTaskbar = false;
+
+ progressBar = new ProgressBar
+ {
+ Location = new System.Drawing.Point(20, 20),
+ Width = 340,
+ Height = 30,
+ Minimum = 0,
+ Maximum = totalAmount,
+ Value = 0
+ };
+ Controls.Add(progressBar);
+
+ factLabel = new Label
+ {
+ Location = new System.Drawing.Point(20, 60),
+ Width = 340,
+ Height = 80,
+ TextAlign = System.Drawing.ContentAlignment.MiddleCenter,
+ Text = "Loading Pokémon facts..."
+ };
+ Controls.Add(factLabel);
+
+ try
+ {
+ string factFilePath = Path.Combine(Application.StartupPath, "Tools", "pokefatcs.txt");
+ pokemonFacts = File.ReadAllLines(factFilePath)
+ .Where(line => !string.IsNullOrWhiteSpace(line))
+ .ToArray();
+ if (pokemonFacts.Length == 0)
+ {
+ pokemonFacts = new[] { "No Pokémon facts found, but we're still loading!" };
+ }
+ }
+ catch (Exception ex)
+ {
+ pokemonFacts = new[] { $"Failed to load Pokémon facts: {ex.Message}" };
+ }
+ factLabel.Text = GetRandomFact();
+
+ factTimer = new Timer
+ {
+ Interval = 3000
+ };
+ factTimer.Tick += (s, e) => factLabel.Text = GetRandomFact();
+ factTimer.Start();
+ }
+
+ public void UpdateProgress(int current)
+ {
+ if (current <= progressBar.Maximum)
+ {
+ progressBar.Value = current;
+ }
+ }
+
+ private string GetRandomFact()
+ {
+ return pokemonFacts[random.Next(pokemonFacts.Length)];
+ }
+
+ protected override void OnFormClosing(FormClosingEventArgs e)
+ {
+ factTimer.Stop();
+ base.OnFormClosing(e);
+ }
+ }
+}
diff --git a/DS_Map/Tools/pokefatcs.txt b/DS_Map/Tools/pokefatcs.txt
new file mode 100644
index 0000000..03ddfaa
--- /dev/null
+++ b/DS_Map/Tools/pokefatcs.txt
@@ -0,0 +1,127 @@
+Pikachu is the mascot of the Pokemon franchise!
+Bulbasaur is the first Pokemon in the National Pokedex.
+Mewtwo was created by scientists in a lab on Cinnabar Island.
+Eevee has eight different evolutions, known as Eeveelutions!
+Charizard's tail flame burns brighter when it's healthy.
+Gengar is said to steal the shadows of its victims.
+The Pokemon world has eight regions, from Kanto to Paldea!
+Snorlax can sleep for days and only wakes up to eat.
+Magikarp is weak but evolves into the powerful Gyarados.
+Jigglypuff loves to sing, but its song puts others to sleep!
+Lucario can sense auras to read emotions and intentions.
+Wailord is the largest Pokemon, over 47 feet long!
+Arceus is considered the creator of the Pokemon universe.
+Gyarados can cause storms when it appears in the wild.
+Pidgeot can fly at speeds up to Mach 2!
+Mimikyu dresses as Pikachu to make friends.
+The Sinnoh region, home of Platinum, is based on Hokkaido, Japan.
+Dragonite can circle the globe in just 16 hours.
+Clefairy is rumored to have come from the moon.
+Garchomp's speed rivals that of a jet plane.
+Mew is said to contain the DNA of every Pokemon.
+The move Hyper Beam requires a recharge after use.
+Togepi evolves with high friendship, not just levels.
+Alakazam has an IQ of over 5,000!
+The Poke Ball was invented by Professor Westwood V.
+Vaporeon’s tail resembles a mermaid’s.
+Ho-Oh’s feathers glow in seven colors.
+Rayquaza lives in the ozone layer and rarely descends.
+The Elite Four challenge trainers to prove their strength.
+Porygon was the first Pokemon created by programming.
+Sylveon can calm others with its soothing ribbons.
+Ditto can transform into any Pokemon it sees.
+The Pokedex is a high-tech encyclopedia of Pokemon.
+Latias and Latios can communicate telepathically.
+Groudon can cause droughts and expand landmasses.
+Kyogre can summon rain and expand oceans.
+Turtwig’s shell is made of soil and hardens with water.
+Piplup is based on a penguin and loves to swim.
+Staraptor can carry heavy loads while flying.
+The Move Tutor teaches Pokemon new moves for a price.
+Eevee’s unstable DNA allows multiple evolutions.
+Shaymin can purify polluted areas with its flowers.
+Darkrai can trap people in nightmares.
+The Battle Frontier is an ultimate test for trainers.
+Psyduck gets headaches that unleash psychic powers.
+Geodude is often mistaken for a regular rock.
+Chikorita’s leaf indicates its health and mood.
+Munchlax eats ten times its weight in food daily.
+The Day-Care Center helps Pokemon breed and level up.
+Legendary Pokemon are often tied to myths and legends.
+Giratina guards the Distortion World in Platinum.
+The HM Surf lets Pokemon swim across water.
+Bidoof is a fan-favorite for its goofy charm.
+Cynthia is the Champion of the Sinnoh region in Platinum.
+The move Earthquake can hit multiple Pokemon at once.
+Palkia controls space and lives in a parallel dimension.
+Dialga controls time and is revered in Sinnoh lore.
+The Underground in Sinnoh lets trainers dig for treasures.
+Abomasnow can summon blizzards with its presence.
+Rotom can possess appliances to change its form.
+The move Flamethrower is super effective against Grass types.
+Meowth can learn Pay Day to scatter coins in battle.
+The Safari Zone lets trainers catch rare Pokemon.
+Jolteon’s electric shocks can reach 10,000 volts.
+Scyther’s blades are as sharp as samurai swords.
+Lapras is known for ferrying people across bodies of water.
+The move Psychic can lower an opponent’s defenses.
+Blastoise has water cannons that can pierce steel.
+The Pokemon Tower in Lavender Town is a memorial for departed Pokemon.
+Cubone wears its mother’s skull as a helmet.
+The move Thunderbolt has a chance to paralyze foes.
+Happiny carries a stone that looks like an egg.
+The Distortion World in Platinum has reversed gravity.
+Glaceon evolves near an Ice Rock in cold regions.
+Leafeon evolves near a Moss Rock in lush forests.
+The move Surf is both a battle move and a field ability.
+Mr. Mime creates invisible walls with its mime skills.
+The Battle Tower challenges trainers with tough battles.
+Miltank’s milk is highly nutritious and heals Pokemon.
+The move Solar Beam needs sunlight to charge.
+Drifloon is said to carry children to the afterlife.
+The Pokemon League is the ultimate goal for trainers.
+Aerodactyl is a fossil Pokemon revived from amber.
+The move Ice Beam can freeze opponents solid.
+Magmar lives in active volcanoes and thrives in heat.
+The Sinnoh Pokedex has 210 Pokemon in Platinum.
+Riolu evolves into Lucario with high friendship during the day.
+The move Shadow Ball is super effective against Ghost types.
+Tropius grows fruit on its neck that kids love to eat.
+The Poke Flute can wake sleeping Pokemon like Snorlax.
+Sudowoodo pretends to be a tree but is actually a Rock type.
+The move Metronome randomly uses any move in the game.
+Ninetales can curse foes with its mystical tails.
+The Old Chateau in Sinnoh is haunted by Ghost Pokemon.
+Pachirisu stores electricity in its cheeks like Pikachu.
+The move Protect shields Pokemon from attacks for one turn.
+Skarmory’s feathers are as hard as steel.
+The Eterna Galactic Building hides Team Galactic’s plans.
+Lopunny’s fluffy fur is popular in fashion.
+DSPRE is a major overhaul of Nomura's 2020 DS Pokemon ROM Editor.
+Did you know? DSPRE significantly shortened load and save times – no more waiting like a Snorlax!
+In DSPRE, the Script Editor now has syntax highlighting – code like a pro trainer!
+DSPRE added a new Advanced Header Search feature – find what you need faster than a Pidgeot!
+DSPRE's ROM Toolbox can expand ARM9 memory – more space for your epic hacks!
+Did you know? DSPRE's commit once celebrated 'Trainer Name Encoding (F YEAH!)' – pure enthusiasm from Mixone!
+The SpawnPoint button was 'lost to Hades' in a DSPRE commit – Mixone brought it back from the underworld!
+DSPRE versions 1.9 and 1.9.1 were 'violently yeeted out of existence' due to a bug – dramatic updates!
+Thanks to SunakazeKun, DSPRE added missing ReplaceMove args – completing the move set!
+Xzonn updated Chinese character support in DSPRE – making it multilingual master!
+DSPRE's Event Editor now supports mouse dragging for buildings – drag and drop like a boss!
+In DSPRE, the Text Editor shows row numbers in hex – for those who think in code!
+DSPRE fixed the 'stupid bug' in some commits – because even tools have off days!
+Did you know? DSPRE's contributors like Mixone and OtakuGracie keep the project evolving!
+DSPRE added glTF exporter for Map Models – export your worlds in style!
+DSPRE's Wild Encounters Editor can repair corrupted files – a lifesaver for hackers!
+In DSPRE, the Matrix Editor supports custom color tables – paint your world!
+DSPRE's Trainer Editor got a partial overhaul – train harder, hack smarter!
+Did you know? DSPRE's release notes once said 'whoops' for a quick fix – honest mistakes!
+DSPRE fixed unresponsive text editors after unpacking – no more frozen screens!
+DSPRE's Map Editor has a flood fill for permissions – cover ground quickly!
+In a DSPRE commit, 'Fixed stupid bug' was the message – self-roast level high!
+DSPRE added support for BDHCAM import/export – camera work like a director!
+DSPRE's NSBTX Editor has a palette match algorithm – colors just click!
+Did you know? AdAstra yeeted buggy versions – only the best for ROM hackers!
+DSPRE's Event Editor can duplicate events – clone your way to victory!
+DSPRE fixed ARM9 mismatch warnings – keeping your ROM stable!
+In DSPRE, the Spawn Settings Editor lets you change starting money – rich from the start!
\ No newline at end of file