//------------------------------------------------------------------------------ // ZZ> Spawn the chain particles every frame IfCrushed tmpx = selfx tmpy = selfy tmpdistance = selfz tmpargument = 2 SpawnExactParticle SpawnExactParticle SpawnExactParticle SpawnExactParticle GoPoof tmpargument = 4 SendMessageNear IfTargetIsSelf GetState Else // First figure out where to draw them // Chain link nearest to target, only move if out of range tmpargument = 3 GetXY tmpx = targetx - tmpx tmpy = targety - tmpy tmpdistance = xydistance tmpturn = 128 IfDistanceIsMoreThanTurn tmpdistance = 128 tmpx = tmpx * tmpdistance > 7 tmpy = tmpy * tmpdistance > 7 AddXY tmpargument = 2 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 3 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 256 IfDistanceIsMoreThanTurn tmpdistance = 256 tmpx = tmpx * tmpdistance > 8 tmpy = tmpy * tmpdistance > 8 AddXY // Next one tmpargument = 3 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 2 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 128 IfDistanceIsMoreThanTurn tmpdistance = 128 tmpx = tmpx * tmpdistance > 7 tmpy = tmpy * tmpdistance > 7 AddXY tmpargument = 1 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 2 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 256 IfDistanceIsMoreThanTurn tmpdistance = 256 tmpx = tmpx * tmpdistance > 8 tmpy = tmpy * tmpdistance > 8 AddXY // Next one tmpargument = 2 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 1 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 128 IfDistanceIsMoreThanTurn tmpdistance = 128 tmpx = tmpx * tmpdistance > 7 tmpy = tmpy * tmpdistance > 7 AddXY tmpargument = 0 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 1 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 256 IfDistanceIsMoreThanTurn tmpdistance = 256 tmpx = tmpx * tmpdistance > 8 tmpy = tmpy * tmpdistance > 8 AddXY // Link nearest to ball tmpargument = 1 GetXY tmpdistance = tmpx tmpturn = tmpy tmpargument = 0 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 128 IfDistanceIsMoreThanTurn tmpdistance = 128 tmpx = tmpx * tmpdistance > 7 tmpy = tmpy * tmpdistance > 7 AddXY tmpx = selfx tmpy = selfy tmpdistance = tmpx tmpturn = tmpy tmpargument = 0 GetXY tmpx = tmpdistance - tmpx tmpy = tmpturn - tmpy tmpdistance = xydistance tmpturn = 256 IfDistanceIsMoreThanTurn tmpdistance = 256 tmpx = tmpx * tmpdistance > 8 tmpy = tmpy * tmpdistance > 8 AddXY // Don't allow jumping tmpx = targetz tmpy = selfz + 60 IfXIsMoreThanY StopTargetMovement // Now check for pulled chain tmpx = targetx - selfx tmpy = targety - selfy tmpdistance = xydistance tmpturn = 180 IfDistanceIsMoreThanTurn tmpturn = 225 IfDistanceIsMoreThanTurn tmpx = targetx tmpy = targety Teleport Else tmpx = selfx - targetx > 6 tmpy = selfy - targety > 6 SetTargetToLowestTarget AccelerateTarget SetTargetToSelf SetTargetToLowestTarget tmpx = 0 - tmpx > 1 tmpy = 0 - tmpy > 1 IfTargetIsSelf IfTimeOut tmpargument = 1 tmpdistance = rand & 2047 + 10000 PlaySound tmpargument = rand & 7 + 18 SetTime AccelerateTarget SetTargetToOldTarget // Check for a crushed ball tmpturn = 0 IfCrushed tmpturn = 1 // Now draw them all tmpargument = 3 GetXY tmpargument = tmpturn tmpdistance = targetaltitude > 1 tmpdistance = targetz - tmpdistance SpawnExactParticle tmpdistance = 0 tmpargument = 2 GetXY tmpargument = tmpturn SpawnExactParticle tmpargument = 1 GetXY tmpargument = tmpturn SpawnExactParticle tmpargument = 0 GetXY tmpargument = tmpturn tmpdistance = selfaltitude > 1 tmpdistance = selfz - tmpdistance SpawnExactParticle //------------------------------------------------------------------------------ // ZZ> This function... Does stuff IfSpawned // Make it able to be crushed in doors MakeCrushValid // tmpargument = 15 SetTime IfStateIs0 // Drop it when first appearing IfTimeOut tmpargument = 1 SetState DetachFromHolder IfDropped UndoEnchant IfUsed tmpargument = 50 SetReloadTime IfHitGround // Make a sound tmpargument = 0 // tmpdistance = rand & 2047 + 10000 // PlaySound // IfNotPutAway // Say oops tmpargument = 5 // SendMessageNear // IfGrabbed // Tell them what they've won... IfTargetIsSelf // tmpx = selfx // Clear out the storage values tmpy = selfy // tmpargument = 0 // SetXY // tmpargument = 1 // SetXY // tmpargument = 2 // SetXY // tmpargument = 3 // SetXY // SetTargetToWhoeverIsHolding // IfTargetIsAPlayer // tmpargument = 0 // SendMessageNear // Else // SetTargetToWhoeverIsHolding // IfTargetIsOldTarget // tmpargument = 1 // Else // SetTargetToOldTarget // tmpargument = 2 // SendMessageNear // EnchantTarget End // All done