Re: Checking for integers and floats....
Ok, I fixed all the errors. But when I swing the cane, it does absolutely nothing.
Code:
import "std.zh"
item script Somaria{
int blockY = 0;
int blockX = 0;
int blockcombo = 0;
int blocksecret = 0;
int blockCset = 0;
int disapear = 0;
void run(){
int blockcheckY = 0;
int blockcheckX = 0;
float RmndrX = 0;
float RmndrY = 0;
float BlockrmndrX = 0;
float BlockrmndrY = 0;
int Blockposition = 0;
if (dispear == 0){
if (Link->Dir == 0){
blockcheckY = Link->Y - 32;
blockcheckX = Link->X;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (ComboAt(blockcheckX, blockcheckY) == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 1){
blockcheckY = Link->Y + 32;
blockcheckX = Link->X;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (ComboAt(blockcheckX, blockcheckY) == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockRmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 2){
blockcheckY = Link->Y;
blockcheckX = Link->X - 32;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (ComboAt(blockcheckX, blockcheckY) == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 3){
blockcheckY = Link->Y;
blockcheckX = Link->X + 32;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (ComboAt(blockcheckX, blockcheckY) == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockRmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
}
else
{
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = 0;
Screen->ComboF [Blockposition] = 0;
disapear = 0;
}
} //End of void run
} //End of Script
Re: Checking for integers and floats....
Quote:
Code:
if (ComboAt(blockcheckX, blockcheckY) == 0){
I'm guessing you meant Screen->ComboS[ComboAt(blockcheckX, blockcheckY)].
Re: Checking for integers and floats....
Also, look at this:
Code:
int disapear = 0;
void run(){
int blockcheckY = 0;
int blockcheckX = 0;
float RmndrX = 0;
float RmndrY = 0;
float BlockrmndrX = 0;
float BlockrmndrY = 0;
int Blockposition = 0;
if (dispear == 0){
You misspelled "disappear" BOTH times. Technically, all that matters is that the first and last variables there aren't the same, so that'll give you many problems. Oh yeah, and thanks for stealing my variables. :mad: Just kidding. ;)
Re: Checking for integers and floats....
Now I seem to be having the same problem as Pikaguy.. the block appears only in the right hand corner and the disappearing function does not work.. Maybe my algorithm is messed up?
Code:
import "std.zh"
item script Somaria{
int blockY = 0;
int blockX = 0;
int blockcombo = 0;
int blocksecret = 0;
int blockCset = 0;
int disapear = 0;
int Blockposition = 0;
void run(){
int blockcheckY = 0;
int blockcheckX = 0;
float RmndrX = 0;
float RmndrY = 0;
float BlockrmndrX = 0;
float BlockrmndrY = 0;
if (disapear == 0){
if (Link->Dir == 0){
blockcheckY = Link->Y - 32;
blockcheckX = Link->X;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (Screen->ComboS[ComboAt(blockcheckX, blockcheckY)] == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 1){
blockcheckY = Link->Y + 32;
blockcheckX = Link->X;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (Screen->ComboS[ComboAt(blockcheckX, blockcheckY)] == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 2){
blockcheckY = Link->Y;
blockcheckX = Link->X - 32;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (Screen->ComboS[ComboAt(blockcheckX, blockcheckY)] == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
if (Link->Dir == 3){
blockcheckY = Link->Y;
blockcheckX = Link->X + 32;
RmndrX = blockcheckX % 16;
if (RmndrX <= 8){
blockcheckX = blockcheckX - RmndrX;
}
else
{
blockcheckX = blockcheckX + 16 - RmndrX;
}
RmndrY = blockcheckY % 16;
if (RmndrY <= 8){
blockcheckY = blockcheckY - RmndrY;
}
else
{
blockcheckY = blockcheckY + 16 - RmndrY;
}
if (Screen->ComboS[ComboAt(blockcheckX, blockcheckY)] == 0){
BlockrmndrX = blockX % 16;
if (BlockrmndrX <= 8){
blockX = blockX - BlockrmndrX;
}
else
{
blockX = blockX + 16 - BlockrmndrX;
}
BlockrmndrY = blockY % 16;
if (BlockrmndrY <= 8){
blockY = blockY - BlockrmndrY;
}
else
{
blockY = blockY + 16 - BlockrmndrY;
}
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = blockcombo;
Screen->ComboC [Blockposition] = blockCset;
Screen->ComboF [Blockposition] = blocksecret;
disapear = 1;}
}
}
else
{
Blockposition = (blockY & 240)+(blockX>>4);
Screen->ComboD [Blockposition] = 0;
Screen->ComboF [Blockposition] = 0;
disapear = 0;
}
} //End of void run
} //End of Script
Re: Checking for integers and floats....
Quote:
Originally Posted by
pikaguy900
WHAT?! That's not what the Cane of Somaria did in ANY Zelda game. Maybe that script should be called "the Second Cane of Somaria".
Double-check your script some more. One time, I accidentally forgot to close an "if" statement, which created my "Cane only works when facing North" problem. XD You may have forgotten some braces here and there (Brackets are [], parentheses are (), and BRACES are {}.), so check back over it. It never hurts to double-check your work before you release it, as I have just recently RElearned. (My first learning of it was when I released Adventure in Mysteria. XD I'll never make THAT mistake with quests again.) Then again, it CAN take some people a while to fix some obvious bugs... Sometimes, answers are directly in front of your face, but you'll often miss them. Anyways... Good luck on your script.
I'm absolutely crazy how I organize my scripts, well how I structure them anyway. ALWAYS, In comments, I put end... and then whatever structural element I'm using I'll add. (i.e. // end while, // end ffc script) It helps me a lot. Also, I always indent and space between elements and everything. You'll know what I'm talking about when I release my Modern-style Beamos script. but that's just me. It makes it a lot easier to deal with later on.
And Fire Wizz, I think you need an ffc script for it to work. Check that the block placer is using variables and not constants. I've had that happen to me when using TI-BASIC.