public void addToRoom(final Room R, final Item fromShip, final int fromDir)
	{
		if(R==null)
			return;
		final Ability A=CMClass.getAbility("Spell_Light");
		if((A!=null)&&(R.fetchEffect(ID())==null))
		{
			final boolean isInDark=CMLib.flags().isInDark(R);
			A.setInvoker(invoker());
			A.setSavable(false);
			A.setExpirationDate(System.currentTimeMillis()+8000);
			R.addEffect(A);
			R.recoverPhyStats();
			R.recoverRoomStats();
			if(isInDark && (!CMLib.flags().isInDark(R)))
			{
				String dirName;
				if(fromShip != null)
				{
					dirName=fromShip.Name();
					R.showHappens(CMMsg.MSG_OK_VISUAL,L("A bright light shines in from @x1.",dirName));
				}
				else
				if(fromDir >= 0)
				{
					if(R.getArea() instanceof BoardableShip)
						dirName=CMLib.directions().getFromShipDirectionName(fromDir);
					else
						dirName=CMLib.directions().getFromCompassDirectionName(fromDir);
					R.showHappens(CMMsg.MSG_OK_VISUAL,L("A bright light shines in from @x1.",dirName));
				}
				else
				{
					R.showHappens(CMMsg.MSG_OK_VISUAL,L("A bright light shines in."));
				}
			}
		}
	}