home *** CD-ROM | disk | FTP | other *** search
- global gpvTokenBaseCast, gpvTokenAnimateIndex, gpvTokenSpriteNum, gpvTokenActive, gpvTotalTokens, gpvSequenceToken, gpvSequenceNum, gpvSequenceCur, gpvSequenceReps, gpvSequenceTime, gpvNumSequences, gpvSequenceRecords, gpvSequenceNames, gpvSequenceCallback, gpvSequenceSound, gpvSequenceSoundWhen, MAX_TOKEN_SEQUENCES
-
- on pvResetTokenIndex n
- gpvSequenceToken[n] = -1
- end
-
- on pvDeleteSequenceIndex n
- gpvSequenceToken[n] = -1
- if gpvNumSequences = n then
- gpvNumSequences = gpvNumSequences - 1
- end if
- end
-
- on pvDeleteSequence tokenNum
- n = findSequenceIndex(tokenNum)
- if n <> -1 then
- pvDeleteSequenceIndex(n)
- end if
- pvSetTokenIndex(tokenNum, 0, 0)
- end
-
- on pvDeleteSpecificSequence tokenNum, sequenceName
- n = findSequenceIndex(tokenNum)
- if n <> -1 then
- seqNum = getPos(gpvSequenceNames, sequenceName)
- if seqNum = gpvSequenceNum[n] then
- pvDeleteSequence(tokenNum)
- end if
- end if
- end
-
- on pvDeleteSequencePriority tokenNum, thePriority
- n = findSequenceIndex(tokenNum)
- if n <> -1 then
- curSeqNum = gpvSequenceNum[n]
- curPriority = getProp(gpvSequenceRecords[curSeqNum], #sPriority)
- if curPriority <= thePriority then
- pvDeleteSequence(tokenNum)
- end if
- end if
- end
-
- on findSequenceIndex tokenNum
- n = getPos(gpvSequenceToken, tokenNum)
- if (n = 0) or (n > gpvNumSequences) then
- n = -1
- end if
- return n
- end
-
- on pvAdvanceSequence curTime, n
- seqNum = gpvSequenceNum[n]
- cur = gpvSequenceCur[n]
- expired = 0
- maxRecs = getProp(gpvSequenceRecords[seqNum], #sNumRecs)
- tokenNum = gpvSequenceToken[n]
- if cur = maxRecs then
- reps = gpvSequenceReps[n]
- if reps <> 1 then
- if reps > 1 then
- gpvSequenceReps[n] = reps - 1
- end if
- cur = 0
- end if
- end if
- if cur < maxRecs then
- cur = cur + 1
- gpvSequenceCur[n] = cur
- theSeqRec = gpvSequenceRecords[seqNum]
- castList = getProp(theSeqRec, #sCasts)
- dxList = getProp(theSeqRec, #sDx)
- dyList = getProp(theSeqRec, #sDy)
- timesList = getProp(theSeqRec, #sTimes)
- dx = dxList[cur]
- dy = dyList[cur]
- if expired = 0 then
- pvSetTokenIndex(tokenNum, castList[cur])
- pvMoveTokenDelta(tokenNum, dx, dy)
- gpvSequenceTime[n] = curTime + timesList[cur]
- if gpvSequenceSoundWhen[n] = cur then
- if gpvSequenceSound[n] <> EMPTY then
- playSoundFreeChannel(gpvSequenceSound[n])
- end if
- end if
- end if
- else
- expired = 1
- end if
- return expired
- end
-
- on pvPlaySequences curTime
- repeat with i = 1 to gpvNumSequences
- tokenNum = gpvSequenceToken[i]
- if tokenNum <> -1 then
- if curTime >= gpvSequenceTime[i] then
- if pvAdvanceSequence(curTime, i) = 1 then
- seqNum = gpvSequenceNum[i]
- callback = gpvSequenceCallback[i]
- pvDeleteSequenceIndex(i)
- if callback <> #none then
- case callback of
- end case
- end if
- end if
- end if
- end if
- end repeat
- end
-
- on pvIsCurrentSequence tokenNum
- retcode = #none
- n = findSequenceIndex(tokenNum)
- if n <> -1 then
- retcode = gpvSequenceNames[gpvSequenceNum[n]]
- end if
- return retcode
- end
-
- on pvSetSequence tokenNum, sequenceName, alwaysOverride, soundToPlay, playSoundWhichIndex
- if alwaysOverride = VOID then
- alwaysOverride = 0
- end if
- if soundToPlay = VOID then
- soundToPlay = EMPTY
- end if
- if playSoundWhichIndex = VOID then
- playSoundWhichIndex = -1
- end if
- if alwaysOverride = 1 then
- pvDeleteSequence(tokenNum)
- end if
- retcode = 0
- seqNum = getPos(gpvSequenceNames, sequenceName)
- if seqNum > 0 then
- n = findSequenceIndex(tokenNum)
- if n <> -1 then
- curSeqNum = gpvSequenceNum[n]
- newPriority = getProp(gpvSequenceRecords[seqNum], #sPriority)
- curPriority = getProp(gpvSequenceRecords[curSeqNum], #sPriority)
- if newPriority >= curPriority then
- pvResetTokenIndex(n)
- else
- n = -1
- end if
- else
- n = findSequenceIndex(-1)
- if n = -1 then
- if gpvNumSequences < MAX_TOKEN_SEQUENCES then
- gpvNumSequences = gpvNumSequences + 1
- n = gpvNumSequences
- end if
- end if
- end if
- if n <> -1 then
- curTime = pvTheTimer()
- callback = getaProp(gpvSequenceRecords[seqNum], #sTermCallback)
- if callback = VOID then
- callback = #none
- end if
- gpvSequenceToken[n] = tokenNum
- gpvSequenceSound[n] = soundToPlay
- gpvSequenceSoundWhen[n] = playSoundWhichIndex
- gpvSequenceNum[n] = seqNum
- gpvSequenceCallback[n] = callback
- gpvSequenceCur[n] = 0
- gpvSequenceReps[n] = getProp(gpvSequenceRecords[seqNum], #sReps)
- gpvSequenceTime[n] = curTime
- castList = getProp(gpvSequenceRecords[seqNum], #sCasts)
- pvSetTokenIndex(tokenNum, castList[1])
- retcode = 1
- end if
- else
- alert("Sequence" && sequenceName && "is unknown")
- end if
- return retcode
- end
-
- on pvResetAllSequences
- gpvNumSequences = 0
- repeat with i = 1 to gpvTotalTokens
- pvSetTokenIndex(i, 0)
- end repeat
- end
-
- on pvInitSequencesFrameOne numTokens
- MAX_TOKEN_SEQUENCES = numTokens
- gpvSequenceNames = []
- gpvSequenceRecords = []
- gpvSequenceToken = []
- gpvSequenceSound = []
- gpvSequenceSoundWhen = []
- gpvSequenceNum = []
- gpvSequenceCallback = []
- gpvSequenceCur = []
- gpvSequenceReps = []
- gpvSequenceTime = []
- repeat with i = 1 to MAX_TOKEN_SEQUENCES
- gpvSequenceToken[i] = 0
- gpvSequenceSound[i] = EMPTY
- gpvSequenceSoundWhen[i] = 0
- gpvSequenceNum[i] = 0
- gpvSequenceCallback[i] = #none
- gpvSequenceCur[i] = 0
- gpvSequenceReps[i] = 0
- gpvSequenceTime[i] = 0
- end repeat
- end
-
- on pvUpdateToken n
- sn = gpvTokenSpriteNum[n]
- sprite(sn).member = pvGetTokenCastNum(n)
- sprite(sn).visible = gpvTokenActive[n]
- end
-
- on pvGetTokenCastNum n
- which = gpvTokenAnimateIndex[n]
- return gpvTokenBaseCast[n] + which
- end
-
- on pvSetTokenBaseCast n, theCastNum
- cn = member(theCastNum).number
- gpvTokenBaseCast[n] = cn
- pvUpdateToken(n)
- end
-
- on pvMoveTokenDelta n, dx, dy
- sn = gpvTokenSpriteNum[n]
- sprite(sn).locH = sprite(sn).locH + dx
- sprite(sn).locV = sprite(sn).locV + dy
- end
-
- on pvSetTokenIndex n, theIndex
- gpvTokenAnimateIndex[n] = theIndex
- pvUpdateToken(n)
- end
-
- on pvHideToken n
- if gpvTokenActive[n] = 1 then
- gpvTokenActive[n] = 0
- pvUpdateToken(n)
- end if
- end
-
- on pvShowToken n
- if gpvTokenActive[n] = 0 then
- gpvTokenActive[n] = 1
- pvUpdateToken(n)
- end if
- end
-
- on gopvInitTokensNewGame baseSprite, numTokens, defCastName
- gpvTotalTokens = numTokens
- gpvTokenBaseCast = []
- gpvTokenAnimateIndex = []
- gpvTokenActive = []
- gpvTokenSpriteNum = []
- cn = member(defCastName).number
- repeat with i = 1 to numTokens
- append(gpvTokenBaseCast, cn)
- append(gpvTokenAnimateIndex, 0)
- append(gpvTokenActive, 1)
- append(gpvTokenSpriteNum, baseSprite + i - 1)
- end repeat
- pvInitSequencesFrameOne(numTokens)
- pvResetAllSequences()
- end
-
- on gopvTokensStartPlay
- pvResetAllSequences()
- end
-
- on gopvTokensStopPlay
- pvResetAllSequences()
- end
-
- on goAddAnimation seqName, castList, durList, priority, numReps
- if priority = VOID then
- alert("Need to define priority parameter in goAddanimation")
- end if
- if numReps = VOID then
- numReps = 1
- end if
- newRec = [:]
- numRecs = count(castList)
- deltaList = []
- repeat with i = 1 to numRecs
- append(deltaList, 0)
- end repeat
- newRec.addProp(#sPriority, priority)
- newRec.addProp(#sNumRecs, numRecs)
- newRec.addProp(#sReps, numReps)
- newRec.addProp(#sCasts, castList)
- newRec.addProp(#sTimes, durList)
- newRec.addProp(#sDx, deltaList)
- newRec.addProp(#sDy, deltaList)
- append(gpvSequenceNames, seqName)
- append(gpvSequenceRecords, newRec)
- end
-