package com.weem.epicinventor.actor.monster; import com.weem.epicinventor.*; import com.weem.epicinventor.actor.*; import com.weem.epicinventor.ai.*; import com.weem.epicinventor.utility.*; public class Porcupine extends Monster { private static final long serialVersionUID = 10000L; private int originalXMoveSize = 2; private int maxXMoveSize = 5; private long nextSlowDown = 0; public Porcupine(MonsterManager mm, Registry rg, String im, String st, int x, int y, int minDist, int maxDist) { super(mm, rg, im, st, x, y, minDist, maxDist, false); name = "Porcupine"; displayName = "Porcupine"; monsterManager = mm; difficultyFactor = 0.50f; adjustHPForLevel(); topOffset = 1; baseOffset = 13; baseWidth = 28; startJumpSize = 20; jumpSize = 8; fallSize = 0; xMoveSize = 2; adjustTouchDamageForLevel(); dropChances.addDropChance("Needle", 75.0f, 1, 5); dropChances.addDropChance("WeemsDiceBag", 0.20f, 1, 1); //1 in 500 chance dropChances.addDropChance("ForrestsLaptop", 0.20f, 1, 1); //1 in 500 chance dropChances.addDropChance("BrandonsAbacus", 0.20f, 1, 1); //1 in 500 chance ai = new AI(registry, this); ai.clearGoals(); ai.addGoal(AI.GoalType.ATTACK_PLAYER, "", (Rand.getRange(0, 1) + Rand.getFloat())); if (groundLevel == 0) { ai.addGoal(AI.GoalType.ATTACK_PLACEABLE, "", (Rand.getRange(0, 1) + Rand.getFloat())); } ai.activate(); } @Override public int applyDamage(int damage, Actor a) { int ret = super.applyDamage(damage, a); if (ret > 0) { xMoveSize++; if (xMoveSize > maxXMoveSize) { xMoveSize = maxXMoveSize; } updateImage(); nextSlowDown = registry.currentTime + 3000; } return ret; } @Override public int applyDamage(int damage, Actor a, boolean fromPlaceable) { int ret = super.applyDamage(damage, a, fromPlaceable); if (ret > 0) { xMoveSize++; if (xMoveSize > maxXMoveSize) { xMoveSize = maxXMoveSize; } updateImage(); nextSlowDown = registry.currentTime + 3000; } return ret; } @Override public int applyDamage(int damage, Actor a, boolean fromPlaceable, boolean sound) { int ret = super.applyDamage(damage, a, fromPlaceable, sound); if (ret > 0) { xMoveSize++; if (xMoveSize > maxXMoveSize) { xMoveSize = maxXMoveSize; } updateImage(); nextSlowDown = registry.currentTime + 3000; } return ret; } @Override protected void updateImage() { String state = ""; if (xMoveSize > originalXMoveSize) { state = "Pissed"; } if (vertMoveMode == VertMoveMode.JUMPING) { setImage("Monsters/" + name + "/Jumping" + state); } else if (vertMoveMode == VertMoveMode.FLYING) { loopImage("Monsters/" + name + "/Flapping" + state); } else if (vertMoveMode == VertMoveMode.FALLING) { loopImage("Monsters/" + name + "/Falling" + state); } else { if (this.isAttacking()) { loopImage("Monsters/" + name + "/Attacking" + state); } else if (isStill) { setImage("Monsters/" + name + "/Standing" + state); } else { loopImage("Monsters/" + name + "/Walking" + state); } } } @Override public void updateLong() { super.updateLong(); if (nextSlowDown > 0) { //mob is speeding up if (xMoveSize < maxXMoveSize) { xMoveSize++; updateImage(); } } else { //mob is going back to normal speed if (xMoveSize > originalXMoveSize) { xMoveSize--; updateImage(); } } if (xMoveSize > maxXMoveSize) { xMoveSize = maxXMoveSize; } if (nextSlowDown < System.currentTimeMillis()) { nextSlowDown = 0; } } }