📄 actor.java
字号:
else if(m_phbBottom < Def.PHB_BOX)
{
Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
setAction(m_actionIDNow+1, 1);
}
else if(Player.m_prince.intersectBox(m_posX, m_posY, getColBox(), Def.TILE_WIDTH))
{
Player.m_prince.postMessage(Def.MSG_BOX_NEAR, this);
}
else
{
Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
}
break;
case Def.BOX_DROP:
case Def.BOX_DROP2:
if(checkBoxDamage())
{
Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
setAction(m_actionIDNow+1, 0);
}
else if(m_phbBottom >= Def.PHB_BOX)
{
setAction(m_actionIDNow-1, 1);
}
break;
case Def.BOX_SMASH:
case Def.BOX_SMASH2:
if(m_actionOver)
{
m_flag[3] = false;
}
break;
case Def.BOX_STONE:
Actor box = Player.m_prince.m_relativeMisc;
if (box != null && Math.abs(box.m_posY - m_posY) < (4<<8))
{
if (box.m_relativeMisc == null ||
Math.abs(box.m_relativeMisc.m_posX - box.m_posX) > Math.abs(m_posX - box.m_posX))
box.m_relativeMisc = this;
}
break;
}
}
void drawMsg(byte msgIndex)
{
if (msgIndex >= 0 && GE.m_playHint > 0)
{
if (Def.PF_TOP > 0)
GE.m_brushBottom = true;
GE.m_msgIndex = msgIndex;
GE.m_msgLine = 0;
GE.m_msgTime = GE.m_curFrameTime + Def.HINT_SHOWTIME;
Player.m_prince.setAction(Def.PRINCE_NORMAL, 1);
GE.resetKey();
}
}
void aiBonus()
{
switch (m_actionIDNow)
{
case Def.BONUS_CHECKPOINT:
case Def.BONUS_CHECKPOINT2:
if (m_actionOver)
{
setAction(m_actionIDNow - Def.BONUS_CHECKPOINT + Def.BONUS_CHECKPOINT_WAIT, 1);
}
return;
case Def.BONUS_IND_WALLING:
case Def.BONUS_IND_WALLJUMP:
case Def.BONUS_IND_ROLL:
case Def.BONUS_IND_JUMP:
case Def.BONUS_IND_UP:
case Def.BONUS_IND_CLIMBDOWN:
case Def.BONUS_IND_BOX:
if (m_actionOver)
{
setAction(m_actionIDNow, 0);
stopAction(true);
return;
}
}
if (!Player.m_prince.intersectColBox(this))
return;
switch (m_actionIDNow)
{
case Def.BONUS_POTION:
if (Player.m_prince.addHp())
m_flag[3] = false;
break;
case Def.BONUS_STRENGTH:
if (Player.m_prince.enableAbility(m_parameters[0]))
{
m_flag[3] = false;
drawMsg(m_parameters[1]);
}
break;
case Def.BONUS_NEXTLEVEL:
//if (Player.m_prince.m_actionIDNow <= Def.PRINCE_RUN)
// Player.m_prince.setAction(Def.PRINCE_HIDE, 1);
//else if (Player.m_prince.m_actionIDNow == Def.PRINCE_HIDE && Player.m_prince.m_actionOver)
Pop2MIDlet.m_ge.levelFinished(true);
break;
case Def.BONUS_CHECKPOINT_WAIT:
case Def.BONUS_CHECKPOINT2_WAIT:
if (Player.m_prince.m_showDirection == 0)
{
Player.m_prince.postMessage(Def.MSG_CHECKPOINT, this);
setAction(m_actionIDNow - Def.BONUS_CHECKPOINT_WAIT + Def.BONUS_CHECKPOINT, 1);
}
Player.m_prince.m_showDirection = Prince.SHOWDIRECTION_FRAMES;
break;
case Def.BONUS_MESSAGE:
if (GE.m_playHint == 0) return;
case Def.BONUS_WAIT:
if (Player.m_prince.m_actionIDNow > Def.PRINCE_RUN && Player.m_prince.m_actionIDNow != Def.PRINCE_LAND && Player.m_prince.m_phbBottom < Def.PHB_BOX)
{
Player.m_prince.setAction(Def.PRINCE_FALL, 1);
GE.resetKey();
Player.m_prince.m_vX = 0;
break;
}
case Def.BONUS_ACTIVATED:
if (m_actionIDNow == Def.BONUS_WAIT)
{
if (Player.m_prince.enableAbility(m_parameters[0]))
setAction(Def.BONUS_ACTIVATED, 0);
else
m_flag[3] = false;
}
else if (m_actionOver)
{
m_flag[3] = false;
drawMsg(m_parameters[1]);
}
break;
case Def.BONUS_IND_WALLING:
case Def.BONUS_IND_WALLJUMP:
case Def.BONUS_IND_ROLL:
if (Player.m_prince.ability[m_actionIDNow - Def.BONUS_IND_WALLING + Prince.CAN_WALLING] <= 0 ||
Player.m_prince.m_flag[0] != m_flag[0])
{
break;
}
case Def.BONUS_IND_JUMP:
case Def.BONUS_IND_UP:
case Def.BONUS_IND_CLIMBDOWN:
case Def.BONUS_IND_BOX:
if (GE.m_playHint == 0) break;
if (m_durNow < 0) m_durNow = 0;
break;
}
}
void aiRSword()
{
if(Player.m_prince.intersectAttackBox(this))
{
Player.m_prince.postMessage(Def.MSG_HURT, this);
}
}
void aiTreadle()
{
switch(m_actionIDNow)
{
case Def.TREADLE_WAIT:
if (Player.checkTreadleCollision(this))
{
setAction(Def.TREADLE_DOWN, 0);
if(Player.m_actors[m_parameters[0]] != null && Player.m_actors[m_parameters[0]].m_actionIDNow == Def.NAIL_WAIT)
{
Player.m_actors[m_parameters[0]].setAction(Def.NAIL_START, 1);
}
}
break;
case Def.TREADLE_DOWN:
if (!Player.checkTreadleCollision(this))
{
setAction(Def.TREADLE_WAIT, 0);
}
break;
}
}
void aiNail()
{
switch(m_actionIDNow)
{
case Def.NAIL_START:
if(m_actionOver)
{
setAction(Def.NAIL_FALLING, 1);
//GE.playSound(Def.SOUND_FALLING_MID, 1);
}
break;
case Def.NAIL_FALLING:
if(Player.m_prince.intersectAttackBox(this))
{
Player.m_prince.postMessage(Def.MSG_HURT, this);
}
if(m_phbBottom >= Def.PHB_SOLID)
{
setAction(Def.NAIL_SMASH, 1);
}
break;
case Def.NAIL_WAIT:
// no hurt on wait
m_posY = m_start2;
break;
case Def.NAIL_SMASH:
if(m_actionOver)
{
if(m_parameters[0] > 0)
{
m_posY = m_start2;
setAction(Def.NAIL_WAIT, 1);
m_phbBottom = Def.PHB_AIR;
}
else m_flag[3] = false;
}
break;
}
}
void aiGhost()
{
int py, speed;
switch(m_actionIDNow)
{
case Def.GHOST_SLEEP:
if(Math.abs(m_posX - Player.m_prince.m_posX) < (160 << 8) && Math.abs(m_posY - Player.m_prince.m_posY) < (90 << 8))
{
m_flag[2] = true;
setAction(Def.GHOST_APPEAR, 1);
setFlipX(m_posX > Player.m_prince.m_posX);
}
break;
case Def.GHOST_APPEAR:
if(m_actionOver)
{
setAction(Def.GHOST_MOVE, 1);
m_counter = 0;
}
break;
case Def.GHOST_MOVE:
case Def.GHOST_MOVE_FAST:
case Def.GHOST_HAPPY:
if (Player.m_focusEnemy == null)
Player.m_focusEnemy = this;
if (m_actionIDNow == Def.GHOST_MOVE)
{
speed = 0x300;
}
else // GHOST_MOVE_FAST
{
speed = 0x600;
}
if (m_actionIDNow == Def.GHOST_HAPPY)
{
if (m_flag[0])
{
m_posX -= speed;
}
else// if(m_posX < Player.m_prince.m_posX)
{
m_posX += speed;
}
//m_posY -= 0x0050;
if(m_actionOver)
{
setAction(Def.GHOST_MOVE, 1);
break;
}
}
else
{
setFlipX(m_posX > Player.m_prince.m_posX);
if(m_posX > Player.m_prince.m_posX)
{
m_posX -= speed;
}
else// if(m_posX < Player.m_prince.m_posX)
{
m_posX += speed;
}
py = Player.m_prince.m_posY + ((Player.m_prince.getColBox()[1] + Player.m_prince.getColBox()[3])<<7);
if(m_posY > py)
{
m_posY -= speed;
if (m_posY < py) m_posY = py;
}
else// if(m_posY < py)
{
m_posY += speed;
if (m_posY > py) m_posY = py;
}
}
if(Player.m_prince.intersectAttackBox(this))
{
Player.m_prince.postMessage(Def.MSG_HURT, this);
setAction(Def.GHOST_HAPPY, 1);
}
else if(intersectAttackBox(Player.m_prince))
{
if(--m_hp > 0)
{
setAction(Def.GHOST_HURT, 1);
}
else
{
// died
setAction(Def.GHOST_HIDE, 1);
if (Player.m_focusEnemy.equals(this))
Player.m_focusEnemy = null;
}
}
break;
case Def.GHOST_HURT:
speed = 0x400;
if(m_posX > Player.m_prince.m_posX)
{
m_posX += speed;
}
else// if(m_posX < Player.m_prince.m_posX)
{
m_posX -= speed;
}
py = Player.m_prince.m_posY + ((Player.m_prince.getColBox()[1] + Player.m_prince.getColBox()[3])<<7);
if(m_posY > py)
{
m_posY += speed/2;
}
else// if(m_posY < py)
{
m_posY -= speed/2;
}
if(m_actionOver)
{
setAction(Def.GHOST_MOVE_FAST, 1);
}
break;
case Def.GHOST_HIDE:
if(m_actionOver)
{
m_flag[2] = false;
m_flag[3] = false;
}
break;
}
}
boolean checkArrowSendBack()
{
Actor a = Player.checkDamage(this);
if (a == null) return false;
if (a.m_animID == Def.ID_PRINCE)
{
//setAction(Def.SANDMAN_ARROW_BACK, true);
setFlipX(a.m_posX > m_posX);
return false;
}
return true;
}
boolean checkSandmanDamage()
{
Actor a = Player.checkDamage(this);
if(a == null)return false;
switch(a.m_animID)
{
case Def.ID_SANDMAN:
if ((a.m_actionIDNow != Def.SANDMAN_ARROW /*&& a.m_actionIDNow != Def.SANDMAN_ARROW_BACK*/) || (a.m_posX > m_posX) ^ (a.m_vX < 0))
return false;
a.setAction(Def.SANDMAN_BROKEN, 1);
case Def.ID_PRINCE:
m_hp --;
break;
default:
m_hp = 0;
break;
}
if (m_actionIDNow < Def.SANDMAN_BM_GUARD)// || m_actionIDNow == Def.SANDMAN_HM_HURT)
{
if (m_hp <= 0)
{
m_counter = RECOVER_TIME;
setAction(Def.SANDMAN_HM_LYING, 1);
}
else
setAction(Def.SANDMAN_HM_HURT, 1);
}
else
{
if (m_hp <= 0)
{
m_counter = RECOVER_TIME;
setAction(Def.SANDMAN_BM_LYING, 1);
}
else
setAction(Def.SANDMAN_BM_HURT, 1);
}
return true;
}
boolean checkSandmanPrinceInVision()
{
if(m_posX > Player.m_prince.m_posX ^ m_flag[0]) return false;
return Math.abs(m_posX - Player.m_prince.m_posX) < ((Def.PF_WIDTH*5/6) << 8) && checkSandmanInRange();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -