FOR Sevex
IN SCRIPT FROM LINE 1563 to 1909 I REPLACED WITH THE FOLLOWING:
' *************************************************************************
' JP's Reduced Display Driver Functions (based on script by Black)
' only 5 effects: none, scroll left, scroll right, blink and blinkfast
' 3 Lines, treats all 3 lines as text. 3rd line is just 1 character
' Example format:
' DMD "text1","text2","backpicture", eNone, eNone, eNone, 250, True, "sound"
' Short names:
' dq = display queue
' de = display effect
' *************************************************************************
Const eNone = 0 ' Instantly displayed
Const eScrollLeft = 1 ' scroll on from the right
Const eScrollRight = 2 ' scroll on from the left
Const eBlink = 3 ' Blink (blinks for 'TimeOn')
Const eBlinkFast = 4 ' Blink (blinks for 'TimeOn') at user specified intervals (fast speed)
Const dqSize = 64
Dim dqHead
Dim dqTail
Dim deSpeed
Dim deBlinkSlowRate
Dim deBlinkFastRate
Dim dCharsPerLine(2)
Dim dLine(2)
Dim deCount(2)
Dim deCountEnd(2)
Dim deBlinkCycle(2)
Dim dqText(2, 64)
Dim dqEffect(2, 64)
Dim dqTimeOn(64)
Dim dqbFlush(64)
Dim dqSound(64)
Dim FlexDMD
Dim DMDScene
Sub DMD_Init() 'default/startup values
Set FlexDMD = CreateObject("FlexDMD.FlexDMD")
If Not FlexDMD is Nothing Then
FlexDMD.TableFile = Table1.Filename & ".vpx"
FlexDMD.RenderMode = 2
FlexDMD.Width = 128
FlexDMD.Height = 36
FlexDMD.Clear = True
FlexDMD.GameName = cGameName
FlexDMD.Run = True
Set DMDScene = FlexDMD.NewGroup("Scene")
DMDScene.AddActor FlexDMD.NewImage("Back", "VPX.bkempty")
DMDScene.GetImage("Back").SetSize FlexDMD.Width, FlexDMD.Height
DigitsBack(0).Visible = False
For i = 0 to 35
DMDScene.AddActor FlexDMD.NewImage("Dig" & i, "VPX.dempty&dmd=2")
Digits(i).Visible = False
Next
For i = 0 to 19 ' Bottom
DMDScene.GetImage("Dig" & i).SetBounds 4 + i * 6, 3 + 16 + 2, 8, 8
Next
For i = 20 to 35 ' Top
DMDScene.GetImage("Dig" & i).SetBounds (i - 20) * 8, 3, 8, 16
Next
FlexDMD.LockRenderThread
FlexDMD.Stage.AddActor DMDScene
FlexDMD.UnlockRenderThread
End If
Dim i, j
DMDFlush()
deSpeed = 20
deBlinkSlowRate = 5
deBlinkFastRate = 2
dCharsPerLine(0) = 16 'characters lower line
dCharsPerLine(1) = 20 'characters top line
dCharsPerLine(2) = 1 'characters back line
For i = 0 to 2
dLine(i) = Space(dCharsPerLine(i) )
deCount(i) = 0
deCountEnd(i) = 0
deBlinkCycle(i) = 0
dqTimeOn(i) = 0
dqbFlush(i) = True
dqSound(i) = ""
Next
For i = 0 to 2
For j = 0 to 64
dqText(i, j) = ""
dqEffect(i, j) = eNone
Next
Next
DMD dLine(0), dLine(1), dLine(2), eNone, eNone, eNone, 25, True, ""
End Sub
Sub DMDFlush()
Dim i
DMDTimer.Enabled = False
DMDEffectTimer.Enabled = False
dqHead = 0
dqTail = 0
For i = 0 to 2
deCount(i) = 0
deCountEnd(i) = 0
deBlinkCycle(i) = 0
Next
End Sub
Sub DMDScore()
Dim tmp, tmp1, tmp2
if(dqHead = dqTail) Then
tmp = RL(0, FormatScore(Score(Currentplayer) ) )
tmp1 = CL(1, "PLAYER " & CurrentPlayer & " BALL " & Balls)
tmp2 = "bkborder"
End If
DMD tmp, tmp1, tmp2, eNone, eNone, eNone, 25, True, ""
End Sub
Sub DMDScoreNow
DMDFlush
DMDScore
End Sub
Sub DMD(Text0, Text1, Text2, Effect0, Effect1, Effect2, TimeOn, bFlush, Sound)
if(dqTail <dqSize) Then
if(Text0 = "_") Then
dqEffect(0, dqTail) = eNone
dqText(0, dqTail) = "_"
Else
dqEffect(0, dqTail) = Effect0
dqText(0, dqTail) = ExpandLine(Text0, 0)
End If
if(Text1 = "_") Then
dqEffect(1, dqTail) = eNone
dqText(1, dqTail) = "_"
Else
dqEffect(1, dqTail) = Effect1
dqText(1, dqTail) = ExpandLine(Text1, 1)
End If
if(Text2 = "_") Then
dqEffect(2, dqTail) = eNone
dqText(2, dqTail) = "_"
Else
dqEffect(2, dqTail) = Effect2
dqText(2, dqTail) = Text2 'it is always 1 letter in this table
End If
dqTimeOn(dqTail) = TimeOn
dqbFlush(dqTail) = bFlush
dqSound(dqTail) = Sound
dqTail = dqTail + 1
if(dqTail = 1) Then
DMDHead()
End If
End If
End Sub
Sub DMDHead()
Dim i
deCount(0) = 0
deCount(1) = 0
deCount(2) = 0
DMDEffectTimer.Interval = deSpeed
For i = 0 to 2
Select Case dqEffect(i, dqHead)
Case eNone:deCountEnd(i) = 1
Case eScrollLeft:deCountEnd(i) = Len(dqText(i, dqHead) )
Case eScrollRight:deCountEnd(i) = Len(dqText(i, dqHead) )
Case eBlink:deCountEnd(i) = int(dqTimeOn(dqHead) / deSpeed)
deBlinkCycle(i) = 0
Case eBlinkFast:deCountEnd(i) = int(dqTimeOn(dqHead) / deSpeed)
deBlinkCycle(i) = 0
End Select
Next
if(dqSound(dqHead) <> "") Then
PlaySound(dqSound(dqHead) )
End If
DMDEffectTimer.Enabled = True
End Sub
Sub DMDEffectTimer_Timer()
DMDEffectTimer.Enabled = False
DMDProcessEffectOn()
End Sub
Sub DMDTimer_Timer()
Dim Head
DMDTimer.Enabled = False
Head = dqHead
dqHead = dqHead + 1
if(dqHead = dqTail) Then
if(dqbFlush(Head) = True) Then
DMDScoreNow()
Else
dqHead = 0
DMDHead()
End If
Else
DMDHead()
End If
End Sub
Sub DMDProcessEffectOn()
Dim i
Dim BlinkEffect
Dim Temp
BlinkEffect = False
For i = 0 to 2
if(deCount(i) <> deCountEnd(i) ) Then
deCount(i) = deCount(i) + 1
select case(dqEffect(i, dqHead) )
case eNone:
Temp = dqText(i, dqHead)
case eScrollLeft:
Temp = Right(dLine(i), dCharsPerLine(i) - 1)
Temp = Temp & Mid(dqText(i, dqHead), deCount(i), 1)
case eScrollRight:
Temp = Mid(dqText(i, dqHead), (dCharsPerLine(i) + 1) - deCount(i), 1)
Temp = Temp & Left(dLine(i), dCharsPerLine(i) - 1)
case eBlink:
BlinkEffect = True
if((deCount(i) MOD deBlinkSlowRate) = 0) Then
deBlinkCycle(i) = deBlinkCycle(i) xor 1
End If
if(deBlinkCycle(i) = 0) Then
Temp = dqText(i, dqHead)
Else
Temp = Space(dCharsPerLine(i) )
End If
case eBlinkFast:
BlinkEffect = True
if((deCount(i) MOD deBlinkFastRate) = 0) Then
deBlinkCycle(i) = deBlinkCycle(i) xor 1
End If
if(deBlinkCycle(i) = 0) Then
Temp = dqText(i, dqHead)
Else
Temp = Space(dCharsPerLine(i) )
End If
End Select
if(dqText(i, dqHead) <> "_") Then
dLine(i) = Temp
DMDUpdate i
End If
End If
Next
if(deCount(0) = deCountEnd(0) ) and(deCount(1) = deCountEnd(1) ) and(deCount(2) = deCountEnd(2) ) Then
if(dqTimeOn(dqHead) = 0) Then
DMDFlush()
Else
if(BlinkEffect = True) Then
DMDTimer.Interval = 10
Else
DMDTimer.Interval = dqTimeOn(dqHead)
End If
DMDTimer.Enabled = True
End If
Else
DMDEffectTimer.Enabled = True
End If
End Sub
Function ExpandLine(TempStr, id) 'id is the number of the dmd line
If TempStr = "" Then
TempStr = Space(dCharsPerLine(id) )
Else
if(Len(TempStr)> Space(dCharsPerLine(id) ) ) Then
TempStr = Left(TempStr, Space(dCharsPerLine(id) ) )
Else
if(Len(TempStr) <dCharsPerLine(id) ) Then
TempStr = TempStr & Space(dCharsPerLine(id) - Len(TempStr) )
End If
End If
End If
ExpandLine = TempStr
End Function
Function FormatScore(ByVal Num) 'it returns a string with commas (as in Black's original font)
dim i
dim NumString
NumString = CStr(abs(Num) )
For i = Len(NumString) -3 to 1 step -3
if IsNumeric(mid(NumString, i, 1) ) then
NumString = left(NumString, i-1) & chr(asc(mid(NumString, i, 1) ) + 48) & right(NumString, Len(NumString) - i)
end if
Next
FormatScore = NumString
End function
Function CL(id, NumString)
Dim Temp, TempStr
Temp = (dCharsPerLine(id) - Len(NumString) ) \ 2
TempStr = Space(Temp) & NumString & Space(Temp)
CL = TempStr
End Function
Function RL(id, NumString)
Dim Temp, TempStr
Temp = dCharsPerLine(id) - Len(NumString)
TempStr = Space(Temp) & NumString
RL = TempStr
End Function
'**************
' Update DMD
'**************
Sub DMDUpdate(id)
Dim digit, value
If Not FlexDMD is Nothing Then FlexDMD.LockRenderThread
Select Case id
Case 0 'top text line
For digit = 20 to 35
DMDDisplayChar mid(dLine(0), digit-19, 1), digit
Next
Case 1 'bottom text line
For digit = 0 to 19
DMDDisplayChar mid(dLine(1), digit + 1, 1), digit
Next
Case 2 ' back image - back animations
If dLine(2) = "" OR dLine(2) = " " Then dLine(2) = "bkempty"
DigitsBack(0).ImageA = dLine(2)
If Not FlexDMD is Nothing Then DMDScene.GetImage("Back").Bitmap = FlexDMD.NewImage("", "VPX." & dLine(2) & "&dmd=2").Bitmap
End Select
If Not FlexDMD is Nothing Then FlexDMD.UnlockRenderThread
End Sub
Sub DMDDisplayChar(achar, adigit)
If achar = "" Then achar = " "
achar = ASC(achar)
Digits(adigit).ImageA = Chars(achar)
If Not FlexDMD is Nothing Then DMDScene.GetImage("Dig" & adigit).Bitmap = FlexDMD.NewImage("", "VPX." & Chars(achar) & "&dmd=2&add").Bitmap
End Sub
MAYBE THERE IS A BETTER WAY. I DON'T KNOW, BUT IT WORKED FOR ME