//------------------------------------------------------------------------------ // Each hand has a spell usage list, which is stored in content. 8 bits // for each hand, bits 0-7 for left, 8-15 for right. // Bit 7 - 1 is useable, 0 is unuseable // Bit 6 - 1 is one shot, 0 is unlimited uses // Bit 5 - 1 is need a [HUMA] corpse, 0 is use anytime // Bit 4 - \Charge time // Bit 3 - / // Bit 2 - \ // Bit 1 - Range // Bit 0 - / //------------------------------------------------------------------------------ // ZZ> Handle death by sending a message and other stuff IfKilled tmpargument = 2 tmpdistance = rand & 1023 + 10000 PlaySound // Send messages IfTargetIsOnHatedTeam tmpargument = 0 Else tmpargument = 1 SendMessageNear // Drop goodies tmpargument = 65535 DropMoney // Make the character body tmpargument = 45 SetBumpHeight // Award quest experience tmpargument = 100 tmpdistance = EXPQUEST GiveExperienceToTargetTeam // Finish it up BeatModule EnableExport // Mark this module as beaten, hidden modules may open up tmpargument = [BEAT] AddIDSZ // Fix the end text ClearEndMessage tmpargument = 3 AddEndMessage // Order team to die tmpdistance = [EVIL] tmpargument = [UNDO] OrderSpecialID // Put out the eyes DisaffirmCharacter //------------------------------------------------------------------------------ // ZZ> Oops IfHealed tmpargument = 2 SendMessageNear //------------------------------------------------------------------------------ // ZZ> Keep 'em guessin' IfAttacked tmpargument = rand & 1 tmpdistance = rand & 1023 + 10000 PlaySound SetTargetToWhoeverAttacked IfTargetIsOnHatedTeam GetState Else SetTargetToOldTarget IfStateIs1 GetState Else IfStateIs2 GetState Else // Teleport away... tmpargument = 1 SetState tmpargument = 20 SetTime //------------------------------------------------------------------------------ IfBumped IfStateIs1 GetState Else IfStateIs2 GetState Else // Teleport away... tmpargument = 1 SetState tmpargument = 0 SetTime //------------------------------------------------------------------------------ // ZZ> For charging a spell... IfStateIs10 // Left hand IfTimeOut // Release the spell? tmpx = targetdistance - 128 GetContent tmpy = tmpargument & 7 < 7 IfXIsLessThanY // Distance is good... tmpx = selfmana tmpy = 256 IfXIsMoreThanY // Is it one use? tmpy = 64 tmpx = tmpargument & tmpy IfXIsEqualToY tmpargument = tmpargument + 128 SetContent tmpargument = 0 SetState Else // Get more mana first tmpargument = LATCHLEFT PressLatchButton Else // Get closer first tmpargument = LATCHLEFT PressLatchButton tmpx = targetx - selfx > 1 + selfx tmpy = targety - selfy > 1 + selfy ClearWaypoints AddWaypoint tmpargument = 10 SetTime Else // Keep charging tmpargument = LATCHLEFT PressLatchButton tmpx = targetx - selfx > 1 + selfx tmpy = targety - selfy > 1 + selfy ClearWaypoints AddWaypoint IfStateIs11 // Right hand IfTimeOut // Release the spell? tmpx = targetdistance - 128 GetContent tmpy = tmpargument & 1792 > 1 IfXIsLessThanY // Distance is good... tmpx = selfmana tmpy = 256 IfXIsMoreThanY // Is it one use? tmpy = 16384 tmpx = tmpargument & tmpy IfXIsEqualToY tmpargument = tmpargument + 32768 SetContent tmpargument = 0 SetState Else // Get more mana first tmpargument = LATCHRIGHT PressLatchButton Else // Get closer first tmpargument = LATCHRIGHT PressLatchButton tmpx = targetx - selfx > 1 + selfx tmpy = targety - selfy > 1 + selfy ClearWaypoints AddWaypoint tmpargument = 10 SetTime Else // Keep charging tmpargument = LATCHRIGHT PressLatchButton tmpx = targetx - selfx > 1 + selfx tmpy = targety - selfy > 1 + selfy ClearWaypoints AddWaypoint //------------------------------------------------------------------------------ // ZZ> Find something to do... IfTimeOut CleanUp IfStateIs15 // Fall through to normal state tmpargument = 0 SetState IfStateIs13 // Un-charged spell in right hand... IfTargetIsOnHatedTeam tmpx = targetdistance - 128 GetContent tmpy = tmpargument & 1792 > 1 IfXIsLessThanY // Distance is good... IfFacingTarget tmpargument = LATCHRIGHT PressLatchButton tmpargument = 15 SetState tmpargument = rand & 15 + 20 SetTime Else tmpargument = 0 SetState IfStateIs12 IfTargetIsOnHatedTeam // Un-charged spell in left hand... tmpx = targetdistance - 128 GetContent tmpy = tmpargument & 7 < 7 IfXIsLessThanY // Distance is good... IfFacingTarget tmpargument = LATCHLEFT PressLatchButton tmpargument = 15 SetState tmpargument = rand & 15 + 20 SetTime Else tmpargument = 0 SetState IfStateIs3 // Pick a spell to use on the enemy... Left or right IfTargetIsOnHatedTeam GetContent tmpx = tmpargument & 32896 tmpy = 0 IfXIsEqualToY // Neither hand is useable... Fall through to state 1 tmpargument = 1 SetState Else tmpy = 32896 IfXIsEqualToY // Both hands are useable, so pick one... 0 or 8 tmpx = rand & 8 Else // Figure out if it's left or right... 0 or 8 tmpx = tmpx > 12 tmpy = 0 tmpturn = 11 // Right hand state IfXIsEqualToY tmpturn = 10 // Left hand state tmpargument = tmpargument > tmpx & 127 tmpy = 32 tmpx = tmpargument & tmpy IfXIsEqualToY // We need a [HUMA] corpse around... tmpx = tmpargument // Save it... tmpargument = [HUMA] tmpdistance = 7 // Dead friends and enemies... SetTargetToNearestBlahID tmpargument = tmpx & 24 < 4 SetTime tmpargument = tmpturn SetState Else // Drop back to normal state tmpargument = 0 SetState Else // Just set the state and time... tmpargument = tmpargument & 24 < 4 SetTime tmpx = tmpargument tmpy = 0 IfXIsEqualToY // Use states 12 and 13 for uncharged spells... tmpturn = tmpturn + 2 tmpargument = tmpturn SetState IfStateIs2 // Halfway through a teleport tmpargument = rand & 15 + 35 SetTime tmpx = rand & 511 - 256 + selfx tmpy = rand & 511 - 256 + selfy Teleport tmpx = rand & 511 - 256 + selfx tmpy = rand & 511 - 256 + selfy Teleport tmpargument = 15 SetState // Face the target tmpx = targetx tmpy = targety ClearWaypoints AddWaypoint IfStateIs1 // Want to start a teleport tmpargument = ACTIONMJ DoAction tmpargument = 2 SetState tmpargument = 40 // Don't let 'em get hit out of it... SetDamageTime tmpargument = 16 SetTime Else // Try again in a bit... tmpargument = 5 SetTime IfStateIs0 tmpargument = 20 SetTime tmpx = rand & 255 tmpy = 200 IfXIsMoreThanY // Teleport... tmpargument = 1 SetState SetTime Else // Go after enemies SetTargetToNearestEnemy tmpargument = rand & 7 + 4 SetTime tmpargument = 3 SetState tmpx = targetx tmpy = targety Else // Wander around tmpargument = rand & 15 + 25 SetTime tmpx = rand & 511 - 256 + selfspawnx tmpy = rand & 511 - 256 + selfspawny ClearWaypoints AddWaypoint //------------------------------------------------------------------------------ // ZZ> Put on some eyes IfSpawned tmpargument = 6 tmpdistance = 9 SpawnAttachedParticle tmpdistance = 10 SpawnAttachedParticle //------------------------------------------------------------------------------ End //------------------------------------------------------------------------------