public static Ability[] EFFECTA(int code)
		{
			final CODES c = c();
			final int cd = code & RESOURCE_MASK;
			Ability[] As = c.effectAs[cd];
			if (As != null)
				return As;
			synchronized (c.effectAs)
			{
				As = c.effectAs[cd];
				if (As != null)
					return As;
				final List<String> effectsV = CMParms.parseSafeSemicolonList(c.effect(code), true);
				if (effectsV.size() == 0)
					c.effectAs[cd] = new Ability[0];
				else
				{
					String abilityID;
					String parms;
					final Vector<Ability> listA = new Vector<Ability>();
					for (final Iterator<String> e = effectsV.iterator(); e.hasNext();)
					{
						abilityID = e.next();
						parms = "";
						if ((abilityID == null) || (abilityID.length() == 0))
							continue;
						if (abilityID.charAt(abilityID.length() - 1) == ')')
						{
							final int x = abilityID.indexOf('(');
							if (x > 0)
							{
								parms = abilityID.substring(x + 1, abilityID.length() - 1);
								abilityID = abilityID.substring(0, x);
							}
						}
						final Ability A = CMClass.getAbility(abilityID);
						if (A == null)
							Log.errOut("RawMaterial", "Unknown ability " + abilityID + " in " + c.effect(code));
						else
						{
							A.setMiscText(parms);
							listA.add(A);
						}
					}
					c.effectAs[cd] = listA.toArray(new Ability[0]);
				}
			}
			return c.effectAs[cd];
		}