The first problem is that you are storing the new form instance in a local variable, which will be discarded when you exit the handler method.
Start by moving it to class level:
private Kid_Merchant_Hero.GameSettings gameSettings = null;
Then you can use that to decide what to do:
private void SettingsBTN_Click(object sender, EventArgs e)
{
if (gameSettings == null)
{
gameSettings = new Kid_Merchant_Hero.GameSettings();
gameSettings.FormClosed += gameSettings.FormClosed;
gameSettings.Show();
SettingsBTN.Text = "Close";
}
else
{
gameSettings.Close();
}
}
Handle the FormClosed event to clear the form:
private void gameSettings_FormClosed(object sender, FormClosedEventArgs e)
{
gameSettings = null;
SettingsBTN.Text = "Open";
}
And you're done.