public static boolean isEffective(boolean player, int moveNum) {
		int move = getMove(player,moveNum);
		if(move <= 0)
			return false;
		int atkType = curGb.getROM()[curGb.pokemon.listMovesAddress + (move-1)*curGb.pokemon.listMovesEntryLength + 3];

		int defenderTypeAddress = player ? curGb.pokemon.fightEnemyMonTypesAddress : curGb.pokemon.fightBattleMonTypesAddress;
		int add = curGb.pokemon.listTypeMatchupAddress;
		int dt1 = curGb.readMemory(defenderTypeAddress);
		int dt2 = curGb.readMemory(defenderTypeAddress+1);
		while(true) {
			int at = curGb.getROM()[add++];
			if(at == 0xFE) continue;
			if(at == 0xFF) break;
			int dt = curGb.getROM()[add++];
			/*int eff = State.getROM()[add++];*/add++;
			if(at == atkType && (dt == dt1 || dt == dt2))
				return true;
		}
		return false;
	}