User Tag List

Page 1 of 3 1 2 3 LastLast
Results 1 to 10 of 22

Thread: Am I doing something wrong, or is this a bug?

  1. #1
    Ultimate Prankster Lucario QDB Manager
    Just registered
    Nimono's Avatar
    Join Date
    Nov 2005
    Location
    Static Void Kingdom
    Age
    32
    Posts
    1,963
    Mentioned
    5 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    6,276
    Level
    24
    vBActivity - Bars
    Lv. Percent
    43.89%

    Am I doing something wrong, or is this a bug?

    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...

  2. #2
    Gibdo beefster09's Avatar
    Join Date
    Mar 2006
    Age
    31
    Posts
    699
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    2,710
    Level
    16
    vBActivity - Bars
    Lv. Percent
    97.33%

    Re: Am I doing something wrong, or is this a bug?

    Try just relocating the bombs just offscreen. Usually, that invalidates them.

    BTW: Why don't you use arrays? It would certainly help with the readability of the code.
    Avatar: Just who the SPAAAACE do you think I am?

  3. #3
    Ultimate Prankster Lucario QDB Manager
    Just registered
    Nimono's Avatar
    Join Date
    Nov 2005
    Location
    Static Void Kingdom
    Age
    32
    Posts
    1,963
    Mentioned
    5 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    6,276
    Level
    24
    vBActivity - Bars
    Lv. Percent
    43.89%

    Re: Am I doing something wrong, or is this a bug?

    I considered using Arrays, but then I remembered that there were some problems using Arrays in certain ways, so I didn't want to risk it.


    ...Besides, I don't have plans on fully releasing this to the public.

    Now, besides this, I have one more problem- The Bomb itself needs to be positioned EXACTLY in the center of a combo. However, I don't know how to do this. Normally, the Bomb would be placed at Link's X and Y positions, and if the combo at that about position is completely solid, like if Link was standing on the top half of the tile below it, it would move the Bomb down 8 pixels. But this alone isn't enough. I need to find a way to check how far from the center of that combo it is, and move it to there depending on how far away it is. What'd help would be a reverse of the function of ComboAt: "(y & 240)+(x>>4)". However, I'm not sure how to reverse that to take a single number and split it into an X position and a Y position

    Also, I just tried to have the Bomb moved. For some reason, it still left its graphic behind. I'm assuming this means it's doing something it really shouldn't be doing...like say, creating more than one copy of this Bomb at one time...

  4. #4
    Lynel
    ZC Developer
    pkmnfrk's Avatar
    Join Date
    Jan 2004
    Location
    Toronto
    Age
    37
    Posts
    1,248
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    3,142
    Level
    18
    vBActivity - Bars
    Lv. Percent
    10.51%

    Re: Am I doing something wrong, or is this a bug?

    As a first thought, I would look closer at how you load the bomb lweapon. Arbitrarily picking the last lweapon on the screen might work okay, if it's the only lweapon on the screen. Link's sword, other bombs, etc might interfere, though.

    Second, arrays would be fine in this case. Much better than that huge mess that takes up more than a page.

    Third, the combo number is simply the position of the combo on the screen, starting with the top-left combo, and working its way left, then down. So, it would be 1, 2, 3, 4, 5, ... 13, 14, 15. Then, the next row would be 16, 17, 18 ... 30, 31. And so forth.

    Given this information, it's easy to get the X/Y position from the Combo Position:

    Code:
    int cx;
    int cy;
    int theCombo = 123;
    
    cx = Floor(theCombo % 16); //if we divide theCombo by 16, what's the remainder?
    cy = Floor(theCombo / 16);  //in fact, we also want the result of this division!
    
    //cx and cy are the position, measured in tiles.
    //in fact, for 123, it's (11, 7)
    
    cx *= 16;
    cy *= 16; //now it's measured in pixels.
    Tale of the Cave - a web comic - Updates Monday, Wednesday, Friday
    ZC Tutorials - Tutorials and Script Library - Updated July 30, 2008
    ZeldaGuard - Corruption in my save files? It's more likely than you think!
    I do script requests!

  5. #5
    Ultimate Prankster Lucario QDB Manager
    Just registered
    Nimono's Avatar
    Join Date
    Nov 2005
    Location
    Static Void Kingdom
    Age
    32
    Posts
    1,963
    Mentioned
    5 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    6,276
    Level
    24
    vBActivity - Bars
    Lv. Percent
    43.89%

    Re: Am I doing something wrong, or is this a bug?

    Well, the location stuff works now, thanks. Only problem I have left is getting the dang Bomb to vanish, which it should be doing because its position in the lweapon table should remain in the same spot by the time it explodes! I don't do anything to it after it's created until after the explosions are created, and that's just moving it off-screen!

  6. #6
    Lynel
    ZC Developer
    pkmnfrk's Avatar
    Join Date
    Jan 2004
    Location
    Toronto
    Age
    37
    Posts
    1,248
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    3,142
    Level
    18
    vBActivity - Bars
    Lv. Percent
    10.51%

    Re: Am I doing something wrong, or is this a bug?

    Well, the best thing to do would be to save a copy of the lweapon pointer, so you don't even have to load it up again! No muss, no fuss!
    Tale of the Cave - a web comic - Updates Monday, Wednesday, Friday
    ZC Tutorials - Tutorials and Script Library - Updated July 30, 2008
    ZeldaGuard - Corruption in my save files? It's more likely than you think!
    I do script requests!

  7. #7
    Ultimate Prankster Lucario QDB Manager
    Just registered
    Nimono's Avatar
    Join Date
    Nov 2005
    Location
    Static Void Kingdom
    Age
    32
    Posts
    1,963
    Mentioned
    5 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    6,276
    Level
    24
    vBActivity - Bars
    Lv. Percent
    43.89%

    Re: Am I doing something wrong, or is this a bug?

    Quote Originally Posted by pkmnfrk View Post
    Well, the best thing to do would be to save a copy of the lweapon pointer, so you don't even have to load it up again! No muss, no fuss!
    What do you mean, save a copy of it? Could you please explain this?

    EDIT: Nevermind on that, I figured out why it wasn't working: I redeclared "lweapon" before assigning it- even though I already declared it as an lweapon pointer before all the code and the while loop, to make it a script-wide variable... I removed that extra declaration, and it worked. Now my Bombs vanish when they explode...even when you explode them remotely.

  8. #8
    Lynel
    ZC Developer
    pkmnfrk's Avatar
    Join Date
    Jan 2004
    Location
    Toronto
    Age
    37
    Posts
    1,248
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    3,142
    Level
    18
    vBActivity - Bars
    Lv. Percent
    10.51%

    Re: Am I doing something wrong, or is this a bug?

    Oh, good that you figured it out.

    What I means was to do something like:

    Code:
    lweapon theBomb;
    
    global script whatever {
      void run() {
        if(we trigger a bomb somehow) {
          theBomb = Screen->CreateLWeapon(LW_BOMB);
          //do whatever with theBomb
        }
      }
    }
    (PS: post 500)
    Tale of the Cave - a web comic - Updates Monday, Wednesday, Friday
    ZC Tutorials - Tutorials and Script Library - Updated July 30, 2008
    ZeldaGuard - Corruption in my save files? It's more likely than you think!
    I do script requests!

  9. #9
    Ultimate Prankster Lucario QDB Manager
    Just registered
    Nimono's Avatar
    Join Date
    Nov 2005
    Location
    Static Void Kingdom
    Age
    32
    Posts
    1,963
    Mentioned
    5 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    6,276
    Level
    24
    vBActivity - Bars
    Lv. Percent
    43.89%

    New Problem

    Okay, I have a new problem...

    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 BombX1;
    		int BombY1;
    		int BombX2;
    		int BombY2;
    		int BombX3;
    		int BombY3;
    		int BombX4;
    		int BombY4;
    		int BombX5;
    		int BombY5;
    		int BombX6;
    		int BombY6;
    		int LastMap;
    		int LastScreen;
    		int bombcount = 0;
    		int nrmbmb = 400;
    		int spkbmb = 400;
    		int rmtbmb = 400;
    		int randomnumber;
    		int Items[8] = {0,0,3,3,3,124,123,123};
    		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;
    		lweapon Fire1[6];
    		lweapon Fire2[6];
    		lweapon Fire3[6];
    		lweapon Fire4[6];
    		lweapon Fire5[6];
    		while(true)
    		{
    			if(bombcount < Game->Counter[3] && Link->InputA && CanCreate)
    			{
    				if(bombcount >= 0 && !IsPlaced1)
    				{
    					BombX1 = Floor(ComboAt(Link->X+7, Link->Y+12) % 16);
    					BombY1 = Floor(ComboAt(Link->X+7, Link->Y+12) / 16);
    					BombX1 *= 16;
    					BombY1 *= 16;
    					BombY1 += 2;
    					Screen->CreateLWeapon(255);
    					int numwpns = Screen->NumLWeapons();
    					bomb1 = Screen->LoadLWeapon(numwpns);
    					bomb1->Step = 0;
    					bomb1->Damage = 0;
    					bomb1->X = BombX1;
    					bomb1->Y = BombY1;
    					bomb1->CSet = 7;
    					if(isspiked)
    					{
    						bomb1->OriginalTile = spkbmb;
    						IsSpike1 = true;
    						IsRem1 = false;
    						bomb1->DeadState = 180;
    					}
    					else if(isremote)
    					{
    						bomb1->OriginalTile = rmtbmb;
    						IsSpike1 = false;
    						IsRem1 = true;
    					}
    					else
    					{
    						bomb1->OriginalTile = nrmbmb;
    						IsSpike1 = false;
    						IsRem1 = false;
    						bomb1->DeadState = 180;
    					}
    					bombtimer1 = 180;
    					Game->PlaySound(21);
    					IsPlaced1 = true;
    					bombcount++;
    				}
    				else if(bombcount >= 1 && !IsPlaced2)
    				{
    					BombX2 = Floor(ComboAt(Link->X+7, Link->Y+12) % 16);
    					BombY2 = Floor(ComboAt(Link->X+7, Link->Y+12) / 16);
    					BombX2 *= 16;
    					BombY2 *= 16;
    					BombY2 += 2;
    					Screen->CreateLWeapon(255);
    					int numwpns = Screen->NumLWeapons();
    					bomb2 = Screen->LoadLWeapon(numwpns);
    					bomb2->Step = 0;
    					bomb2->Damage = 0;
    					bomb2->X = BombX2;
    					bomb2->Y = BombY2;
    					bomb2->CSet = 7;
    					if(isspiked)
    					{
    						bomb2->OriginalTile = spkbmb;
    						IsSpike2 = true;
    						IsRem2 = false;
    						bomb2->DeadState = 180;
    					}
    					else if(isremote)
    					{
    						bomb2->OriginalTile = rmtbmb;
    						IsSpike2 = false;
    						IsRem2 = true;
    					}
    					else
    					{
    						bomb2->OriginalTile = nrmbmb;
    						IsSpike2 = false;
    						IsRem2 = false;
    						bomb2->DeadState = 180;
    					}
    					bombtimer2 = 180;
    					Game->PlaySound(21);
    					IsPlaced2 = true;
    					bombcount++;
    				}
                            }
    			if(IsPlaced1)
    			{
    				if(bombtimer1 > 0)
    				{
    					if(!isremote && !IsRem1)
    					{
    						bombtimer1--;
    					}
    				}
    				if(Link->InputB && isremote && IsRem1)
    				{
    					bombtimer1 = 0;
    					bomb1->DeadState = 0;
    				}
    				if(bombtimer1 == 0)
    				{
    					bombcount--;
    					if(Screen->ComboS[ComboAt(BombX1, BombY1-16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire1[0] = Screen->LoadLWeapon(numwpns);
    						Fire1[0]->Step = 0;
    						Fire1[0]->Damage = 2;
    						Fire1[0]->X = BombX1;
    						Fire1[0]->Y = BombY1 - 16;
    						Fire1[0]->ASpeed = 8;
    						Fire1[0]->NumFrames = 8;
    						Fire1[0]->OriginalTile = 440;
    						Fire1[0]->DeadState = 40;
    						Fire1[0]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX1-16, BombY1)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire2[0] = Screen->LoadLWeapon(numwpns);
    						Fire2[0]->Step = 0;
    						Fire2[0]->Damage = 2;
    						Fire2[0]->X = BombX1 - 16;
    						Fire2[0]->Y = BombY1;
    						Fire2[0]->ASpeed = 8;
    						Fire2[0]->NumFrames = 8;
    						Fire2[0]->OriginalTile = 385;
    						Fire2[0]->DeadState = 40;
    						Fire2[0]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX1+16, BombY1)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire3[0] = Screen->LoadLWeapon(numwpns);
    						Fire3[0]->Step = 0;
    						Fire3[0]->Damage = 2;
    						Fire3[0]->X = BombX1 + 16;
    						Fire3[0]->Y = BombY1;
    						Fire3[0]->ASpeed = 8;
    						Fire3[0]->NumFrames = 8;
    						Fire3[0]->OriginalTile = 405;
    						Fire3[0]->DeadState = 40;
    						Fire3[0]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX1, BombY1+16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire4[0] = Screen->LoadLWeapon(numwpns);
    						Fire4[0]->Step = 0;
    						Fire4[0]->Damage = 2;
    						Fire4[0]->X = BombX1;
    						Fire4[0]->Y = BombY1 + 16;
    						Fire4[0]->ASpeed = 8;
    						Fire4[0]->NumFrames = 8;
    						Fire4[0]->OriginalTile = 500;
    						Fire4[0]->DeadState = 40;
    						Fire4[0]->CSet = 7;
    					}
    					Screen->CreateLWeapon(254);
    					int numwpns = Screen->NumLWeapons();
    					Fire5[0] = Screen->LoadLWeapon(numwpns);
    					Fire5[0]->Step = 0;
    					Fire5[0]->Damage = 2;
    					Fire5[0]->X = BombX1;
    					Fire5[0]->Y = BombY1;
    					Fire5[0]->ASpeed = 8;
    					Fire5[0]->NumFrames = 8;
    					Fire5[0]->OriginalTile = 480;
    					Fire5[0]->DeadState = 40;
    					Fire5[0]->CSet = 7;
    					Game->PlaySound(3);
    					IsPlaced1 = false;
    					if(Screen->ComboI[ComboAt(BombX1, BombY1-16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX1, BombY1-16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX1;
    							RndmItm->Y = BombY1 - 17;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX1, BombY1+16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX1, BombY1+16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX1;
    							RndmItm->Y = BombY1 + 15;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX1-16, BombY1)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX1-16, BombY1)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX1 - 16;
    							RndmItm->Y = BombY1 - 1;
    						}
    						
    					}
    					if(Screen->ComboI[ComboAt(BombX1+16, BombY1)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX1+16, BombY1)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX1 + 16;
    							RndmItm->Y = BombY1 - 1;
    						}
    						
    					}
    				}
    			}
    			if(IsPlaced2)
    			{
    				if(bombtimer2 > 0)
    				{
    					if(!isremote && !IsRem2)
    					{
    						bombtimer2--;
    					}
    				}
    				if(Link->InputB && isremote && IsRem2)
    				{
    					bombtimer2 = 0;
    					bomb2->DeadState = 0;
    				}
    				if(bombtimer2 == 0)
    				{
    					bombcount--;
    					if(Screen->ComboS[ComboAt(BombX2, BombY2-16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire1[1] = Screen->LoadLWeapon(numwpns);
    						Fire1[1]->Step = 0;
    						Fire1[1]->Damage = 2;
    						Fire1[1]->X = BombX2;
    						Fire1[1]->Y = BombY2 - 16;
    						Fire1[1]->ASpeed = 8;
    						Fire1[1]->NumFrames = 8;
    						Fire1[1]->OriginalTile = 440;
    						Fire1[1]->DeadState = 40;
    						Fire1[1]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX2-16, BombY2)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire2[1] = Screen->LoadLWeapon(numwpns);
    						Fire2[1]->Step = 0;
    						Fire2[1]->Damage = 2;
    						Fire2[1]->X = BombX2 - 16;
    						Fire2[1]->Y = BombY2;
    						Fire2[1]->ASpeed = 8;
    						Fire2[1]->NumFrames = 8;
    						Fire2[1]->OriginalTile = 385;
    						Fire2[1]->DeadState = 40;
    						Fire2[1]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX2+16, BombY2)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire3[1] = Screen->LoadLWeapon(numwpns);
    						Fire3[1]->Step = 0;
    						Fire3[1]->Damage = 2;
    						Fire3[1]->X = BombX2 + 16;
    						Fire3[1]->Y = BombY2;
    						Fire3[1]->ASpeed = 8;
    						Fire3[1]->NumFrames = 8;
    						Fire3[1]->OriginalTile = 405;
    						Fire3[1]->DeadState = 40;
    						Fire3[1]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX2, BombY2+16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire4[1] = Screen->LoadLWeapon(numwpns);
    						Fire4[1]->Step = 0;
    						Fire4[1]->Damage = 2;
    						Fire4[1]->X = BombX2;
    						Fire4[1]->Y = BombY2 + 16;
    						Fire4[1]->ASpeed = 8;
    						Fire4[1]->NumFrames = 8;
    						Fire4[1]->OriginalTile = 500;
    						Fire4[1]->DeadState = 40;
    						Fire4[1]->CSet = 7;
    					}
    					Screen->CreateLWeapon(254);
    					int numwpns = Screen->NumLWeapons();
    					Fire5[1] = Screen->LoadLWeapon(numwpns);
    					Fire5[1]->Step = 0;
    					Fire5[1]->Damage = 2;
    					Fire5[1]->X = BombX2;
    					Fire5[1]->Y = BombY2;
    					Fire5[1]->ASpeed = 8;
    					Fire5[1]->NumFrames = 8;
    					Fire5[1]->OriginalTile = 480;
    					Fire5[1]->DeadState = 40;
    					Fire5[1]->CSet = 7;
    					Game->PlaySound(3);
    					IsPlaced1 = false;
    					if(Screen->ComboI[ComboAt(BombX2, BombY2-16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX2, BombY2-16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX2;
    							RndmItm->Y = BombY2 - 17;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX2, BombY2+16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX2, BombY2+16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX2;
    							RndmItm->Y = BombY2 + 15;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX2-16, BombY2)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX2-16, BombY2)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX2 - 16;
    							RndmItm->Y = BombY2 - 1;
    						}
    						
    					}
    					if(Screen->ComboI[ComboAt(BombX2+16, BombY2)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX2+16, BombY2)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX2 + 16;
    							RndmItm->Y = BombY2 - 1;
    						}
    						
    					}
    				}
    			}
    			if(IsPlaced3)
    			{
    				if(bombtimer3 > 0)
    				{
    					if(!isremote && !IsRem3)
    					{
    						bombtimer3--;
    					}
    				}
    				if(Link->InputB && isremote && IsRem3)
    				{
    					bombtimer3 = 0;
    					bomb2->DeadState = 0;
    				}
    				if(bombtimer3 == 0)
    				{
    					bombcount--;
    					if(Screen->ComboS[ComboAt(BombX3, BombY3-16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire1[2] = Screen->LoadLWeapon(numwpns);
    						Fire1[2]->Step = 0;
    						Fire1[2]->Damage = 2;
    						Fire1[2]->X = BombX3;
    						Fire1[2]->Y = BombY3 - 16;
    						Fire1[2]->ASpeed = 8;
    						Fire1[2]->NumFrames = 8;
    						Fire1[2]->OriginalTile = 440;
    						Fire1[2]->DeadState = 40;
    						Fire1[2]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX3-16, BombY3)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire2[2] = Screen->LoadLWeapon(numwpns);
    						Fire2[2]->Step = 0;
    						Fire2[2]->Damage = 2;
    						Fire2[2]->X = BombX3 - 16;
    						Fire2[2]->Y = BombY3;
    						Fire2[2]->ASpeed = 8;
    						Fire2[2]->NumFrames = 8;
    						Fire2[2]->OriginalTile = 385;
    						Fire2[2]->DeadState = 40;
    						Fire2[2]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX3+16, BombY3)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire3[2] = Screen->LoadLWeapon(numwpns);
    						Fire3[2]->Step = 0;
    						Fire3[2]->Damage = 2;
    						Fire3[2]->X = BombX3 + 16;
    						Fire3[2]->Y = BombY3;
    						Fire3[2]->ASpeed = 8;
    						Fire3[2]->NumFrames = 8;
    						Fire3[2]->OriginalTile = 405;
    						Fire3[2]->DeadState = 40;
    						Fire3[2]->CSet = 7;
    					}
    					if(Screen->ComboS[ComboAt(BombX3, BombY3+16)] == 0)
    					{
    						Screen->CreateLWeapon(254);
    						int numwpns = Screen->NumLWeapons();
    						Fire4[2] = Screen->LoadLWeapon(numwpns);
    						Fire4[2]->Step = 0;
    						Fire4[2]->Damage = 2;
    						Fire4[2]->X = BombX3;
    						Fire4[2]->Y = BombY3 + 16;
    						Fire4[2]->ASpeed = 8;
    						Fire4[2]->NumFrames = 8;
    						Fire4[2]->OriginalTile = 500;
    						Fire4[2]->DeadState = 40;
    						Fire4[2]->CSet = 7;
    					}
    					Screen->CreateLWeapon(254);
    					int numwpns = Screen->NumLWeapons();
    					Fire5[2] = Screen->LoadLWeapon(numwpns);
    					Fire5[2]->Step = 0;
    					Fire5[2]->Damage = 2;
    					Fire5[2]->X = BombX3;
    					Fire5[2]->Y = BombY3;
    					Fire5[2]->ASpeed = 8;
    					Fire5[2]->NumFrames = 8;
    					Fire5[2]->OriginalTile = 480;
    					Fire5[2]->DeadState = 40;
    					Fire5[2]->CSet = 7;
    					Game->PlaySound(3);
    					IsPlaced1 = false;
    					if(Screen->ComboI[ComboAt(BombX3, BombY3-16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX3, BombY3-16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX3;
    							RndmItm->Y = BombY3 - 17;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX3, BombY3+16)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX3, BombY3+16)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX3;
    							RndmItm->Y = BombY3 + 15;
    						}
    					}
    					if(Screen->ComboI[ComboAt(BombX3-16, BombY3)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX3-16, BombY3)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX3 - 16;
    							RndmItm->Y = BombY3 - 1;
    						}
    						
    					}
    					if(Screen->ComboI[ComboAt(BombX3+16, BombY3)] == 6)
    					{
    						Screen->ComboD[ComboAt(BombX3+16, BombY3)] = 1;
    						randomnumber = Floor(Rand(9));
    						if(Items[randomnumber] != 0)
    						{
    							Screen->CreateItem(Items[randomnumber]);
    							int numitms = Screen->NumItems();
    							item RndmItm = Screen->LoadItem(numitms);
    							RndmItm->X = BombX3 + 16;
    							RndmItm->Y = BombY3 - 1;
    						}
    						
    					}
    				}
    			}
    			if(Link->InputA)
    			{
    				CanCreate = false;
    			}
    			if(!Link->InputA)
    			{
    				CanCreate = true;
    			}
    			LastMap = Game->GetCurMap();
    			LastScreen = Game->GetCurScreen();
    			Waitframe();
    		}
    	}
    }
    (You can place six bombs in the full code, but I had to remove things to shrink the size.)

    I have added code to allow you to place more than 1 Bomb at once...

    When the first Bomb is placed, it explodes fine. Place another after blowing up the first, it works. Place more than one before the first explodes, and all explosions after the first wig out and don't vanish. I don't know why... And I even made arrays to simplify things!

  10. #10
    Lynel
    ZC Developer
    pkmnfrk's Avatar
    Join Date
    Jan 2004
    Location
    Toronto
    Age
    37
    Posts
    1,248
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    3,142
    Level
    18
    vBActivity - Bars
    Lv. Percent
    10.51%

    Re: Am I doing something wrong, or is this a bug?

    Give me a little bit of time, and I'll look at the script. I will also add more arrays, since your code will benefit from liberal usage.
    Tale of the Cave - a web comic - Updates Monday, Wednesday, Friday
    ZC Tutorials - Tutorials and Script Library - Updated July 30, 2008
    ZeldaGuard - Corruption in my save files? It's more likely than you think!
    I do script requests!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
About us
Armageddon Games is a game development group founded in 1997. We are extremely passionate about our work and our inspirations are mostly drawn from games of the 8-bit and 16-bit era.
Social