home *** CD-ROM | disk | FTP | other *** search
/ Enter 2003: The Beautiful Scenery / enter-parhaat-2003.iso / files / frendz.exe / frendz.dcr / Scripts_51_Animation.ls < prev    next >
Encoding:
Text File  |  2002-12-31  |  7.5 KB  |  300 lines

  1. global gpvTokenBaseCast, gpvTokenAnimateIndex, gpvTokenSpriteNum, gpvTokenActive, gpvTotalTokens, gpvSequenceToken, gpvSequenceNum, gpvSequenceCur, gpvSequenceReps, gpvSequenceTime, gpvNumSequences, gpvSequenceRecords, gpvSequenceNames, gpvSequenceCallback, gpvSequenceSound, gpvSequenceSoundWhen, MAX_TOKEN_SEQUENCES
  2.  
  3. on pvResetTokenIndex n
  4.   gpvSequenceToken[n] = -1
  5. end
  6.  
  7. on pvDeleteSequenceIndex n
  8.   gpvSequenceToken[n] = -1
  9.   if gpvNumSequences = n then
  10.     gpvNumSequences = gpvNumSequences - 1
  11.   end if
  12. end
  13.  
  14. on pvDeleteSequence tokenNum
  15.   n = findSequenceIndex(tokenNum)
  16.   if n <> -1 then
  17.     pvDeleteSequenceIndex(n)
  18.   end if
  19.   pvSetTokenIndex(tokenNum, 0, 0)
  20. end
  21.  
  22. on pvDeleteSpecificSequence tokenNum, sequenceName
  23.   n = findSequenceIndex(tokenNum)
  24.   if n <> -1 then
  25.     seqNum = getPos(gpvSequenceNames, sequenceName)
  26.     if seqNum = gpvSequenceNum[n] then
  27.       pvDeleteSequence(tokenNum)
  28.     end if
  29.   end if
  30. end
  31.  
  32. on pvDeleteSequencePriority tokenNum, thePriority
  33.   n = findSequenceIndex(tokenNum)
  34.   if n <> -1 then
  35.     curSeqNum = gpvSequenceNum[n]
  36.     curPriority = getProp(gpvSequenceRecords[curSeqNum], #sPriority)
  37.     if curPriority <= thePriority then
  38.       pvDeleteSequence(tokenNum)
  39.     end if
  40.   end if
  41. end
  42.  
  43. on findSequenceIndex tokenNum
  44.   n = getPos(gpvSequenceToken, tokenNum)
  45.   if (n = 0) or (n > gpvNumSequences) then
  46.     n = -1
  47.   end if
  48.   return n
  49. end
  50.  
  51. on pvAdvanceSequence curTime, n
  52.   seqNum = gpvSequenceNum[n]
  53.   cur = gpvSequenceCur[n]
  54.   expired = 0
  55.   maxRecs = getProp(gpvSequenceRecords[seqNum], #sNumRecs)
  56.   tokenNum = gpvSequenceToken[n]
  57.   if cur = maxRecs then
  58.     reps = gpvSequenceReps[n]
  59.     if reps <> 1 then
  60.       if reps > 1 then
  61.         gpvSequenceReps[n] = reps - 1
  62.       end if
  63.       cur = 0
  64.     end if
  65.   end if
  66.   if cur < maxRecs then
  67.     cur = cur + 1
  68.     gpvSequenceCur[n] = cur
  69.     theSeqRec = gpvSequenceRecords[seqNum]
  70.     castList = getProp(theSeqRec, #sCasts)
  71.     dxList = getProp(theSeqRec, #sDx)
  72.     dyList = getProp(theSeqRec, #sDy)
  73.     timesList = getProp(theSeqRec, #sTimes)
  74.     dx = dxList[cur]
  75.     dy = dyList[cur]
  76.     if expired = 0 then
  77.       pvSetTokenIndex(tokenNum, castList[cur])
  78.       pvMoveTokenDelta(tokenNum, dx, dy)
  79.       gpvSequenceTime[n] = curTime + timesList[cur]
  80.       if gpvSequenceSoundWhen[n] = cur then
  81.         if gpvSequenceSound[n] <> EMPTY then
  82.           playSoundFreeChannel(gpvSequenceSound[n])
  83.         end if
  84.       end if
  85.     end if
  86.   else
  87.     expired = 1
  88.   end if
  89.   return expired
  90. end
  91.  
  92. on pvPlaySequences curTime
  93.   repeat with i = 1 to gpvNumSequences
  94.     tokenNum = gpvSequenceToken[i]
  95.     if tokenNum <> -1 then
  96.       if curTime >= gpvSequenceTime[i] then
  97.         if pvAdvanceSequence(curTime, i) = 1 then
  98.           seqNum = gpvSequenceNum[i]
  99.           callback = gpvSequenceCallback[i]
  100.           pvDeleteSequenceIndex(i)
  101.           if callback <> #none then
  102.             case callback of
  103.             end case
  104.           end if
  105.         end if
  106.       end if
  107.     end if
  108.   end repeat
  109. end
  110.  
  111. on pvIsCurrentSequence tokenNum
  112.   retcode = #none
  113.   n = findSequenceIndex(tokenNum)
  114.   if n <> -1 then
  115.     retcode = gpvSequenceNames[gpvSequenceNum[n]]
  116.   end if
  117.   return retcode
  118. end
  119.  
  120. on pvSetSequence tokenNum, sequenceName, alwaysOverride, soundToPlay, playSoundWhichIndex
  121.   if alwaysOverride = VOID then
  122.     alwaysOverride = 0
  123.   end if
  124.   if soundToPlay = VOID then
  125.     soundToPlay = EMPTY
  126.   end if
  127.   if playSoundWhichIndex = VOID then
  128.     playSoundWhichIndex = -1
  129.   end if
  130.   if alwaysOverride = 1 then
  131.     pvDeleteSequence(tokenNum)
  132.   end if
  133.   retcode = 0
  134.   seqNum = getPos(gpvSequenceNames, sequenceName)
  135.   if seqNum > 0 then
  136.     n = findSequenceIndex(tokenNum)
  137.     if n <> -1 then
  138.       curSeqNum = gpvSequenceNum[n]
  139.       newPriority = getProp(gpvSequenceRecords[seqNum], #sPriority)
  140.       curPriority = getProp(gpvSequenceRecords[curSeqNum], #sPriority)
  141.       if newPriority >= curPriority then
  142.         pvResetTokenIndex(n)
  143.       else
  144.         n = -1
  145.       end if
  146.     else
  147.       n = findSequenceIndex(-1)
  148.       if n = -1 then
  149.         if gpvNumSequences < MAX_TOKEN_SEQUENCES then
  150.           gpvNumSequences = gpvNumSequences + 1
  151.           n = gpvNumSequences
  152.         end if
  153.       end if
  154.     end if
  155.     if n <> -1 then
  156.       curTime = pvTheTimer()
  157.       callback = getaProp(gpvSequenceRecords[seqNum], #sTermCallback)
  158.       if callback = VOID then
  159.         callback = #none
  160.       end if
  161.       gpvSequenceToken[n] = tokenNum
  162.       gpvSequenceSound[n] = soundToPlay
  163.       gpvSequenceSoundWhen[n] = playSoundWhichIndex
  164.       gpvSequenceNum[n] = seqNum
  165.       gpvSequenceCallback[n] = callback
  166.       gpvSequenceCur[n] = 0
  167.       gpvSequenceReps[n] = getProp(gpvSequenceRecords[seqNum], #sReps)
  168.       gpvSequenceTime[n] = curTime
  169.       castList = getProp(gpvSequenceRecords[seqNum], #sCasts)
  170.       pvSetTokenIndex(tokenNum, castList[1])
  171.       retcode = 1
  172.     end if
  173.   else
  174.     alert("Sequence" && sequenceName && "is unknown")
  175.   end if
  176.   return retcode
  177. end
  178.  
  179. on pvResetAllSequences
  180.   gpvNumSequences = 0
  181.   repeat with i = 1 to gpvTotalTokens
  182.     pvSetTokenIndex(i, 0)
  183.   end repeat
  184. end
  185.  
  186. on pvInitSequencesFrameOne numTokens
  187.   MAX_TOKEN_SEQUENCES = numTokens
  188.   gpvSequenceNames = []
  189.   gpvSequenceRecords = []
  190.   gpvSequenceToken = []
  191.   gpvSequenceSound = []
  192.   gpvSequenceSoundWhen = []
  193.   gpvSequenceNum = []
  194.   gpvSequenceCallback = []
  195.   gpvSequenceCur = []
  196.   gpvSequenceReps = []
  197.   gpvSequenceTime = []
  198.   repeat with i = 1 to MAX_TOKEN_SEQUENCES
  199.     gpvSequenceToken[i] = 0
  200.     gpvSequenceSound[i] = EMPTY
  201.     gpvSequenceSoundWhen[i] = 0
  202.     gpvSequenceNum[i] = 0
  203.     gpvSequenceCallback[i] = #none
  204.     gpvSequenceCur[i] = 0
  205.     gpvSequenceReps[i] = 0
  206.     gpvSequenceTime[i] = 0
  207.   end repeat
  208. end
  209.  
  210. on pvUpdateToken n
  211.   sn = gpvTokenSpriteNum[n]
  212.   sprite(sn).member = pvGetTokenCastNum(n)
  213.   sprite(sn).visible = gpvTokenActive[n]
  214. end
  215.  
  216. on pvGetTokenCastNum n
  217.   which = gpvTokenAnimateIndex[n]
  218.   return gpvTokenBaseCast[n] + which
  219. end
  220.  
  221. on pvSetTokenBaseCast n, theCastNum
  222.   cn = member(theCastNum).number
  223.   gpvTokenBaseCast[n] = cn
  224.   pvUpdateToken(n)
  225. end
  226.  
  227. on pvMoveTokenDelta n, dx, dy
  228.   sn = gpvTokenSpriteNum[n]
  229.   sprite(sn).locH = sprite(sn).locH + dx
  230.   sprite(sn).locV = sprite(sn).locV + dy
  231. end
  232.  
  233. on pvSetTokenIndex n, theIndex
  234.   gpvTokenAnimateIndex[n] = theIndex
  235.   pvUpdateToken(n)
  236. end
  237.  
  238. on pvHideToken n
  239.   if gpvTokenActive[n] = 1 then
  240.     gpvTokenActive[n] = 0
  241.     pvUpdateToken(n)
  242.   end if
  243. end
  244.  
  245. on pvShowToken n
  246.   if gpvTokenActive[n] = 0 then
  247.     gpvTokenActive[n] = 1
  248.     pvUpdateToken(n)
  249.   end if
  250. end
  251.  
  252. on gopvInitTokensNewGame baseSprite, numTokens, defCastName
  253.   gpvTotalTokens = numTokens
  254.   gpvTokenBaseCast = []
  255.   gpvTokenAnimateIndex = []
  256.   gpvTokenActive = []
  257.   gpvTokenSpriteNum = []
  258.   cn = member(defCastName).number
  259.   repeat with i = 1 to numTokens
  260.     append(gpvTokenBaseCast, cn)
  261.     append(gpvTokenAnimateIndex, 0)
  262.     append(gpvTokenActive, 1)
  263.     append(gpvTokenSpriteNum, baseSprite + i - 1)
  264.   end repeat
  265.   pvInitSequencesFrameOne(numTokens)
  266.   pvResetAllSequences()
  267. end
  268.  
  269. on gopvTokensStartPlay
  270.   pvResetAllSequences()
  271. end
  272.  
  273. on gopvTokensStopPlay
  274.   pvResetAllSequences()
  275. end
  276.  
  277. on goAddAnimation seqName, castList, durList, priority, numReps
  278.   if priority = VOID then
  279.     alert("Need to define priority parameter in goAddanimation")
  280.   end if
  281.   if numReps = VOID then
  282.     numReps = 1
  283.   end if
  284.   newRec = [:]
  285.   numRecs = count(castList)
  286.   deltaList = []
  287.   repeat with i = 1 to numRecs
  288.     append(deltaList, 0)
  289.   end repeat
  290.   newRec.addProp(#sPriority, priority)
  291.   newRec.addProp(#sNumRecs, numRecs)
  292.   newRec.addProp(#sReps, numReps)
  293.   newRec.addProp(#sCasts, castList)
  294.   newRec.addProp(#sTimes, durList)
  295.   newRec.addProp(#sDx, deltaList)
  296.   newRec.addProp(#sDy, deltaList)
  297.   append(gpvSequenceNames, seqName)
  298.   append(gpvSequenceRecords, newRec)
  299. end
  300.