I'm not sure if this is a bug or not, so I'll just ask here...

I've been working on a script for Bombs that act like those from the classic Bomberman games, in that the explosions go off in a + pattern, and stop at solid blocks. I've got the skeleton of the bombs down:

Code:
import "std.zh"

bool isspiked = false;
bool isremote = false;
bool CanCreate = true;

global script Bomberman
{
	void run()
	{
		int bombtimer1 = 0;
		int bombtimer2 = 0;
		int bombtimer3 = 0;
		int bombtimer4 = 0;
		int bombtimer5 = 0;
		int bombtimer6 = 0;
		int BombX;
		int BombY;
		int LastMap;
		int LastScreen;
		int bombcount = 0;
		int nrmbmb = 400;
		int spkbmb = 400;
		int rmtbmb = 400;
		lweapon bomb1;
		lweapon bomb2;
		lweapon bomb3;
		lweapon bomb4;
		lweapon bomb5;
		lweapon bomb6;
		bool IsRem1 = false;
		bool IsRem2 = false;
		bool IsRem3 = false;
		bool IsRem4 = false;
		bool IsRem5 = false;
		bool IsRem6 = false;
		bool IsPlaced1 = false;
		bool IsPlaced2 = false;
		bool IsPlaced3 = false;
		bool IsPlaced4 = false;
		bool IsPlaced5 = false;
		bool IsPlaced6 = false;
		bool IsSpike1 = false;
		bool IsSpike2 = false;
		bool IsSpike3 = false;
		bool IsSpike4 = false;
		bool IsSpike5 = false;
		bool IsSpike6 = false;
		while(true)
		{
			if(Game->GetCurMap() != LastMap || Game->GetCurScreen() != LastScreen)
			{
				bombcount = 0;
				bombtimer1 = 0;
				bombtimer2 = 0;
				bombtimer3 = 0;
				bombtimer4 = 0;
				bombtimer5 = 0;
				bombtimer6 = 0;
				CanCreate = true;
			}
			if(bombcount < Game->Counter[2] && Link->InputA && CanCreate)
			{
				if(bombcount >= 0 && !IsPlaced1)
				{
					BombX = Link->X;
					BombY = Link->Y;
					if(Screen->ComboS[ComboAt(BombX, BombY)] != 0)
					{
						BombX = Link->X;
						BombY = Link->Y - 8;
					}
					Screen->CreateLWeapon(255);
					int numwpns = Screen->NumLWeapons();
					lweapon bomb1 = Screen->LoadLWeapon(numwpns);
					bomb1->Step = 0;
					bomb1->Damage = 0;
					bomb1->X = BombX;
					bomb1->Y = BombY;
					bomb1->CSet = 7;
					bomb1->DeadState = -1;
					if(isspiked)
					{
						bomb1->Tile = spkbmb;
						IsSpike1 = true;
						IsRem1 = false;
					}
					else if(isremote)
					{
						bomb1->Tile = rmtbmb;
						IsSpike1 = false;
						IsRem1 = true;
					}
					else
					{
						bomb1->Tile = nrmbmb;
						IsSpike1 = false;
						IsRem1 = false;
					}
					bombtimer1 = 180;
					Game->PlaySound(21);
					IsPlaced1 = true;
				}
				else if(bombcount >= 1)
				{
				}
				else if(bombcount >= 2)
				{
				}
				else if(bombcount >= 3)
				{
				}
				else if(bombcount >= 4)
				{
				}
				else if(bombcount == 5)
				{
				}
			}
			if(IsPlaced1)
			{
				if(bombtimer1 > 0)
				{
					if(!isremote && !IsRem1)
					{
						bombtimer1--;
					}
				}
				if(Link->InputB && isremote && IsRem1)
				{
					bombtimer1 = 0;
				}
				if(bombtimer1 == 0)
				{
					bomb1->DeadState = WDS_DEAD;
					if(Screen->ComboS[ComboAt(BombX, BombY-16)] == 0)
					{
						Screen->CreateLWeapon(254);
						int numwpns = Screen->NumLWeapons();
						lweapon fire1 = Screen->LoadLWeapon(numwpns);
						fire1->Step = 0;
						fire1->Damage = 2;
						fire1->X = BombX;
						fire1->Y = BombY - 16;
						fire1->ASpeed = 8;
						fire1->NumFrames = 8;
						fire1->OriginalTile = 440;
						fire1->DeadState = 60;
						fire1->CSet = 7;
					}
					if(Screen->ComboS[ComboAt(BombX-16, BombY)] == 0)
					{
						Screen->CreateLWeapon(254);
						int numwpns = Screen->NumLWeapons();
						lweapon fire2 = Screen->LoadLWeapon(numwpns);
						fire2->Step = 0;
						fire2->Damage = 2;
						fire2->X = BombX - 16;
						fire2->Y = BombY;
						fire2->ASpeed = 8;
						fire2->NumFrames = 8;
						fire2->OriginalTile = 385;
						fire2->DeadState = 60;
						fire2->CSet = 7;
					}
					if(Screen->ComboS[ComboAt(BombX+16, BombY)] == 0)
					{
						Screen->CreateLWeapon(254);
						int numwpns = Screen->NumLWeapons();
						lweapon fire3 = Screen->LoadLWeapon(numwpns);
						fire3->Step = 0;
						fire3->Damage = 2;
						fire3->X = BombX + 16;
						fire3->Y = BombY;
						fire3->ASpeed = 8;
						fire3->NumFrames = 8;
						fire3->OriginalTile = 405;
						fire3->DeadState = 60;
						fire3->CSet = 7;
					}
					if(Screen->ComboS[ComboAt(BombX, BombY+16)] == 0)
					{
						Screen->CreateLWeapon(254);
						int numwpns = Screen->NumLWeapons();
						lweapon fire4 = Screen->LoadLWeapon(numwpns);
						fire4->Step = 0;
						fire4->Damage = 2;
						fire4->X = BombX;
						fire4->Y = BombY + 16;
						fire4->ASpeed = 8;
						fire4->NumFrames = 8;
						fire4->OriginalTile = 500;
						fire4->DeadState = 60;
						fire4->CSet = 7;
					}
					Screen->CreateLWeapon(254);
					int numwpns = Screen->NumLWeapons();
					lweapon fire5 = Screen->LoadLWeapon(numwpns);
					fire5->Step = 0;
					fire5->Damage = 2;
					fire5->X = BombX;
					fire5->Y = BombY;
					fire5->ASpeed = 8;
					fire5->NumFrames = 8;
					fire5->OriginalTile = 480;
					fire5->DeadState = 60;
					fire5->CSet = 7;
					Game->PlaySound(3);
					IsPlaced1 = false;
				}
			}
			while(Link->InputA)
			{
				CanCreate = false;
				Waitframe();
			}
			if(!Link->InputA)
			{
				CanCreate = true;
			}
			LastMap = Game->GetCurMap();
			LastScreen = Game->GetCurScreen();
			Waitframe();
		}
	}
}
The problem? The Bomb never dies when its DeadState is set to 0. The explosion fires seem to vanish at first sight, but then they start cycling through a few combos as THEIR DeadState starts going down to 0. Honestly, I'm hoping it's not a bug with DeadState... Also, on a side note, why are certain values on the way to 0 set aside for specific actions? Wouldn't that, y'know...BREAK THIS THING? Just a thought...