home *** CD-ROM | disk | FTP | other *** search
Wrap
property pPatroling, pPointX1, pPointX2, pPointY1, pPointY2, pTowardsPoint1, pDirection, pMovementSpeed, pFrameNumber, pAnimationSpeed, pEnemyAlert, pPositionX, pPositionY, pEnemyChannel, pDestDirection, pAlertTime, pInalertTime, pYDelta, pXDelta, pDefaultSpeed, pMaxFrameNumer, pCharacterName, pDoDeath, pEnemySearch global gMapChannel, gCurrentLevel on new me, enemyDirection, enemySpeed, animationSpeed, posX, posY, spriteName, enemyChannel pTowardsPoint1 = 1 pEnemySearch = 1 pDoDeath = 0 pPatroling = 0 pCharacterName = spriteName pMaxFrameNumer = 4 pYDelta = 0 pXDelta = 0 pAlertTime = 0 pInalertTime = 0 pDirection = enemyDirection pMovementSpeed = enemySpeed pAnimationSpeed = animationSpeed pEnemyChannel = enemyChannel pEnemyAlert = 0 pPositionX = posX pPositionY = posY pFrameNumber = 1 sprite(pEnemyChannel).puppet = 1 case pDirection of 1: sprite(pEnemyChannel).member = pCharacterName & "_up_1" 2: sprite(pEnemyChannel).member = pCharacterName & "_right_1" 3: sprite(pEnemyChannel).member = pCharacterName & "_down_1" 4: sprite(pEnemyChannel).member = pCharacterName & "_left_1" end case sprite(pEnemyChannel).locH = pPositionX sprite(pEnemyChannel).locV = pPositionY sprite(pEnemyChannel).backColor = 6 sprite(pEnemyChannel).ink = 36 return me end on setIntelligence enemySearch pEnemySearch = enemySearch end on getEnemyChannel me return pEnemyChannel end on moveEnemy me case pDirection of 1: pPositionY = pPositionY - pMovementSpeed pYDelta = pYDelta + pMovementSpeed 2: pPositionX = pPositionX + pMovementSpeed pXDelta = pXDelta + pMovementSpeed 3: pPositionY = pPositionY + pMovementSpeed pYDelta = pYDelta + pMovementSpeed 4: pPositionX = pPositionX - pMovementSpeed pXDelta = pXDelta + pMovementSpeed end case sprite(pEnemyChannel).loc = point(pPositionX, pPositionY) updateStage() stringLength = length(string(member(sprite(pEnemyChannel).member).name)) currFrame = chars(string(member(sprite(pEnemyChannel).member).name), stringLength, stringLength) currFrame = integer(currFrame) + 1 if currFrame > pMaxFrameNumer then currFrame = 1 end if sprite(pEnemyChannel).member = chars(string(member(sprite(pEnemyChannel).member).name), 1, stringLength - 1) & string(currFrame) if pPositionY > 410 then pPositionY = -20 end if if pPositionY < -20 then pPositionY = 410 end if if pPositionX > 590 then pPositionX = -20 end if if pPositionX < -20 then pPositionX = 590 end if if sprite(pEnemyChannel).intersects(7) = 1 then case pDirection of 1: pPositionY = pPositionY + pMovementSpeed pYDelta = pYDelta - pMovementSpeed 2: pPositionX = pPositionX - pMovementSpeed pXDelta = pXDelta - pMovementSpeed 3: pPositionY = pPositionY - pMovementSpeed pYDelta = pXDelta - pMovementSpeed 4: pPositionX = pPositionX + pMovementSpeed pXDelta = pXDelta - pMovementSpeed end case sprite(pEnemyChannel).loc = point(pPositionX, pPositionY) end if if sprite(pEnemyChannel).intersects(7) = 1 then switchDirection() end if if (pXDelta > 40) or (pYDelta > 40) then pXDelta = 0 pYDelta = 0 if (pEnemyAlert = 0) and (pInalertTime > 100) and (pEnemySearch = 1) then seekAnt() if pEnemyAlert = 1 then pInalertTime = 0 end if end if end if if pEnemyAlert = 1 then pPatroling = 0 chaseAnt(me, sprite(8).locH, sprite(8).locV) end if if pPatroling = 1 then doPatroleStuff() end if if pEnemyAlert = 1 then pAlertTime = pAlertTime + 1 end if if pEnemyAlert = 0 then pInalertTime = pInalertTime + 1 end if if pAlertTime > 500 then pEnemyAlert = 0 pAlertTime = 0 end if end on setEnemyPosition me, posX, posY pPositionX = posX pPositionY = posY sprite(pEnemyChannel).locH = pPositionX sprite(pEnemyChannel).locV = pPositionY end on getEnemyPositionX me return pPositionX end on getEnemyPositionY me return pPositionY end on setEnemyDirection me, enemyDirection if pDirection = enemyDirection then exit end if pDirection = enemyDirection case pDirection of 1: sprite(pEnemyChannel).member = pCharacterName & "_up_1" 2: sprite(pEnemyChannel).member = pCharacterName & "_right_1" 3: sprite(pEnemyChannel).member = pCharacterName & "_down_1" 4: sprite(pEnemyChannel).member = pCharacterName & "_left_1" end case end on getEnemyDirection me return pDirection end on switchDirection me sprite(12).loc = sprite(pEnemyChannel).loc case pDirection of 1: if random(2) = 1 then sprite(12).locH = sprite(12).locH + 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locH = sprite(12).locH - 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 3 else directionNum = 4 end if else directionNum = 2 end if else sprite(12).locH = sprite(12).locH - 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locH = sprite(12).locH + 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 3 else directionNum = 2 end if else directionNum = 4 end if end if 2: if random(2) = 1 then sprite(12).locV = sprite(12).locV + 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locV = sprite(12).locV - 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 4 else directionNum = 1 end if else directionNum = 3 end if else sprite(12).locV = sprite(12).locV - 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locV = sprite(12).locV + 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 4 else directionNum = 3 end if else directionNum = 1 end if end if 3: if random(2) = 1 then sprite(12).locH = sprite(12).locH + 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locH = sprite(12).locH - 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 1 else directionNum = 4 end if else directionNum = 2 end if else sprite(12).locH = sprite(12).locH - 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locH = sprite(12).locH + 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 1 else directionNum = 2 end if else directionNum = 4 end if end if 4: if random(2) = 1 then sprite(12).locV = sprite(12).locV + 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locV = sprite(12).locV - 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 2 else directionNum = 1 end if else directionNum = 3 end if else sprite(12).locV = sprite(12).locV - 10 updateStage() if sprite(12).intersects(7) = 1 then sprite(12).loc = sprite(pEnemyChannel).loc sprite(12).locV = sprite(12).locV + 10 updateStage() if sprite(12).intersects(7) = 1 then directionNum = 2 else directionNum = 3 end if else directionNum = 1 end if end if end case setEnemyDirection(me, directionNum) end on seekAnt me antX = sprite(8).locH antY = sprite(8).locV sprite(10).loc = sprite(pEnemyChannel).loc sprite(11).loc = sprite(pEnemyChannel).loc bool = 0 if (pPositionX < (antX + 20)) and (pPositionX > (antX - 20)) then if pPositionY > antY then repeat while bool = 0 sprite(10).locV = sprite(10).locV - 20 updateStage() if sprite(10).intersects(7) = 1 then bool = 1 next repeat end if if sprite(10).intersects(8) = 1 then pEnemyAlert = 1 bool = 1 end if end repeat else repeat while bool = 0 sprite(10).locV = sprite(10).locV + 20 updateStage() if sprite(10).intersects(7) = 1 then bool = 1 next repeat end if if sprite(10).intersects(8) = 1 then pEnemyAlert = 1 bool = 1 end if end repeat end if end if sprite(10).loc = sprite(pEnemyChannel).loc sprite(11).loc = sprite(pEnemyChannel).loc bool = 0 if (pPositionY < (antY + 20)) and (pPositionY > (antY - 20)) then if pPositionX > antX then repeat while bool = 0 sprite(11).locH = sprite(11).locH - 20 updateStage() if sprite(11).intersects(7) = 1 then bool = 1 next repeat end if if sprite(11).intersects(8) = 1 then pEnemyAlert = 1 bool = 1 end if end repeat else repeat while bool = 0 sprite(11).locH = sprite(11).locH + 20 updateStage() if sprite(11).intersects(7) = 1 then bool = 1 next repeat end if if sprite(11).intersects(8) = 1 then pEnemyAlert = 1 bool = 1 end if end repeat end if end if if pEnemyAlert = 1 then pMovementSpeed = pDefaultSpeed + 1 end if end on chaseAnt me, antX, antY if (pEnemyAlert = 1) or (pPatroling = 1) then if (pDirection = 1) or (pDirection = 3) then if pPositionX > antX then pDestDirection = 4 else pDestDirection = 2 end if if (pPositionX > (antX - 10)) and (pPositionX < (antX + 10)) then if pPositionY > antY then pDestDirection = 1 else pDestDirection = 3 end if end if else if pPositionY > antY then pDestDirection = 1 else pDestDirection = 3 end if if (pPositionY > (antY - 10)) and (pPositionY < (antY + 10)) then if pPositionX > antX then pDestDirection = 4 else pDestDirection = 2 end if end if end if sprite(12).loc = sprite(pEnemyChannel).loc case pDestDirection of 1: sprite(12).locV = sprite(12).locV - 30 updateStage() if sprite(12).intersects(7) = 0 then setEnemyDirection(me, 1) end if 2: sprite(12).locH = sprite(12).locH + 30 updateStage() if sprite(12).intersects(7) = 0 then setEnemyDirection(me, 2) end if 3: sprite(12).locV = sprite(12).locV + 30 updateStage() if sprite(12).intersects(7) = 0 then setEnemyDirection(me, 3) end if 4: sprite(12).locH = sprite(12).locH - 30 updateStage() if sprite(12).intersects(7) = 0 then setEnemyDirection(me, 4) end if end case end if end on setEnemyInalert me pEnemyAlert = 0 pMovementSpeed = pDefaultSpeed end on doDeathAnimation me if sprite(pEnemyChannel).blend < 5 then if gCurrentLevel >= 4 then go(24) else go(44) exit end if end if sprite(pEnemyChannel).blend = sprite(pEnemyChannel).blend - 2 end on setPatrolePoints me, x1, y1, x2, y2 pPatroling = 1 pPointX1 = x1 pPointX2 = x2 pPointY1 = y1 pPointY2 = y2 end on disablePatrole me pPatroling = 0 end on doPatroleStuff me if pPatroling = 0 then exit end if if pTowardsPoint1 = 1 then chaseAnt(me, pPointX1, pPointY1) if (sprite(pEnemyChannel).locH < (pPointX1 + 25)) and (sprite(pEnemyChannel).locH > (pPointX1 - 25)) and (sprite(pEnemyChannel).locV < (pPointY1 + 25)) and (sprite(pEnemyChannel).locV > (pPointY1 - 25)) then pTowardsPoint1 = 0 end if else chaseAnt(me, pPointX2, pPointY2) if (sprite(pEnemyChannel).locH < (pPointX2 + 25)) and (sprite(pEnemyChannel).locH > (pPointX2 - 25)) and (sprite(pEnemyChannel).locV < (pPointY2 + 25)) and (sprite(pEnemyChannel).locV > (pPointY2 - 25)) then pTowardsPoint1 = 1 end if end if end