// Create the character IfSpawned IfStateIs0 // It's an imported spell in hand KeepAction Else // Zombi speed based on state MakeNameUnknown SetTargetToSelf NotAnItem tmpx = selfstate SpawnPoof IfStateIs1 tmpargument = 0 - 1500 GiveLifeToTarget tmpargument = 25 IfStateIs2 tmpargument = 0 - 700 GiveLifeToTarget tmpargument = 50 IfStateIs3 tmpargument = 100 SetSpeedPercent tmpargument = 50 SetTime IfChanged // It's a spell in hand tmpargument = 0 SetState KeepAction // Monster AI IfStateIs0 GetState // NOP Else // Character screams IfAttacked tmpargument = 3 tmpdistance = rand & 2047 + 10000 PlaySound // Character death IfKilled // Make the character body tmpargument = 45 SetBumpHeight // Tell everyone it died tmpargument = 4 tmpdistance = rand & 2047 + 10000 PlaySound tmpargument = 0 IfTargetIsOnSameTeam tmpargument = 1 IfTargetIsSelf tmpargument = 2 SendMessageNear // Do different Zombi AI's IfStateIs1 // Stupid AI IfTimeOut // Movement tmpx = rand & 511 + ownerx - 256 tmpy = rand & 511 + ownery - 256 ClearWaypoints AddWaypoint // Reset the timer tmpargument = 200 SetTime tmpargument = rand & 1 + 1 tmpdistance = rand & 2047 + 10000 PlaySound IfBumped // Attack anyone tmpargument = rand & 2 + ACTIONBA DoAction // Couldn't use latches... IfStateIs2 // Middle level AI IfTimeOut // Movement SetTargetToWideEnemy // Actively look for enemies tmpx = targetdistance tmpy = 600 IfXIsLessThanY // Attack the enemy? tmpy = 100 IfXIsLessThanY // Swing left or right tmpargument = rand & 2 + ACTIONBA DoAction // Couldn't use latches... tmpargument = rand & 1 + 1 tmpdistance = rand & 2047 + 10000 PlaySound // Chase the enemy tmpx = targetx tmpy = targety Else tmpx = rand & 511 + ownerx - 256 tmpy = rand & 511 + ownery - 256 Else tmpx = rand & 511 + ownerx - 256 tmpy = rand & 511 + ownery - 256 ClearWaypoints AddWaypoint // Reset the timer tmpargument = 100 SetTime IfStateIs3 // Bad boy AI IfTimeOut // Mana drips tmpx = selfx tmpy = selfy tmpdistance = selfz tmpargument = 3 SpawnExactParticle // Movement tmpx = ownerx tmpy = ownery SetTargetToNearestFriend tmpturn = targetturnto + 32768 tmpdistance = 100 Compass // Save the values for X and Y... tmpargument = 0 SetXY tmpx = ownerdistance tmpy = 500 IfXIsLessThanY SetTargetToNearestEnemy // Attack the enemy? SetTurnModeToWatchTarget tmpx = targetdistance tmpy = 140 IfXIsLessThanY IfFacingTarget // Check for good weapons IfHoldingMeleeWeapon tmpargument = [MACE] IfHoldingItemID // Bash already tmpargument = tmpargument - 1 < 1 + ACTIONBB Else tmpargument = [HAMM] IfHoldingItemID // Bash already tmpargument = tmpargument - 1 < 1 + ACTIONBB Else tmpargument = [AXEE] IfHoldingItemID // Bash already tmpargument = tmpargument - 1 < 1 + ACTIONBB Else tmpargument = [CLAW] IfHoldingItemID // Bash already tmpargument = tmpargument - 1 < 1 + ACTIONBB Else // Hmmm... Not holding a good weapon, so better drop it DropWeapons tmpargument = rand & 2 + ACTIONBB Else // Swing left or right tmpargument = rand & 2 + ACTIONBB DoAction // Couldn't use latches... tmpargument = rand & 1 + 1 tmpdistance = rand & 2047 + 10000 PlaySound // Chase the enemy tmpargument = 0 GetXY // Restore the saved values... tmpturn = targetturnto tmpdistance = 600 Compass Else SetTurnModeToVelocity // Try finding an item... IfHoldingMeleeWeapon // Already have one, so run after owner SetTargetToOwner tmpx = targetdistance tmpy = 300 IfXIsMoreThanY tmpx = targetx tmpy = targety tmpturn = targetturnto tmpdistance = 600 Compass Else tmpargument = 0 GetXY Else // Find a good weapon... Hammers, Maces, Axes, and Claws tmpargument = [HAMM] tmpdistance = BLAHITEMS tmpx = 0 SetTargetToNearestBlahID tmpx = 1 Else tmpargument = [MACE] SetTargetToNearestBlahID tmpx = 1 Else tmpargument = [AXEE] SetTargetToNearestBlahID tmpx = 1 Else tmpargument = [CLAW] SetTargetToNearestBlahID tmpx = 1 tmpy = 1 IfXIsEqualToY tmpx = targetdistance tmpy = 50 IfXIsLessThanY tmpargument = rand & 1 + ACTIONME DoAction tmpx = targetx tmpy = targety tmpturn = targetturnto tmpdistance = 100 Compass Else // Couldn't find any items, so run after owner tmpargument = 0 GetXY Else // Catch up to owner tmpargument = 0 GetXY ClearWaypoints AddWaypoint // Reset the timer tmpargument = 10 SetTime // Spell AI IfStateIs0 // Remove the charge IfTakenOut tmpargument = 0 SetContent SetTargetToWhoeverIsHolding IfTargetIsAPlayer tmpargument = 5 IfNameIsKnown tmpargument = 6 SendMessageNear // Allow it to be used IfUsed SetTargetToWhoeverIsHolding tmpargument = [WMAG] IfTargetHasSkillID GetContent tmpx = tmpargument tmpy = 768 IfXIsLessThanY tmpy = targetmanaflow IfXIsLessThanY tmpx = 4 tmpargument = tmpx CostTargetMana GetContent tmpargument = tmpargument + tmpx SetContent tmpx = targetx tmpy = targety tmpdistance = targetz tmpargument = 4 SpawnExactParticle // Put particles around the target tmpargument = [HUMA] tmpdistance = 7 // Dead Friends and Enemies... SetTargetToNearestBlahID tmpx = targetx tmpy = targety tmpdistance = targetz tmpargument = 4 SpawnExactParticle Else GetContent tmpx = tmpargument tmpy = 255 IfXIsMoreThanY // Make the holder cast it SetTargetToWhoeverIsHolding tmpargument = ACTIONMC // MC because ZA/ZC spawns an attack... ZA03AL TargetDoAction // Find a dead humanoid tmpargument = [HUMA] tmpdistance = 7 // Dead friends or enemies... SetTargetToNearestBlahID // Poof that target ( players can't be ) MakeNameKnown MakeUsageKnown tmpx = targetx tmpy = targety tmpturn = targetturn tmpdistance = targetz PoofTarget // Replace the target with a Zombi SetTargetToWhoeverIsHolding SetOwnerToTarget SpawnCharacterXYZ EnchantChild // Set the drain GetContent tmpargument = 0 - tmpargument > 3 tmpdistance = 0 tmpx = 0 tmpy = 0 SetEnchantBoostValues // Set the Zombi type GetContent tmpargument = tmpargument > 8 // State of new Zombi, 0 to 3 SetChildState tmpargument = ACTIONMD ChildDoActionOverride tmpargument = 0 tmpdistance = 22050 PlaySound tmpargument = 20 SetReloadTime Else // Couldn't poof it tmpargument = 3 SendMessageNear Else // Couldn't find a body tmpargument = 4 SendMessageNear Else tmpy = 0 IfXIsMoreThanY // Didn't pump it enough tmpargument = 4 SendMessageNear // Reset the charge counter tmpargument = 0 SetContent // Return to spellbook, Do last! IfDropped tmpargument = 0 SetContent BecomeSpellbook DisaffirmCharacter tmpargument = ACTIONJB DoAction KeepAction End