I thought the global vars might be the problem but it didn't make a difference when I declared them as
Code:
STRING* AbyssNameString = "";
STRING* AbyssNumberString = "";
STRING* TempString = "";
STRING* ComparisonString = "";


Just to be sure, I just declared them this way again and used str_clip and it still didn't work
Code:
if(region_find(AbyssNameString, my.x))//check if ent is in region & store name of region
        {
        	wait(5);
        	str_printf(AbyssNameString); //IT CRASHES BEFORE I EVEN GET THE RESULTS OF THIS LINE
        	str_cpy(TempString, AbyssNameString);
        	
            
            str_clip(TempString, 5); //store first 5 letters in TempString
            if(str_cmpi(TempString, "Abyss")) //if the region is an abyss
            {        	
        	    str_parse_head(AbyssNumberString, AbyssNameString, "Abyss"); //store number that comes after 'abyss'        
                if(region_check(AbyssNameString,vMin,vMax))
                {
             	   vec_set(my.x, Player1RespawnPosition[str_to_num(AbyssNumberString)]); 
                }        	
            }        
        }