public void update() {
	//	applyDots();
	//	if (this.actionPoints > 0) this.imUp = true;
	//	else this.imUp = false;
		
	/*	if ((Math.round((Game.getGameplay().getDeltaTimeStage() / 100000000))) % 5 == 0) {
			this.isGettingDamage = false;
			System.out.println(Math.round((Game.getGameplay().getDeltaTimeStage() / 100000000)));
		}
	*/
		
		if (isGettingDamage && System.nanoTime() > (this.flashStart + this.flashDuration)) this.isGettingDamage = false;
		
		setPercentageValues();
		
		// the following 3 lines make the dynamic monster changing possible:
		updateSpawnSlots();
		setXY(spawnSlot);
		updateXY();
	
	
//		System.out.println(id);
//		System.out.println("Waiting? " + isWaiting);
//		System.out.println(isWaiting);
		
		//if dead 0 ap since checkIfDone() looks for ap
		// extend this into a method for additional death-related stuff
		// e.g. new sprite for dead ppl
		if (!isAlive) { 
			actionPoints = 0;
			sprite = Sprite.monster_generic_dead;
		}
		
	// AI BEHAVIORS
	//	aiBehaviorUseHeal();
	//	aiBehaviorUseStun();
	//	aiBehaviorUseDots();
	//	aiBehaviorUseShield();	
		aiBehaviorUseDamageSpells();
		
		// BUFFS
		for (int i = 0; i < buffs.size(); i++)
			buffs.get(i).update();
			
			
		remove();
		
		// basic attack
		if (checkCanUseSkills() && currentTarget.isAlive) {
			monsterWait(3);
		if (!isWaiting) {
				if (actionPoints > 0) {
					pickAWord(); 
					for (int i = 0; i < currentWord.length; i++) System.out.print(currentWord[i]);
					basicAttack(this, currentTarget, null);
					monstersAttacked++;
				}
			}			
		}
		isWaiting = true;
	}