Page 1 of 1

ChessClock early alpha

Posted: Sat Apr 25, 2020 3:30 am
by netmaestro
If the numbers look bad you may need the Bernard MT Condensed TTF font. You can download it here along with clocktick.wav and click.wav: https://lloydsplace.com/ChessClock_Resources.zip
It needs to be polished up and encapsulated in a module, probably with an OOP design but you can play with it now, all suggestions welcome.

Code: Select all

;/////////////////////////////////////////////////////
;
; This program will become ChessAssets::Clock
;
; It is currently in an alpha stage but far enough
; along to play with. If you need the font file it
; uses, download this file:
; https://lloydsplace.com/ChessClock_Resources.zip
; It also includes clocktick.wav which will have the
; clock ticking when it's running. 
;
; Any and all suggestions welcome
;
; The finished version is coming, til then have fun
;
; netmaestro
;
;/////////////////////////////////////////////////////
#CLOCK_PAUSED           = 0
#CLOCK_LEFTSIDE_ACTIVE  = 2
#CLOCK_RIGHTSIDE_ACTIVE = 1
#UPDATE_CLOCK           = #PB_Event_FirstCustomValue
#COLOR_DARKWOOD         = 0
#COLOR_LIGHTWOOD        = 1
#COLOR_PLASTIC          = 2

Declare StartClock()
Declare StopClock()
Declare UpdateClock(void)
Declare DrawButtons()
Declare DrawFlag()
Declare DrawIndicators()
Declare ClockFace()
Declare Crystal()
Declare Hand_Minute()
Declare Hand_Hour()
Declare Clock()

Structure TIME
  Hour.d
  Minute.d
  Second.d
EndStructure

Structure CLOCKTIMES
  LeftClock.TIME
  RightClock.TIME
EndStructure

Global uTimerID.i = 0, ActiveSide.i = #CLOCK_PAUSED, PlayerTimes.CLOCKTIMES, CurrentSize.d = 350, CurrentClock.i
Global tid=0, Clock_Running = 0, Crystal, ClockFace, hand_hour, hand_minute, darkwood, lightwood
Global background=#COLOR_DARKWOOD, UpdateNow, ClockBase, flag

Global Dim buttons.i(2)
Global Dim indicator.i(3)

UseJPEGImageDecoder()
UseZipPacker()

*unpacked = AllocateMemory(4306)
UncompressMemory(?darkwood, 4051, *unpacked, 4306)
darkwood = CatchImage(#PB_Any, *unpacked, 4306)
FreeMemory(*unpacked)

*unpacked = AllocateMemory(4965)
UncompressMemory(?lightwood, 4712, *unpacked, 4965)
lightwood = CatchImage(#PB_Any, *unpacked, 4965)
FreeMemory(*unpacked)

Procedure UpdateClock(void)
  Clock_Running = 1
  
  While Clock_Running
    Select ActiveSide
      Case #CLOCK_LEFTSIDE_ACTIVE
        PlayerTimes\LeftClock\Second + 0.5000
        If PlayerTimes\LeftClock\Second >= 60
          PlayerTimes\LeftClock\Second = 0
          PlayerTimes\LeftClock\Minute + 1
          If PlayerTimes\LeftClock\Minute >= 60
            PlayerTimes\LeftClock\Minute = 0
            PlayerTimes\LeftClock\Hour + 1
          EndIf
        EndIf
        
      Case #CLOCK_RIGHTSIDE_ACTIVE
        PlayerTimes\RightClock\Second + 0.5000
        If PlayerTimes\RightClock\Second >= 60
          PlayerTimes\RightClock\Second = 0
          PlayerTimes\RightClock\Minute + 1
          If PlayerTimes\RightClock\Minute >= 60
            PlayerTimes\RightClock\Minute = 0
            PlayerTimes\RightClock\Hour + 1
          EndIf
        EndIf
        
    EndSelect
    
      starttime=ElapsedMilliseconds()
      If IsImage(CurrentClock)
        FreeImage(CurrentClock)
      EndIf
      CurrentClock = Clock()
      PostEvent(#UPDATE_CLOCK)
      Delay(30)
      Repeat
        Delay(1)
      Until ElapsedMilliseconds()-starttime >= 500 Or UpdateNow = #True

      UpdateNow=#False
 
  Wend
  
EndProcedure

Procedure SetClocks(lh,lm,ls,rh,rm,rs)
  With PlayerTimes\LeftClock
    \Hour   = lh
    \Minute = lm
    \Second = ls
  EndWith
  
  With PlayerTimes\RightClock
    \Hour   = rh
    \Minute = rm
    \Second = rs
  EndWith
  
EndProcedure

Procedure StartClock()
  tid = CreateThread(@UpdateClock(),0)
  If ActiveSide <> #CLOCK_PAUSED
    If IsSound(1)
      If SoundStatus(1) = #PB_Sound_Stopped
        PlaySound(1,#PB_Sound_Loop)
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure StopClock()
  Clock_Running = #False 
  If IsSound(1)
    If SoundStatus(1) = #PB_Sound_Playing
      StopSound(1)
    EndIf
  EndIf
EndProcedure

Macro DrawNumber(angle)
  SaveVectorState()
    RotateCoordinates(0.5000*sz,0.5000*sz, angle)
    MovePathCursor(0.5000*sz,0.1000*sz)
    x.d=PathPointX(0) : y.d=PathPointY(0)
  RestoreVectorState()
EndMacro

Procedure DrawButtons()  
  Protected cx.d = CurrentSize
  Protected sz.d = CurrentSize*0.084375
  button_0 = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(button_0))
    AddPathBox(0.1667*sz,0.5667*sz,0.6667*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.3)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    MovePathCursor(0.1667*sz,0.5667*sz)
    AddPathCurve(0.3900*sz,0.3667*sz,0.6133*sz,0.3667*sz,0.8333*sz,0.5667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.7)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    AddPathBox(0.3333*sz,0.6333*sz,0.3333*sz,0.3000*sz)
    FillPath()
    AddPathBox(0.1000*sz,0.9333*sz,0.8000*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.5)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
  StopVectorDrawing()
  
  button_1 = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(button_1))
    AddPathBox(0.1667*sz,0.8667*sz,0.6667*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.3)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    MovePathCursor(0.1667*sz,0.8667*sz)
    AddPathCurve(0.3900*sz,0.6667*sz,0.6133*sz,0.6667*sz,0.8333*sz,0.8667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.7)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    
    AddPathBox(0.1000*sz,0.9333*sz,0.8000*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.5)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
  StopVectorDrawing()
  
  button_2 = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(button_2))
    AddPathBox(0.1667*sz,0.3333*sz,0.6667*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.3)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    MovePathCursor(0.1667*sz,0.3333*sz)
    AddPathCurve(0.3900*sz,0.1333*sz,0.6133*sz,0.1333*sz,0.8333*sz,0.3333*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.7)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
    AddPathBox(0.3333*sz,0.4000*sz,0.3333*sz,0.5333*sz)
    FillPath()
    AddPathBox(0.1000*sz,0.9333*sz,0.8000*sz,0.0667*sz)
    VectorSourceLinearGradient(0.1667*sz,0.3333*sz,0.6667*sz,0.3667*sz)
    VectorSourceGradientColor(RGBA(253,224,206,255),0.0)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.5)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)
    FillPath()
  StopVectorDrawing()
  
  buttons(0) =CreateImage(#PB_Any, cx, sz, 32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(buttons(0)))
    MovePathCursor(0.2188*cx,0)
    DrawVectorImage(ImageID(button_0))
    MovePathCursor(0.6875*cx,0)
    DrawVectorImage(ImageID(button_0))
  StopVectorDrawing()
  
  buttons(1) =CreateImage(#PB_Any, cx, sz, 32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(buttons(1)))
    MovePathCursor(0.2188*cx,0)
    DrawVectorImage(ImageID(button_1))
    MovePathCursor(0.6875*cx,0)
    DrawVectorImage(ImageID(button_2))
  StopVectorDrawing()
  
  buttons(2)=CreateImage(#PB_Any, cx, sz, 32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(buttons(2)))
    MovePathCursor(0.2188*cx,0)
    DrawVectorImage(ImageID(button_2))
    MovePathCursor(0.6875*cx,0)
    DrawVectorImage(ImageID(button_1))
  StopVectorDrawing()
  
  FreeImage(button_0)
  FreeImage(button_1)
  FreeImage(button_2)
  
EndProcedure

Procedure ClockFace()
  UsePNGImageDecoder()
  result = CatchImage(#PB_Any, ?clockface, 6534)
  ProcedureReturn result
EndProcedure

Procedure Crystal()
  sz.d = 0.3750*CurrentSize
  crystal = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(crystal))
    AddPathCircle(0.5000*sz,0.5000*sz,0.5000*sz)
    VectorSourceCircularGradient(0.5000*sz,0.5000*sz,0.5000*sz)
    VectorSourceGradientColor(RGBA(0,0,0,0),0.0)
    VectorSourceGradientColor(RGBA(0,0,0,0),0.82)
    VectorSourceGradientColor(RGBA(0,0,0,40),0.88)
    VectorSourceGradientColor(RGBA(0,0,0,70),0.92)
    VectorSourceGradientColor(RGBA(0,0,0,240),1.0)
    FillPath(#PB_Path_Preserve)
    VectorSourceColor(RGBA(255,255,223,26))
    FillPath()
    AddPathCircle(0.5000*sz,0.4417*sz,0.4167*sz,300,240,#PB_Path_CounterClockwise)
    VectorSourceColor(RGBA(255,0,0,255))
    AddPathCurve(0.4167*sz,0.0417*sz,0.5833*sz,0.0417*sz,0.7083*sz,0.0833*sz)
    VectorSourceColor(RGBA(255,255,255,180))
    FillPath()
  StopVectorDrawing()
  ProcedureReturn crystal
EndProcedure

Procedure Hand_Minute()
  Protected sz.d = 0.3750*CurrentSize
  hand_minute = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(hand_minute))
    VectorSourceColor(RGBA(0,0,0,255))
    AddPathBox(0.4867*sz,0.1000*sz,0.0267*sz,0.3733*sz)
    MovePathCursor(0.4867*sz,0.1000*sz)
    AddPathLine(0.5000*sz,0.0667*sz)
    AddPathLine(0.5133*sz,0.1000*sz)
    VectorSourceLinearGradient(0.5000*sz,0.0667*sz,0.5133*sz,0.4733*sz)
    VectorSourceGradientColor(RGBA(70,70,70,255),0.0)
    VectorSourceGradientColor(RGBA(0,0,0,255),1.0)    
    FillPath()
    AddPathCircle(0.5000*sz,0.5000*sz,0.0333*sz)
    VectorSourceCircularGradient(0.5000*sz,0.5000*sz,0.0333*sz)
    VectorSourceGradientColor(RGBA(166,120,68,255),0.0)
    VectorSourceGradientColor(RGBA(253,224,206,255),1.0)    
    FillPath(#PB_Path_Preserve)
    VectorSourceColor(RGBA(90,43,2,255))
    StrokePath(0.0033*sz)
  StopVectorDrawing()
  ProcedureReturn hand_minute
EndProcedure

Procedure Hand_Hour()
  Protected sz.d = 0.3750*CurrentSize
  hand_hour = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(hand_hour))
    VectorSourceColor(RGBA(0,0,0,255))
    AddPathBox(0.4850*sz,0.2333*sz,0.0300*sz,0.2433*sz)
    MovePathCursor(0.4850*sz,0.2333*sz)
    AddPathLine(0.5000*sz,0.2000*sz)
    AddPathLine(0.5150*sz,0.2333*sz)
    VectorSourceLinearGradient(0.5000*sz,0.2000*sz,0.5000*sz,0.4767*sz)
    VectorSourceGradientColor(RGBA(70,70,70,255),0.0)
    VectorSourceGradientColor(RGBA(0,0,0,255),1.0)    
    FillPath(#PB_Path_Winding)
  StopVectorDrawing()
  ProcedureReturn hand_hour
EndProcedure

Procedure DrawClockBase()
  Protected cx.d = CurrentSize
  Protected cy.d = 0.546875*cx ; Aspect ratio is fixed
  ClockBase = CreateImage(#PB_Any,1.0000*cx,0.5469*cx,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(ClockBase))
    AddPathCircle(0.2656*cx,0.5857*cy,0.1875*cx)
    AddPathCircle(0.7344*cx,0.5857*cy,0.1875*cx)
    VectorSourceColor(RGBA(173,98,59,255))
    MovePathCursor(0.5078*cx,0.1571*cy)
    AddPathArc(0.9984*cx,0.1571*cy,0.9984*cx,0.5714*cy,20)
    AddPathArc(0.9984*cx,0.9971*cy,0.5000*cx,0.9971*cy,20)
    AddPathArc(0.0016*cx,0.9971*cy,0,0.6857*cy,20)
    AddPathArc(0.0016*cx,0.1571*cy,0.5391*cx,0.1571*cy,20)
    AddPathLine(0.5078*cx,0.1571*cy)
    VectorSourceColor(RGBA(90,43,2,255))
    StrokePath(0.0057*cy,#PB_Path_Preserve)
    Select background
      Case #COLOR_DARKWOOD
        VectorSourceImage(ImageID(darkwood),255,280,280,#PB_VectorImage_Repeat)
      Case #COLOR_LIGHTWOOD
        VectorSourceImage(ImageID(lightwood),255,450,450,#PB_VectorImage_Repeat)
      Case #COLOR_PLASTIC
        VectorSourceLinearGradient(0,1.0000*cy,0,0.1571*cy)
        VectorSourceGradientColor(RGBA(223,148,109,255),1.0)
        VectorSourceGradientColor(RGBA(153,78,39,255),0.0)
    EndSelect
    FillPath()
    VectorSourceColor(RGBA(255,219,188,255))
    AddPathCircle(0.2656*cx,0.5857*cy,0.1953*cx)
    AddPathCircle(0.7344*cx,0.5857*cy,0.1953*cx)
    StrokePath(0.0156*cx)
    AddPathCircle(0.2656*cx,0.5857*cy,0.2016*cx)
    AddPathCircle(0.7344*cx,0.5857*cy,0.2016*cx)
    AddPathCircle(0.2656*cx,0.5857*cy,0.1891*cx)
    AddPathCircle(0.7344*cx,0.5857*cy,0.1891*cx)
    VectorSourceColor(RGBA(90,43,2,255))
    StrokePath(0.0031*cx)
  StopVectorDrawing()
EndProcedure

Procedure Clock()
  Static current_indicator_1 = 0
  Static current_indicator_2 = 0
  Static flag_active_1, flag_active_2
  Protected cx.d = CurrentSize
  Protected cy.d = 0.546875*cx ; Aspect ratio is fixed
  Protected flag_angle_1.d = 0, secondsleft_1 = 0, thisflag_1
  Protected flag_angle_2.d = 0, secondsleft_2 = 0, thisflag_2
  
  With PlayerTimes\LeftClock
    If \Minute >= 55
      flag_active_1=#True
      secondsleft_1 = (60-\Minute-1)*60+60-\Second
      flag_angle_1 = secondsleft_1/300*90-90
      If  secondsleft_1 < 220
        flag_angle_1*1.15
      EndIf
    EndIf
  EndWith   
  If secondsleft_1 = 0 And flag_active_1
    PlaySound(0)
    flag_active_1 = #False
  EndIf
  If flag_angle_1 < 0 
    thisflag_1 = CreateImage(#PB_Any,ImageWidth(flag),ImageHeight(flag),32,#PB_Image_Transparent)
    StartVectorDrawing(ImageVectorOutput(thisflag_1))
      SaveVectorState()
        RotateCoordinates(0.5000*ImageWidth(flag),0.5000*ImageWidth(flag),flag_angle_1)
        MovePathCursor(0,0)
        DrawVectorImage(ImageID(flag))
      RestoreVectorState()
    StopVectorDrawing()
  Else
    thisflag_1 = 0
  EndIf
  
  With PlayerTimes\rightClock
    If \Minute >= 55
      flag_active_2 = #True
      secondsleft_2 = (60-\Minute-1)*60+60-\Second
      flag_angle_2 = secondsleft_2/300*90-90
      If  secondsleft_2 < 220
        flag_angle_2*1.15
      EndIf
    EndIf
  EndWith
  If secondsleft_2 = 0 And flag_active_2
    PlaySound(0)
    flag_active_2 = #False
  EndIf
  
  If flag_angle_2 < 0 
    thisflag_2 = CreateImage(#PB_Any,ImageWidth(flag),ImageHeight(flag),32,#PB_Image_Transparent)
    StartVectorDrawing(ImageVectorOutput(thisflag_2))
      SaveVectorState()
        RotateCoordinates(0.5000*ImageWidth(flag),0.5000*ImageWidth(flag),flag_angle_2)
        MovePathCursor(0,0)
        DrawVectorImage(ImageID(flag))
      RestoreVectorState()
    StopVectorDrawing()
  Else
    thisflag_2 = 0
  EndIf
  
  face1 = CreateImage(#PB_Any, 0.3750*cx, 0.3750*cx,32,#PB_Image_Transparent)  
  StartVectorDrawing(ImageVectorOutput(face1))
    MovePathCursor(0,0)
    DrawVectorImage(ImageID(ClockFace),255,ImageWidth(face1),ImageHeight(face1))
    MovePathCursor(0.1500*CurrentSize,0.2250*CurrentSize)
    DrawVectorImage(ImageID(indicator(current_indicator_1)),255,0.08*CurrentSize,0.08*CurrentSize)
    If ActiveSide = #CLOCK_LEFTSIDE_ACTIVE
      current_indicator_1+1 : If current_indicator_1 > 3 : current_indicator_1 = 0 : EndIf
    EndIf
    
    minute_angle.d = PlayerTimes\LeftClock\Minute*6 + PlayerTimes\LeftClock\Second/60*6
    hour_angle.d   = PlayerTimes\LeftClock\Hour * 30 +  PlayerTimes\LeftClock\Minute/60*30
    SaveVectorState()
      RotateCoordinates(0.18750*cx,0.18750*cx,hour_angle)
      MovePathCursor(0,0)
      DrawVectorImage(ImageID(hand_hour))
    RestoreVectorState()
    SaveVectorState()
      RotateCoordinates(0.18750*cx,0.18750*cx,minute_angle)
      MovePathCursor(0,0)
      DrawVectorImage(ImageID(hand_minute))
    RestoreVectorState()
    MovePathCursor(0.07*cx,-0.0300*cx)
    If thisflag_1
      DrawVectorImage(ImageID(thisflag_1))
    Else
      DrawVectorImage(ImageID(flag))
    EndIf
    MovePathCursor(0,0)
    DrawVectorImage(ImageID(crystal))
  StopVectorDrawing()
  
  face2 = CreateImage(#PB_Any, 0.3750*cx, 0.3750*cx,32,#PB_Image_Transparent)  
  StartVectorDrawing(ImageVectorOutput(face2))
    DrawVectorImage(ImageID(ClockFace),255,ImageWidth(face2),ImageHeight(face2))
    MovePathCursor(0.1500*CurrentSize,0.2250*CurrentSize)
    DrawVectorImage(ImageID(indicator(current_indicator_2)),255,0.08*CurrentSize,0.08*CurrentSize)
    If ActiveSide = #CLOCK_RIGHTSIDE_ACTIVE
      current_indicator_2+1 : If current_indicator_2 > 3 : current_indicator_2 = 0 : EndIf
    EndIf
    
    minute_angle.d = PlayerTimes\RightClock\Minute*6 + PlayerTimes\RightClock\Second/60*6
    hour_angle.d   = PlayerTimes\RightClock\Hour * 30 + PlayerTimes\RightClock\Minute/60*30
    SaveVectorState()
      RotateCoordinates(0.18750*cx,0.18750*cx,hour_angle)
      MovePathCursor(0,0)
      DrawVectorImage(ImageID(hand_hour))
    RestoreVectorState()
    SaveVectorState()
      RotateCoordinates(0.18750*cx,0.18750*cx,minute_angle)
      MovePathCursor(0,0)
      DrawVectorImage(ImageID(hand_minute))
    RestoreVectorState()
    MovePathCursor(0.07*cx,-0.0300*cx)
    If thisflag_2
      DrawVectorImage(ImageID(thisflag_2))
    Else
      DrawVectorImage(ImageID(flag))
    EndIf
    MovePathCursor(0,0)
    DrawVectorImage(ImageID(crystal))
  StopVectorDrawing()
  
  clock = CreateImage(#PB_Any,1.0000*cx,0.5469*cx,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(clock))
    MovePathCursor(0,0)
    DrawVectorImage(ImageID(buttons(ActiveSide)))
    MovePathCursor(0.0781*cx,0.2429*cy)
    DrawVectorImage(ImageID(face1))
    MovePathCursor(0.5469*cx,0.2429*cy)
    DrawVectorImage(ImageID(face2))
    MovePathCursor(0,0)
    DrawVectorImage(ImageID(ClockBase))
  StopVectorDrawing()
  
  ;   If IsImage(thisflag_1)
  ;     FreeImage(thisflag_1)
  ;   EndIf
  ;   If IsImage(thisflag_2)
  ;     FreeImage(thisflag_2)
  ;   EndIf
  ;   
  FreeImage(face1)
  FreeImage(face2)
  
  ProcedureReturn clock
EndProcedure

Procedure RefreshClockImage()
  StartVectorDrawing(CanvasVectorOutput(0))
    AddPathBox(0,0,GadgetWidth(0),GadgetHeight(0))
    VectorSourceColor(RGBA(255,255,255,255))
    FillPath()
    If IsImage(CurrentClock)
      DrawVectorImage(ImageID(CurrentClock))
    EndIf
  StopVectorDrawing()
  
EndProcedure


Procedure DrawIndicators()
  Protected sz.d = 0.08*CurrentSize
  
  indicator = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(indicator))
    MovePathCursor(0.5000*sz,0.5000*sz)
    AddPathLine(0.5000*sz,0.1875*sz)
    AddPathCircle(0.5000*sz,0.1875*sz,0.0625*sz)
    SaveVectorState()
      RotateCoordinates(0.5000*sz,0.5000*sz,120)
      MovePathCursor(0.5000*sz,0.5000*sz)
      AddPathLine(0.5000*sz,0.1875*sz)
      AddPathCircle(0.5000*sz,0.1875*sz,0.0625*sz)
    RestoreVectorState()
    SaveVectorState()
      RotateCoordinates(0.5000*sz,0.5000*sz,240)
      MovePathCursor(0.5000*sz,0.5000*sz)
      AddPathLine(0.5000*sz,0.1875*sz)
      AddPathCircle(0.5000*sz,0.1875*sz,0.0625*sz)
    RestoreVectorState()
    VectorSourceColor(RGBA(255,0,0,255))
    StrokePath(0.1000*sz,#PB_Path_Preserve)
    FillPath()
    MovePathCursor(0.5475*sz,0.2850*sz)
    AddPathCurve(0.5625*sz,0.4000*sz,0.6038*sz,0.4888*sz,0.7037*sz,0.5600*sz)
    AddPathLine(0.6613*sz,0.6438*sz)
    AddPathCurve(0.5413*sz,0.6062*sz,0.4587*sz,0.6062*sz,0.3388*sz,0.6438*sz)
    AddPathLine(0.2913*sz,0.5600*sz)
    AddPathCurve(0.4125*sz,0.4550*sz,0.4500*sz,0.3500*sz,0.4500*sz,0.2850*sz)
    AddPathLine(0.5475*sz,0.2850*sz)
    FillPath()
  StopVectorDrawing()
  
  For i=1 To 3
    angle.d = i*30
    this_indicator = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
    StartVectorDrawing(ImageVectorOutput(this_indicator))
      RotateCoordinates(0.5000*sz,0.5000*sz,angle)
      MovePathCursor(0,0)
      DrawVectorImage(ImageID(indicator))
    StopVectorDrawing()
    indicator(i) = this_indicator
  Next
  indicator(0) = indicator
  
EndProcedure

Procedure DrawFlag()
  Protected sz.d = 0.12*CurrentSize
  flag = CreateImage(#PB_Any,sz,sz,32,#PB_Image_Transparent)
  StartVectorDrawing(ImageVectorOutput(flag))
    AddPathCircle(0.5000*sz,0.5000*sz,0.0900*sz)
    VectorSourceColor(RGBA(255,0,0,255))
    FillPath()
    AddPathBox(0.4600*sz,0.5650*sz,0.0800*sz,0.3600*sz)
    AddPathCircle(0.5000*sz,0.9250*sz,0.0400*sz)
    FillPath(#PB_Path_Winding)
  StopVectorDrawing()
  
EndProcedure

Procedure InitClock(size)
  InitSound()
  CatchSound(0, ?click)
  CatchSound(1, ?tick)
  CurrentSize = size
  DrawIndicators()
  DrawFlag()
  hand_hour   = Hand_Hour()
  hand_minute = Hand_Minute()
  Crystal = Crystal()
  ClockFace = ClockFace()
  DrawButtons()
  DrawClockBase()
EndProcedure

Procedure UpdateNow()
  UpdateNow = #True
EndProcedure

Procedure ButtonHandler_1()
  ActiveSide = #CLOCK_LEFTSIDE_ACTIVE
  UpdateNow()
  If IsSound(0)
    PlaySound(0)
  EndIf
  If IsSound(1)
    If SoundStatus(1) = #PB_Sound_Stopped
      PlaySound(1,#PB_Sound_Loop)
    EndIf
  EndIf
EndProcedure

Procedure ButtonHandler_2()
  ActiveSide = #CLOCK_RIGHTSIDE_ACTIVE
  UpdateNow()
  If IsSound(0)
    PlaySound(0)
  EndIf
  If IsSound(1)
    If SoundStatus(1) = #PB_Sound_Stopped
      PlaySound(1,#PB_Sound_Loop)
    EndIf
  EndIf
EndProcedure

Procedure ButtonHandler_3()
  ActiveSide = #CLOCK_PAUSED
  UpdateNow()
  If IsSound(0)
    PlaySound(0)
  EndIf
  If IsSound(1)
    If SoundStatus(1) = #PB_Sound_Playing
      StopSound(1)
    EndIf
  EndIf
EndProcedure

background=#COLOR_DARKWOOD
InitClock(1050)
SetClocks(3,55,0,3,55,0)
ActiveSide = #CLOCK_PAUSED
StartClock()
size = CurrentSize

OpenWindow(0,0,0,size*1.2,size*0.8,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
BindEvent(#UPDATE_CLOCK, @RefreshClockImage())
CanvasGadget(0,size*0.1,size*0.02,WindowWidth(0)*0.9,WindowHeight(0)*0.75)
ButtonGadget(1, WindowWidth(0)/3-50,WindowHeight(0)-30,100,20,"Press Left Clock")
ButtonGadget(2, GadgetX(1)+110,WindowHeight(0)-30,100,20,"Press Right Clock")
ButtonGadget(3, GadgetX(2)+110,WindowHeight(0)-30,100,20,"Stop Clock")
BindGadgetEvent(1,@ButtonHandler_1())
BindGadgetEvent(2,@ButtonHandler_2())
BindGadgetEvent(3,@ButtonHandler_3())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow

DataSection
  click:
  IncludeBinary "click.wav"
  clickend:
  tick:
  IncludeBinary "clocktick.wav"
  tickend:
 clockface:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$BC000000BC000000,$C449C20000000608,$4144494D190000AB,$15AC3D9DEDDA7854,$F0D0B0634FC716D5,$632A0E94ABE75E3A
  Data.q $31A0B0B4A2B10C2C,$AF0B70C1A4A0B0A1,$109898798C634284,$82C049125124688D,$4C4144431A09A148,$1F882A2835CA8A8C,$BF379C8AB97A0D41,$98FECCD9F61D7779
  Data.q $93FD6733ECE67B39,$FF33B98FDCF72E13,$03063EBDFF5AF6BD,$DB02A6C0A7FC1245,$0A07022C70B2EC0B,$D6F33F00A5B7DFD8,$055FE39D15877A02,$8168F21002D6E020
  Data.q $BFAFEBE26B0C0AF7,$E7BEB5DFF7FDFE1E,$DDF8054BC6160172,$228A9F4053DC0B9B,$815CEC90DC86D5A9,$B3C3ABEAFABE7258,$61A8FC57BE56CF67,$1F0F870B97CBA3F1
  Data.q $818BD1C7F1FC7E1E,$06EE81160144F745,$DEC46E00BBFC688A,$786472391F823E02,$3C1E0F012719CCE6,$3FC26378FC7E3C38,$EA0B2305CEB3ECFB,$0176002EF3BEEFBB
  Data.q $2FAC318AAA7D2376,$E3771830633C7580,$B7EDEA1274FF3FCF,$53A7850BB0AD2EDF,$F29EA7A9FE129ABE,$7E5FC3DDEEF77A12,$6EFFBFEFFEF9C5F9,$7D325C2A7651CF5F
  Data.q $51F02B6F8BEA73E2,$B4BA7D3E9CC22A81,$39EE7B9E36B02EA2,$C2537CAC7758FBE7,$F058585C42CD08FB,$172C23155FBC38BA,$01CC1651F5C33DC0,$88713E4243505770
  Data.q $FBE745C5C5D05854,$FC2637F7FBFD982C,$3D9EEF01BDDBEDF6,$8512E10AE3EF9C7B,$29C3B00B7FC0B170,$80F393E278167A33,$212F3EDF6FBE07CD,$18875DB784056E42
  Data.q $DDBE4C5A1F0885D2,$7DFB26FE014EE423,$9C67780D3C763A76,$E24B8F07AEDF6CE8,$7C9BD5F1D1F13C0B,$88DE7F9FE7C43B3F,$F4D10EE52B2B2BF0,$28C6A02FAF0142BA
  Data.q $2C6C219FC4A08E70,$F7FDE2AE5117D870,$2F8BE2FF4FC89FDF,$8D2E51F04AEBC6D0,$FD7F5FC34B4B4B0F,$3F1A5C1DD8D0B9D5,$3F9A2E405F7DE79F,$18438319B9068F2A
  Data.q $F8792967D610E893,$6BB5DAFF7CCEE0AE,$ABB03EF0949894C3,$C72B90FDB4355CF8,$55AE47C42105942D,$F2AC8139D1646586,$78589A277C3B5185,$D65C0EC9A90BBD2C
  Data.q $41EF9D9797961539,$4BB13DFE1681DF76,$CA7F16AB7483BA95,$47D3C4E8432A22D2,$B4050E1292DB90E8,$8F8105989DDC8433,$C8BC829BECA5D28F,$9AACB8BE21E1E7CD
  Data.q $18D03191A89962CB,$7DB431161E6F379B,$537B91B0BC2C3A1A,$0D76B688C2C30D78,$DC57BA1ADFDF2BDC,$76672AA8EC2C5967,$E1FC902FB8B26E00,$436DDB76DE1E1F87
  Data.q $75B1B6AD590FA19F,$5E21E126D092D6EB,$773BF8879F9541B1,$536DB6DB7F111CEE,$86C361B86ED0CEB9,$1D0E8786EB75BAE1,$169D1547370E7D1A,$9CA61B2EE6E54DC0
  Data.q $687B78A49008790F,$D4801B7CACB5ECC9,$38217849B2217658,$93E5E3AF95AF97A4,$F1BC572B95C0DB4B,$18A1F66D7275670E,$D509A5940503ED3B,$083C828A17225717
  Data.q $A75BF6FDBF0BA92C,$36249A1164AE4204,$DEEF7E11F7158F09,$C9FA7E9FD02F9DBD,$75FE2EB9D9630419,$084ED41A6428B149,$C28143B27D96410E,$27D0C0ED32888CB8
  Data.q $767D318DC7849A41,$B774C17784DA7BAE,$86FD1CD26185D742,$93BE24B8EA688C0A,$0F94D66B35FFB645,$A9DBEF0816702084,$376F7289B8B85A72,$01DD25880DE8DC6E
  Data.q $170278B2829A4503,$8964295F8E5C7426,$F97A58F08ECB0DC8,$159EEE605CFEFC3A,$D4F4920774DE1D47,$E04B2A90C2E869C5,$1045C4AFC7123AE9,$F378456505E02F79
  Data.q $80D777C15DE9F1DA,$A25F05DF10ED72E0,$2BB32A0C1C06351C,$05F7284BFE509854,$364D2A44501E52FF,$FAFEF94B65B2DF84,$43C58813393BEBF5,$EC4030C054143D0F
  Data.q $3E28717151ACAE4E,$34216C7AFE1B9651,$83521E18FCBEE639,$A6E9165E11A9EA9A,$FD7175A2251A9B4D,$DF82B0F3D0B0C3BE,$EAA57852764F739D,$58CFEA0ADEB7ADE8
  Data.q $FAFD787D7F5FD794,$065C7847C02CE1F5,$F3EEAB936BADA7AC,$C7F1FF5EEB86BB97,$549681CC6F6D651F,$833764D7320A916F,$17457C792A7D2253,$EBF8D859E11706B3
  Data.q $AE3CFE4DD8F63D8F,$01062C5D06299B4D,$7773B304145ECC46,$C70F62B973204B3A,$480B184F9F7A4012,$C2170BAF795E0AE5,$5FB48653185C7845,$6482B687DC20C55D
  Data.q $E0A373E545322A5F,$366A36C3D97C4050,$8DF2AA2A36EBFA89,$036EDB61214082AB,$48BEE31216BB4244,$A50BBE11F7E41D69,$8D61453C9AE16B86,$5C433DF2E18D2EC1
  Data.q $08E58B9C9E93DED9,$995E5795E84090CD,$9B6BDF3784DAAAD8,$2725F372582684F0,$BDE2F27BF6332895,$E2784D487DCEC8AE,$CC9E62236BEEC82C,$747643B2D6F6DAE2
  Data.q $9FE7F9F8198950DB,$6E0C7991D668DD6B,$2EC3029CBDEABE12,$E161B4F9E6607C41,$EF7D5A01E145DC63,$B2E1DDB3B3E9BD2C,$9B44CCCC0EBE90C4,$349E133CE189E6F0
  Data.q $076263E136DEC86A,$137A6F7079717BFC,$A41B7B3ED965B2C8,$7C78428759D857E7,$0C76F0B579BDFB62,$EC819BB26DE135D1,$BD26DB1E96DE93CC,$27BBE129EF55F08B
  Data.q $27D33964A6EC8BBC,$F4F484FED2051FA8,$7E5FF09BF7C25162,$77B6C286EC97A5F9,$06EA05D362637326,$4DAA3C24D9F84AA7,$3C2299906B4CD4AC,$6D570EAE71FC6089
  Data.q $0703EF0FBF9F0941,$DB6709333C7F528E,$918369A47210E48D,$52F08FF7C251915A,$77D9D84825A92C7B,$5022583EC378A046,$E127CFC250883D89,$D9F468252955EAB1
  Data.q $D2E6452EA904372A,$292D55F5EAE54BA5,$82F99824F093E7E1,$FEFBB7EB66E21A59,$D5A1785E179ADC30,$C9FC22D9F84A7356,$036BB38C52A32793,$FF3FC0DFC1D7DDB2
  Data.q $7921EA940DEAD3FC,$CC1AA47BF6B7E999,$76716AC1D9FACC23,$26CCB8382627C58E,$10F47C2EF6FC46E7,$BDEF8D57B32C44EC,$72BE60431D160279,$BA9EE642DBCCBC26
  Data.q $43478EDF8805CF3F,$20FFA28C8A574B75,$55373EE8FD8CDC55,$CB66B4297BDDDBC2,$B3041FF455383B6C,$175A98987823C29C,$12D23B6E55717E04,$6287114932304A17
  Data.q $DAE0FE2E6F55213E,$A85601D4A1F0854C,$140183614296B86F,$D0F8CAE97CFF3FCF,$ACDF1191ADB36779,$8F251883E4501774,$5D17E1E18D9DC58E,$59D16E62963DA5CC
  Data.q $CF96862508BF2556,$17F455EC75B97BC8,$6D0FF4B765A50DF4,$DFB216D5C6F153BD,$196E5B96F0EDFB7E,$EC16D15F46A15A9B,$79F96F7BDEF740F1,$707414BC255A2DEA
  Data.q $ED76B5E5EC766150,$62A991A5CC9252DA,$F0B1C84FB51181F6,$3AEB5BF94E7A9F66,$34F1769099105F60,$91B008519D54B39D,$A11D293709CBD114,$B166C027268C5D93
  Data.q $B27897BEABEA7D39,$775DD77E0830E4F3,$704DC35E97DF118D,$203F4171A7BC40B9,$20CA519C8231B72D,$C71CE64A7575FE37,$793959D7C60B12E6,$556307F8DF46D972
  Data.q $34AD22E51FC8D2E2,$8B337AF8F4B3B243,$1F8526A4F72D9F0F,$F9037B33D44CDD10,$B796ABB5DAEFCE7A,$21D9A35C3F97DC90,$DD92F35ED7B5FB96,$20AB050B23DF3C26
  Data.q $6299153093231EA3,$0F5B314DC4E28D60,$2FCBE1D5EAF570BA,$62F2B32577EB5CBF,$2D4B0155863B63DD,$D6CAB299BC22AE24,$4708F5D29B863725,$24D2F6277C483A45
  Data.q $BC08A9383B14AF3C,$32A7D4EEB1795992,$D97DDDBA871C93CB,$EB64AF1D5C5170CA,$455EA0E2983F09B3,$CCF0D2E9B7BE981A,$49C14A5407E90127,$3BBEDBCAD89D83A9
  Data.q $E8D9897E191C9E16,$BB72AC369555163E,$14BE434E7C24C94A,$8FC6F76E136CC193,$D9982489C93E3B05,$EA392FF2B627D613,$C7F1F8152362C8BF,$AABE1154E6E5AF1F
  Data.q $914096A4FC24CF2C,$79C9A2414D3E0807,$BE182ECAA753A9CD,$5C7714AFA7C6F3F4,$169CDE1154932C4E,$0D98A3705F784557,$62DF51275B716E40,$A1696CD8E71B1192
  Data.q $36CC52F3C2137951,$1E24FB6C8A44C388,$C70B68F014A8DD23,$84DBAEC7B78455A5,$8B1A642ECC54AE47,$0B39D6D31F93B3ED,$A2171B700A76BAC6,$756355EDF9FCFC3E
  Data.q $58C1F68E2D073C08,$0231A3D5CEFC22D7,$1FABB85A5498D404,$0462EF84DA57298A,$1D937633203D228C,$DCEE52E7C118EEDA,$0BFC37A828882708,$A8B865599C88156A
  Data.q $403CB171717F1031,$88CCDE10536A8BB0,$3D456D54CB9F09B3,$149D7822FD99B1D8,$66189B86470C92C8,$CDE574A2CE89BD53,$DFA2A713E1C4D870,$57C5640BA37DFF7F
  Data.q $40726B58AC94DE11,$93F080C8A56792D1,$83CB37CDF37AC236,$6B477B1555E00627,$E9BA91D48DEB76F2,$792275588B419B9B,$4C42E1526B350AD9,$3CBE738F4B546BED
  Data.q $A896CAF1D55009CC,$2E9691760C2CF4B0,$8FF8560E08473143,$EAB77D98A15A2E39,$802CC50A1BF69258,$0867722843DE6146,$C08196629E55B400,$4F09380A9B941922
  Data.q $5F1490C89019207D,$450ACDF291D92FF0,$D36121EEA348C08E,$5AC06CE07424557C,$87E77FC843F24725,$85342B65A3E8FA3C,$1DC357D5F57C2722,$36DCD919C694763B
  Data.q $B280D43432794ECE,$8C93C8C43722852B,$2598A1556EA89A63,$8A0116D65D425654,$D7AFB231D4C3829E,$F94F53718F454494,$EA6E31E8AA385ACD,$490483B48AC0464E
  Data.q $339142BD21A86476,$C7BD0A46D5092CE4,$B3480BE318495702,$8C923906D11C22A4,$64545DEBCFE7F3B4,$47834787C926B20D,$1D4439187463E4A6,$B269A1F39573244B
  Data.q $8CCE0EE4559E3442,$DFD958D267ABB720,$CCA31CF4544D4D39,$700E62860FB55BC9,$D6628560677440A0,$58B7D7C078314A31,$50EB1D583809E8A1,$9C0327651DF450A0
  Data.q $224BC8D4201CDA79,$192812CC578BCD5E,$D6967C249E72DE15,$3FE617C80DF4541D,$63A25AA405F2F068,$FB451F8693D3AAF2,$47F1554DA8153205,$279CB785DDD025D1
  Data.q $ECE3429370C59F09,$3B468FD532175C10,$A0681D3C9B49639C,$1E23C7FAC7B1F488,$A7EACB28BD94A9C2,$BA30F74B92C78414,$229873B4F3ED9811,$82CEC4FE06213206
  Data.q $41FD27BB2A78446A,$1D042CF09B19CF66,$A13062DEF908AC5A,$1689ABC6946FDDA3,$DB24A7378424D6D5,$3C2188A1423F9784,$FFF75E449FCDB87E,$81325EF68251FF09
  Data.q $408452A62D7845CF,$51D55FC81ADC6D5B,$E1A3CCBDB99C513A,$959595AF43856097,$01F31542B54F8446,$39770354A8652FB3,$921A7CCA4E115BC4,$4D0CBE35F783C9E3
  Data.q $6148AF09413B20E2,$73043FFCDA76CDE5,$95F77DDF75EBAFF6,$7C9FF0B1E125F239,$BA5249178444C9F2,$7515E1F57BC34AC2,$974A60D281C0E070,$F843133B90BE1469
  Data.q $914F8586F07C1F07,$6B17074120184C1A,$1D450AD81694278E,$257CA9528F23993E,$85A270F9A44BDFE1,$6C96449E0E4BC36B,$6787307FA295907B,$2C892056DAF74AA4
  Data.q $DFD0362E46550369,$F2F663428128A149,$4B2940C7AA9F0935,$2C74E73587D69EA6,$1C46170F98A476F5,$E659668CA9F0930E,$1195C68B86972A97,$0C4555835E5F1DFF
  Data.q $A53216396E428A30,$3134B95138E754EE,$549E10AD0480FBBD,$23BEB4D456FC2D03,$282C8E53018CDB59,$B524693D2AE44F09,$4FD3F4FAF074DA52,$E24B64875A2869F5
  Data.q $1F3AEBDBF1DD60CA,$8BC1D36959C304A4,$8787CCA69BD27F29,$D79E49787C87FCF0,$E2623486598A4C46,$BF092F87C91ABF45,$3EECA09CC514655D,$5F18127315257DA6
  Data.q $0758C1B98AC1CED4,$7B1CF4550A3D65E1,$145D93467F088C0B,$686EE3BC68ED073D,$DF37EC41CB844AA4,$9C4E35914C77A37C,$1B4A24C3316A3138,$839481D5686F6363
  Data.q $868D95696C8B498E,$58EE452443D10FC9,$7BBDD998B51A5A5A,$8B65349E978B48F7,$5DFD127C6459010E,$C5E2D100FA2AB267,$6F55C8E6E44D8FDA,$E46C63E6A0AFA291
  Data.q $0AFA28B6F4F73D0D,$1143A95B1A6F8232,$9789821868C57D14,$92599453D15AD2B4,$99B07530F206B636,$25D2E97A66704722,$4C80AB0163CBFBDF,$44A0C86B510BF332
  Data.q $C8A157C8878911E6,$7DE99AB5D1119C09,$4A3360E690C8EAC8,$F9D10AE2702E0758,$95F210A3CE787466,$A43B21C901DC8AE8,$6AC276306818BF87,$1429FF46BAB5E643
  Data.q $ACF9B1807C8602B3,$CD184FA293DE7436,$8A4DBD7904817275,$00BB18AD2C7B80B6,$5613745210836239,$6CBA2F4A14D4AA28,$D534210E0B7658BD,$21428193B636008F
  Data.q $BA3E2A35ECA7B2C0,$06695C10BED4E50F,$C30B0B0BC044476C,$696CB1744C2E170B,$BA63FF90785200DC,$54A448E617662AC4,$8E47915906CBA784,$5C09D32BE1D4A91C
  Data.q $6449A420FC7BF690,$4A25499F6478F41E,$4BA5D90F1FC94B3A,$B2827EABC2D7E419,$F109099349BA36E9,$3E3F1F8FD191E1D1,$A9C858B19765FCB2,$2994A53E1CF0F92B
  Data.q $AF48412CD98E3C65,$EB4DB02D03FD0DD9,$83C1D1F9CF0F96DE,$81755D3CECA34B07,$D5591F95CEA36E2F,$2FD218ED3BFC502F,$EB12766C87843850,$6D17506C2F256822
  Data.q $4115014784999324,$A817EF85A82A0648,$95F092E83A7DA22B,$8E621455B42162C9,$9F00AC7EACF481C7,$6CCD5880FEC252D7,$A8F62A6FE115DA8E,$E554348C7C8E5083
  Data.q $FF6B96744923D9D3,$FF8414D45D330180,$FB99535F82BFAFEB,$0131D15DBB8A0B1E,$548256809350B202,$DCD085FBBB13A5F3,$0FC3F0F8BCB50725,$9616A5C52110C54B
  Data.q $5E0CDE4D029B23FD,$50123A206E518489,$5E91555086528913,$997CC22100FEF8F5,$0C25A4E9B01119CF,$6E0D302974E548AC,$2D29419208412A54,$1FCED4493355E83C
  Data.q $7BE3666D6CF7A92C,$B49D53F161F3F2B5,$66F6C3B4AF8C7842,$EA6DCD55F2B5D646,$0139B0F1993F6642,$26E86213F65CDB50,$49FC80CBC05C6771,$47F3A363E56DBBAC
  Data.q $6D63D13DF2A4791E,$7EE323683FA64801,$18080F8522DB8202,$BBBAC491908EA870,$5579710A45D7797C,$E13556E291934ACD,$1791509E354F9FC8,$E3E03EF071ECFB10
  Data.q $26819D0962CD6C8B,$9410C5CF2B21EEB5,$F93F056C66B359AC,$F4DFAFD7EBC393E4,$219DC0E2C15792F5,$469735E2D1EBE588,$C771DCDEE7627B81,$5DD6A4C9B0DF431D
  Data.q $8B9C9F2CCC8E51B0,$F1EF93ED6B0E2F31,$875538739B0564E7,$F26F3F92E0809857,$2DA0C6FD4D746EC4,$C7B17DD568D4E01C,$CD62BE46757173CB,$08E3E15574F4DAD9
  Data.q $66B8C76BB5DACD2E,$8BC235A6C131681E,$BF6F0E3F8FE3FF2F,$6235317397F2F6FD,$E5E4B03036A2855A,$7CF6FEFFBFEFE108,$9E6799ED04321B77,$205745685A9A5729
  Data.q $D1551BC306B713E6,$C557BAD61D482934,$99B11A9337EDE1B4,$B51464FA2B2B2B94,$C0AB56186810F6FD,$45489692EB006523,$A22A09F4378DE378,$3E5A7920F1243641
  Data.q $15CBD802FAA81AB4,$D465AC8844533C0E,$89900AA407514288,$76862E2655750D4B,$2A50B9BC53982D30,$14FAADA3D9ECF7C8,$EEEA69C314C08313,$E79AB7BC3EAA059D
  Data.q $0548A15C82A48AC9,$3645980196E9635C,$E4DAACBFB8483698,$D73CE4E16FCEC24C,$36C458F7344E9533,$A737276AF57ABD61,$86E7D93A5E49592A,$B5F627648955521A
  Data.q $73CF3EC5AED76B89,$7D096A04E41D3DF4,$A73DFE1754B54D17,$61BE414D32D2BE72,$02BA837D0FEEAA14,$46D6F3EDF6FB1B85,$4720CF74D717B7E3,$A0D187F27DE4731C
  Data.q $9F2D52084911453E,$F14BB784CFB296B2,$371F7A4EB7B2862A,$17D0440B4EA21AA2,$38AB436E0A47B4AD,$31F399AD93604825,$BFEE308EED7FF179,$48FEEC82BA310A87
  Data.q $1CB0A731EDFAD9DA,$8B6E3C20316D753E,$3BABDBE4C7C76279,$F915D9D7F1784E33,$F4B1757011EB34FF,$6E5A87B7E9664322,$B3B4CC4A5EC632E7,$CF44598DE1480DD9
  Data.q $396702AF6EF55DC7,$6F61776FDACDF034,$DD56A5A5A58DCF64,$3A7AAB891496AC1D,$10A02E4020E9784E,$9CFB1DCB0FB72DBF,$FE038702903A92A7,$6A9E563EFF01370C
  Data.q $6B60A2B20F1DD602,$4FB3780331A3C1AE,$5971EDD852ED1B50,$415660F573A7A442,$3DB7B211B94B9B46,$F0A04052597A5312,$D4E0ADAD7AAC6D12,$8102DB7E534EFA47
  Data.q $B5F9D915DF3F9D87,$BE11564D2FCCD5DA,$0C049A7A45C6F54D,$15DACC694AE402FA,$25CC43D1DC3557D9,$25A74B9128A49560,$585DC06CB24D4A93,$76D9019AA7E91778
  Data.q $FB3FD90C53F20DCE,$4E4FAB8CEE64B3EC,$282C4CBA96782097,$A66814869ACC4384,$0F893F0930218815,$341C821110863C4F,$40AE8E62F3A98B31,$4BAC8D26118B8FAB
  Data.q $43F84D9745278D52,$CF8BDA7D90552690,$D4182F482BA2F0B4,$B6F58F081D76499A,$969BB26BD0AA910F,$85262BF25E77D7DE,$DFD397849A70CFDD,$8C38AD707D634641
  Data.q $5769B8F8B77325E3,$52FA9C9CE2EC135F,$A7D3764F7A637049,$521D602AC7042AAF,$9A0696E68B76F7F8,$C1B5C5BF484056D4,$3D7392C1D77B4FE2,$05D2429CF2934392
  Data.q $EA3AD402AF659EAA,$29B2620D6259298D,$A8A4CD00F3228763,$E9E699A79B79E669,$742093F49B4F1F26,$9C7A42F75BB5527E,$D552D0EABA3FA744,$E2F8BC5160454A12
  Data.q $0DCB18252B3D958B,$C1CE5393C2C56BB6,$73331AE19CC26B6A,$41E497A92895CAE5,$62252950FA666D71,$BF6499D465560627,$BCEDDBD3B33BCEF3,$5D72BCF09354FE73
  Data.q $B19D7B23AB5EB8A8,$A6CCCC6E4E004C49,$F2E6F4D6709DB40B,$43650E8743A042ED,$A106EDE110C3821C,$F0B77D5C3B8CC039,$25CCC5020C8A43CF,$196C954C6E057582
  Data.q $2DCB104916F9660A,$524650A7C2C62667,$BB2282ABE2CC9CC3,$AA5C86CF55485191,$D47B30669DF14999,$D637286E48DCE530,$F6D020B729F13305,$798A516B9F08ABE1
  Data.q $A24E3655BBE9ED52,$94A95D64C2E98C97,$DBEE8838DC61B823,$79A001CE48AA65F2,$B05726C51E136BE2,$7DE8D2375BADD758,$5C0930BAA9C106B1,$94361B0DE470D09C
  Data.q $734A5AB92409840F,$5CA20E5CF84D91C6,$80D7FAD5835CB990,$D5C7170A4C2EAC14,$50F98107DD7252C7,$8CB0692A9D9ECF67,$E31C527A0E42CD32,$A315176FA36E02A7
  Data.q $2005A617510E2AE2,$9B76EC4A9E319D6B,$36BA68104521552A,$2FC21C75D2E693D4,$88DB9F0145382C2C,$541F3EBBFB7A9F55,$F4FD3E0A2646FFD1,$6F0115017C7125D3
  Data.q $0CD8E528A2B5B52E,$C0C25DC3F169938A,$4D5C76BA3DDF77DD,$711A3B404C3BD6D5,$1A3BE99C832B81E2,$7DB7279C0F83E0FF,$BE709C4E27E7B902,$4C7943AD53074A4F
  Data.q $E57E24DCCE8C1B18,$65718DD2F9FC5A04,$3D3E9F4E15792C64,$91001E70FF7FBFDC,$2B21A535BD171717,$7032F328D8C1918F,$33B831B8AE86EC73,$B85DAC17D699D03E
  Data.q $6F3866269715A170,$F9C1F87E1F97BCD3,$8091FB7D7C827D3E,$4BEEAAD991B33AAB,$3B8F8B102947C486,$9096385B43DDF3E3,$423532494C352E40,$7B9244397DE85C2E
  Data.q $335D94B58D2B3642,$EBEDD6CF7E90FC40,$393C9E4E77521222,$753F84E77CFE7F3C,$C016D486F7F394EA,$A25175C4F8F50F22,$97DF1175474820CF,$D49FBEFBFDB31979
  Data.q $D9E111B77DDF77D9,$767EC69DE779DE59,$02B835D274A34DC8,$B16E8AEE3195B189,$42791215787D80A5,$AE7D000AEA4B1096,$908B14AE7DE10C43,$873395C2E774D8C5
  Data.q $80BEB4815202E186,$29B18480E067A532,$48FBC21D10B339A1,$697189FD44D1E283,$58263C60A106E97C,$2B2972A000C45A47,$AC955B2C345804E6,$BDFE42135D7D6109
  Data.q $E0BBB7DE10C6CACF,$53BB9823B1D8EF9F,$F34F370B8F33C7E5,$3D7F346E481CE65D,$2BE2236A11895913,$D080BE287C218956,$C518E02D2B6974BE,$3E0F6E9C2B9FAA35
  Data.q $B81F1780AE87653F,$C9E050F8431BC069,$4162F15800ED7262,$8CB011A28B2AA13C,$BDB3228F802C01B8,$7B52B2020B5C01D8,$8BEDBF7DF222ABEB,$F71E94BB3821C163
  Data.q $055C5058045B5A2B,$AB08C8D5CEE906C8,$89C8648DAB1F0FDB,$6456E4ADDF8F8B32,$004576164DEC7401,$8F4DBB4D3EFEC8F5,$64F777D5A6EA01FF,$4549000000006ED8
  Data.b $4E,$44,$AE,$42,$60,$82
  clockfaceend:
  darkwood:
  Data.q $D7535479979D9C78,$4483CC21084FC7BE,$401B502145021064,$241E658033430D72,$257020B4DEBD5781,$0217843AF010EAF0,$8A2E06810235E452,$6C572AE810936243
  Data.q $0B6A2540548A11E1,$1088D264521E4909,$5DC3DC8992029906,$67DBDEF1FDE7F86F,$FD9EFC7B39F6B5ED,$334CC69B6FDF9FDB,$81002C426C626380,$E02BD3007C040000
  Data.q $ED6B6F6B6368E028,$D9D1C9C7BF676F68,$E21AE2E2EAEEE515,$34FB8A111513D07B,$12A4A78C4B0C343C,$433B4B0D831E3B3F,$A7C3CD479D999E3A,$73F94CBDCF9CAED0
  Data.q $7B3DA71020EECE5E,$E507BBB906BAF75C,$A9939FFCE7458744,$F214135DDCB2700F,$4C413A8104E66011,$1FE4184EB824004F,$C39A8331048FF809,$836036D65696E02C
  Data.q $999A85020CC0474E,$0196B07373306143,$213E3DB04EE603D6,$688FF053A4CE1651,$A37D2CF77565C388,$081EAC8F25EFF41F,$CFB2ED656ABC2ECD,$202A3F9FA0FDCDD5
  Data.q $88F0B0D82387F310,$2427C5C6C4C59FA3,$FC4FC7E7D3FC67A6,$51E74F9FEE4E64F1,$A5E2E5FC2E8A0BF3,$AB5C575FE5E857CB,$1BEA72DF586FD7FC,$7C77D366E378DAFE
  Data.q $8FFDFAD2D459B081,$FBB8975BFE74753F,$9E4A0E9E4FC781E7,$F47DFF2857217F3D,$DEA8DFAFE3EFD8E5,$ADAC2F579B9BBECE,$756B6C3EB736686F,$1FFA67FE7576BABB
  Data.q $A1CDCCCCBA813975,$BB4BB3105D5DF0E6,$7B16213E61CC9C0D,$0E8FE73453F048A2,$E83DEEEBA2225997,$2ECDEEAF250DF2B7,$707D79803976B11C,$84EFFD943FDA576D
  Data.q $FF612FFB297FFD5D,$CDC04285B01C6BAD,$2E23F54004013A83,$87AF1AA055B2A3C5,$BDBBDB16FA22102C,$8018B8C14DF4AB9A,$F0733579BA208841,$ABF846D5FC623137
  Data.q $DFDF39F32168668D,$18FCDD00981644D0,$0A9A0A5FB98451E3,$A5400B92FA33C8E8,$447B63622B2A2361,$2A380154961FF42A,$C27A6C4FFECDF844,$229007A5EFE8B00F
  Data.q $2B1B3EE169A99BC4,$AB43EE2FC2F809AE,$2840FEE80226E603,$5A2D707BC87B61E5,$09F3ADCFC4880C06,$94892467B517C8CB,$495AC959FB6842FB,$3CEBF71D48F98736
  Data.q $302DAC5A224255CA,$A3E3D2F2990EB103,$D95208764A1C46EC,$FFC8EAF4242D686A,$2E638B5C1AB5CBF2,$3A3E8402653A5E93,$E90656B572C6E187,$C8EA2F11E8C92899
  Data.q $AA469B7D85CF98A7,$25FEECB08714DE6B,$25ED114761CA399C,$5E76B8C4D9C6C89D,$11AD339AEE427199,$59867E1306051E18,$45BAE38E40B5C3EF,$B14E11F3FA92BAB9
  Data.q $0E611B9AF29D0433,$578DAC7984F10DC1,$464ECD70CB18341B,$3F264485F8198EAE,$72741B219AC20267,$594ACAF948FBF34E,$C7DA5D78D9F6C3C2,$94F4D9F2BB2F6BD7
  Data.q $E2F0EE806A2335BE,$97547A072A9BC56A,$038A011211E1248C,$4EE59C9B6D73CC3D,$B8C1018D36C206B1,$9E802DB35F869A7C,$02BEE22A2104C5C7,$3AAFB7B379E133FF
  Data.q $33064E127A828616,$E7D84705D847205A,$84E6187089A9DC5E,$8B432DBE80A20D87,$0D509E73D0B4FDB7,$FA5FBB2D0DDBC3F8,$81B11C99F2B547A4,$28ED48702ECC7E2A
  Data.q $515349F7CC356A0D,$587ADD1F3906C766,$9AA88E8138873F2C,$3FDDE97452AD1C51,$7A7665827DD961B7,$10876A953EF65B18,$FEDDC0A6B5792A93,$69B7495651DF1C29
  Data.q $9995EFA2C9A7E4DD,$B23EECB9032F4597,$18ED0445F122664B,$D52E37F36A79CF69,$249EAD76495AA9AA,$F8C3AC12D8459F26,$67C0188C8FEC9D74,$FECB9821E324B8B0
  Data.q $C5D662CC70A858DA,$BD955B88B52A7A21,$D9C744D452E4B6DE,$AB731C2494681693,$FB56418B4202A3C2,$6A6D5066E84C5A9C,$10E71D1329CB2DF8,$DD9BEC8803F6FB4B
  Data.q $CA76D4AB554BFC8C,$EEB92904FE6C5569,$994AC4BF5F1BA626,$E59AF0E2E7FC00AE,$0D46BB78C740435D,$1678CF50E3AC57ED,$F19EA02DD4EEEF55,$EA3102B979806DD9
  Data.q $79292DF3B7C114A5,$0898CD7A5D886148,$E3E34828771829BE,$8C49E9633D368842,$E309B96A32564480,$082922BC8C67AF75,$DDA27C784824F426,$224E43742D87B294
  Data.q $491963E4C008E0F8,$608168607922DE9C,$82DBA677AB46C7B9,$2D958B3C5BFD5066,$D7F70AC258834D3E,$16B60F0AC65B8128,$5801F1D828752E03,$79D232A1F1E07223
  Data.q $AF2555342B06EE0F,$ACB1B6B8AE3EC1C1,$E00EF8B1D4D7CB95,$5B6478A50143BD6A,$ABE2B83421AFDC16,$817CA93F231CE4B5,$E406E9C7F335F8EA,$B214D8B695A18BAA
  Data.q $9BB0DD333FE43BC9,$E3E00324B29528D1,$BA2D68E455C86DB9,$B29404CED101FD38,$A170D0DBA6A7AB87,$FE61946F4790EF2B,$7496EFDA0B447E85,$4377CF7F87BD979D
  Data.q $AEE9632779798070,$B3C1B97B9AAE1809,$1B4E8BE55FF2BDA0,$F8098F9B5CC04D5A,$0E9578CF55B1F654,$5C04DFB1D25DB49A,$1BBEDEA27F38B990,$FD7149DB4F90BA10
  Data.q $A8EF897C932D0CD0,$CC60977B830FC85C,$7DC952C8B274FB70,$E446E92852CE2C75,$38129C104E7C86E0,$8AD11A6C61407920,$AAE5694F708ED34B,$D27ED6624263F629
  Data.q $CAFA8635CF8C48F6,$83CFD758E0170096,$D49CF0DF901A1097,$748777CE2E69DB49,$1F2AE345FB3A0DA4,$D4B7FFC66EF8D8AA,$896626D2FDAB4330,$2F621069F75482C4
  Data.q $12C4358C07EB9B6E,$9A5C2E372A4B44B2,$BE372AB44D7FF3B1,$5B3DFA81FA74954E,$5F00B4A278E5B420,$4388E66041FDE95F,$F7907E4370C309F5,$A20F91F5388EA5F9
  Data.q $774CF7B76F21CF1C,$20261BFA9ADF79D8,$B1E56795BE43045C,$193B91857B106480,$512998631018391D,$8422493F7539C129,$959A35DBCAF5C33A,$453C64401665F281
  Data.q $E5A18050338E10DC,$C09A9A5108693A83,$A16D9DE5F4DB7D77,$DCDF28790E97DF4A,$95D4338CEA92D1F1,$662C2B279E3832D1,$7C822CB1568E56A5,$7EEFBE1A97B982C5
  Data.q $9A67CCB6E2FF810B,$263FEC9453659AFD,$6E5F2297DF013073,$FF286D0E301F02B7,$F55929B8BCDA1E76,$768320403EFE1840,$E055AE6A72D40D79,$61BD1871DF3D27AF
  Data.q $53DFAF816EEC5C37,$FC2CBE61E34040A4,$324AC33A97F81757,$7C5B716CF15F1FEC,$B23AFB0F53BB511A,$3688B77D27F7E617,$E3DCFBCFD61C3236,$ECCB67A4B5AACCDB
  Data.q $AC5DA650DFF846C1,$311BC8C9CCB4661F,$8D086936F2CD4750,$A9C58A2EC56B577A,$CC0342E1B541F32F,$069D6C5B6C143A8F,$3CC5BD3D00258217,$DC996DE8F42B8479
  Data.q $869DCCDA1C2D11A1,$76190613429B66E3,$C3740175E3EEFC00,$467FB2BB294C7F98,$33F2BC026FD6D3E6,$996708CCED38EA38,$5FFE0D0137871368,$C64144A01350F98A
  Data.q $09723ACB57A88CB6,$ABD8AB8B43063413,$C8C9DDCE2E4E8B3E,$C67C9D0060F0D69B,$756FF59013FF06EB,$6EF26C71A033B332,$EFA540288C0B866F,$16EDDF85483BCDC8
  Data.q $9502C44BA32DEBE2,$173BF451650DD318,$B38939D3005C2980,$8D3EA0627C4B371C,$45E9CDDA228872A8,$4BA4AA62D769021B,$0374ED2D7E22A71D,$F7D496C72DA18EE9
  Data.q $2AE2E06E0D083345,$93EE9B41E0F525D0,$8529E0C84F91D157,$1764ECC28A3E8194,$CDA2598706A91B24,$8BC3B6C272C84655,$B9BE9CCB4369E972,$6793A7328EBD96D4
  Data.q $08054F3E5233B3C0,$A9E306AD74BAF989,$190629D08C4BCD2C,$779AA2D0CD5BE12D,$BBE6C0813B2BB255,$1E55924BEFDA4A32,$8B382EADC0E427F6,$A3DDD51AFB9C0EF3
  Data.q $7C441BA2B6E46C67,$27DF8ECFFA5106BF,$C30A5578D8F6AA08,$99B01378D8B9A2D8,$2CE24DB49A1F3D06,$7325A259CCDC496B,$40A0354E755DC312,$A08AC86D0866114E
  Data.q $9D9220B1353284D9,$F9CC373D2F189A18,$E3E29B3C8AA076A8,$759F186D82E7717D,$F51EC7D9A6A72418,$5F2C48B7549E538E,$31C42FC85F08DCC3,$8B936C60EF6E864F
  Data.q $671136DD1BA7289B,$275C479838E3E678,$06D01317FAAA743A,$62A3F5553DA60160,$E696BA48A2ADE6AD,$F03BC98AAB0B300D,$DA3AD3DBB1473E35,$C4B6DD10B8CED22E
  Data.q $F6A0C3577EF2CEB4,$17837C0D1058EB43,$82F14460C9DFA55D,$7C8C55D336853766,$F09ADE4C3DCE6C5B,$578B113BA1E226D9,$AAB2A9B5E4618522,$ABDC29F700F671C5
  Data.q $A6249A1D6F4DF803,$5BE1A0D32B8ED2B3,$CCFDC886845B03FC,$F3AA1075E8C979CD,$391D2905A9B3C0CC,$25158EBC0F37D4EA,$2B4E10B7E35B3670,$770926132E4F0331
  Data.q $5497EE099FECE950,$597A72B389F12889,$0262BA919EEAACD2,$631EBE2BD7168546,$4BFCC2CF673274D0,$6AB87E43A5C4F2E4,$4742CF0DB20511BF,$DC8AAC572AEE59DA
  Data.q $3643706E92E62803,$213377EBA245A231,$9E69FD360C3A463F,$5D9BA8364B5E43E0,$01B5C3D9A946AE3C,$5D25358255CA35D3,$6968E66B5CF603FC,$CA00CBEB114DCBE5
  Data.q $12E64B6EFB2ECFC5,$F3C808161DFA4CA1,$281E7D51BF5E13ED,$338EA0D9111A2FB9,$0C3A94D6D4412F73,$AF9457AECC7391DE,$5892D7CB6F9B5B21,$7D470A662A7B1768
  Data.q $4D5230B7FEDA9EF5,$317CA476BA6E11FE,$4D102833A69BEAE6,$20BE1601B01D538E,$3327B9F3F402D195,$8793DC78C220C8FB,$CA8DD9CA3548E0C1,$61401646EC984384
  Data.q $CA593C00453C2685,$9CBAE2EC540C7441,$2F19EB3D06297CF2,$C41B653A2CBDEACC,$6E6022AE2FD4CC4E,$CE341A646D5175D2,$A81424BEF7CEB360,$71870B8DAF16B5E4
  Data.q $42109C5FA1123E31,$71E715E806D9557B,$82C54A2F73CCC4AD,$4A4423B1237EA791,$A9D22CCA2FF07E40,$7C2AF9F78EAF3C89,$FA9DFA6FFB767B87,$5BBCC313204205F2
  Data.q $19F5494058D8B14F,$F5CB78E5B2E4C54B,$C48C6A912B44A762,$90C2F6D5B323B81E,$BBD739C535489E58,$A263A4AC6A75620F,$BBBF16E0170FD6A9,$A754A2AD35B871A5
  Data.q $20A51CA345EDF528,$1D492B093D1DF4C6,$9C48E372F6F9D27A,$B45A740F71077CC1,$AE223B9013289CF8,$DDC06A936F312E51,$2286779D9326E64F,$16ECE616F7482859
  Data.q $FB0C799A76F94938,$6F7A467C9A90DC54,$BCCAFDD9A22FD04B,$1A2D9F7337D5F1C8,$266D264F40AFF8D4,$C6E70B17F65E27B8,$7F5ECDD182DEEACB,$E9314CFA074B32BC
  Data.q $B3DB7C97F48B7A61,$3BF299997D889BB3,$90DE031DDCC09E12,$E2FDD28858D69816,$3773DB7AAF3736B1,$3668FFBD8F7CED1E,$3165700DBE7DF275,$620404CE04C9F4B6
  Data.q $E9D612EA92A977EF,$36BAE8FB03A9B341,$CCF7E031B87E44DF,$594FAA4A85B7D702,$FBF7944B7C2DCABD,$22427DF97C4E15A3,$5ADB13EDBF0411D6,$94AE4B51723C6FA6
  Data.q $CC3E01B6644D7FDC,$7A5D158DCAF92D22,$FBAE33F804CF48D7,$8E4E8C717E27523F,$3B332C971B18BFBB,$D37CA480769B7C8B,$039182F2B6432BE8,$D5DF17C10EDE3BCC
  Data.q $A6BD0920DD31E976,$83F69DB80D2C001B,$FCD342AF9A26BBE4,$1A43410FC6F07ED6,$DC88608DD3F4AFC1,$DA84F17696BB23AD,$049EE1458E72145E,$53BB152FF3E673F2
  Data.q $7A127371BA8E9A46,$A9D4275E821B215E,$B641F8899727BC33,$35317C093ECF9D74,$E870C0122A32AB14,$5CF3B9360F19F330,$168764303312C9F0,$C378647D3883638B
  Data.q $029E798C0CB20BF9,$2EB44BCACB035F58,$7B9030233062AECA,$ABCE711DF92EAA65,$B43D70E474A3A6F1,$FEC0C31117400626,$08A4140C35035EC9,$4E8734DABD99422C
  Data.q $6E46494AEE57DDCF,$6A84C010CDC4BCB1,$547A123D7ACECCD3,$981CA55F7C5399A0,$7A33856373253754,$30391FD82D3D1679,$AC8F14EA5A3180DD,$C04CEA271DD3B743
  Data.q $CDC6CEE489DA50A2,$254DCEDE68BA1E81,$FD845AA492D04B9A,$FC1FDD5C889BF79B,$68231A7D84695F42,$02DC5BA9BC8EF847,$3A7A129FDF03FA6C,$B40C042CAD74ECB1
  Data.q $E4D40C13D86C5DAA,$56525BF15F90CA72,$23A13CAF450177B7,$316D76FC8A1F5B6D,$FB43ACEF680AF5F6,$8151A2044E133E0E,$957775A7F409F538,$53156A98B29D15D0
  Data.q $ECDD4C6E94C4694B,$2C7D4D1EE11D3632,$3AD4DC5C3A4BE836,$9D83421B97DF65E5,$AD47A91D7BC95ECB,$B5C3999971A01055,$C8C60F5BFA929294,$D5790A9D7B08DD30
  Data.q $BF8E73F3CC7F121B,$D192E7B063F4290C,$2CA5CE5769D015E8,$EA998A9BC107B18E,$BE1DCF0A1BBBDDA7,$1454C6804F9F3E59,$946949821B54EB26,$D4A76A893EC21156
  Data.q $46557EB08631FA76,$F701DFFBF4D70D94
  Data.b $99,$15,$06
  darkwoodend:
  lightwood:
  Data.q $D7935869579D9C78,$C5264184025FDEB6,$9105A7021538C61A,$0C10612D04842994,$495888A297B1CE04,$51124209050808A8,$242082C4D040B968,$A0A145AC7A70C21A
  Data.q $45A0299450556088,$40C4263CC3101064,$B8FEE7F4EE79FB86,$8F6F8FF679EFAEF7,$419A5AEFBD7BDAEF,$03200E4812603BCD,$0B79A03F82000208,$F45B462D8313020E
  Data.q $6C9A9AB68D0C8C4D,$76867D9FD02D6343,$E085D3D635B9F3DE,$3C8FF246EEE2E1E5,$487B9BAF88FAFA4C,$58B4B113A891E87C,$22E793C4F4A4E0EF,$BA6408B4F98D8BBF
  Data.q $C2C2C9DA3B7A2B75,$B3FF9881FB80E629,$2133A7EEA980DA69,$214D210A6100DDA1,$FD0DA9CF818013CD,$696A4084187FC0D3,$01E00DF4F574A0EB,$2D0891210100260D
  Data.q $099BDC1696B6B6A4,$9CBBADED532D03F7,$2776A34685B6747D,$E7BBA1BE5F67ED99,$BDE5BED4EDA3DD40,$6CFFD3D05ECE272E,$AC3B5B73E2DCDA07,$0F7737572BEE03BD
  Data.q $03FCFD92FB5F83CF,$DF23B7FAFFC2C302,$C54EEFC9CC444BFC,$A6A43F29C971E8D2,$9394BC5F64674B9D,$ABBCB857794FE3FB,$AC29BD2B5C97173F,$CEFDFED4D7555514
  Data.q $DDEE9B1BDF86FADD,$CF1DEDA793F1E3FF,$FEBD5E07FB8A779E,$FBE4C4F8D0CDF073,$D595D999E9920FA9,$F1B151FE5D6CA935,$23FF69FF9C27D709,$A90B4B421718532E
  Data.q $1A7DA4420B84FA85,$AB6759CBBDA5AA60,$FDEEDB693A2A284F,$3DD46F9703B35D6C,$E27EDE5D42E3DBD2,$9FE3717B67FE9F6C,$3BFF644FF6827CAF,$D80BFEC85FFE1760
  Data.q $7C10905B021AE37F,$72264D0440534879,$F9D68A55647BEB9D,$CF4CFBD69680A9C6,$43D7859FCC37CA15,$A02F529F995F0B57,$D1D1C458949A8C32,$68D1E1C32B4BB36C
  Data.q $79EC05D08F1FB259,$C1FE6C8E9FD473CC,$DED59E479F0A95D6,$562F147DAC218567,$AA0AEFD9DA65FFA5,$710EF26C181D1001,$9B82E53A89426EC9,$AE569134DA1895B5
  Data.q $74E789D03B0E9EE6,$3DD0071A80D34672,$125EEF70D29B0771,$00C1238388053173,$CC7285A872E8B1E7,$66395A57331B7CFE,$4E7F627C4ABE882E,$3B8EE3BCD80B9F2D
  Data.q $CA7F516009765DE1,$B2F3123F05133684,$D84F82F64F8132D1,$6F7AB957531158A0,$11DD3E29BF50648E,$D8FBAF18F68FF125,$542ECEDF8162BEF7,$1A73B0FB289CADF8
  Data.q $C38EBE665B56D252,$C07620319EE169E7,$0FCE67C175324273,$4716DB6A992128D9,$5B6F4B80FF879B57,$6CCDEF5720845176,$7D19171C1AA0CF88,$3D4189A82AB263CD
  Data.q $4846D15728BC57B3,$69A742AB51DD873A,$A056B20CF51B83A6,$9467A8E404C4E78D,$9ED341EC223ACFD3,$B84C92463580B9C6,$01AF8EF117BF3467,$552496E37038AD47
  Data.q $1806FA25C492D3D1,$F349EAD08CA7374A,$579952C0E3AD7910,$69E99A6DB7088F5F,$E45C399846858994,$77981E01C2F5FD66,$2F17C85C55F7D392,$1671D81BFD003076
  Data.q $4F990E8130CA6C31,$FA4A7532EDAAA163,$F456C95A8A7501C1,$6B251323D2740BA6,$0D122DAF89DFD322,$B7D5C3244B49A50A,$87247A47775EA5CD,$20AD002C33F34727
  Data.q $73C06EAA9BE8AB83,$8354809E8811F702,$7D8D138BDF5B2AA7,$F2CB2771A44E5414,$1C5BB7055C06A172,$93805AFC9703F151,$4DB8596943FCF48D,$06B286F2757422B2
  Data.q $16DB54F78B479228,$108A83A8EF21AA41,$87E25733390CF2E8,$24B72C71495A1119,$8F5F60F66CEBE4F2,$6BED592BB3A8199C,$F14AE470DAAF776E,$A9E21BEBAED56907
  Data.q $FE774E0C13C39996,$7F62312E40CC1FF5,$764BF89307B80FDB,$369169320129AA5D,$12808B2E7A267CCC,$6EFAF10F2659BA12,$69CAD3D43C89BFB1,$CD794C66E42A7DC9
  Data.q $236A64F745593FDB,$85A7ABF950382331,$900FEAAD8F28E34F,$85B96DCA77690586,$A9F18119ACC2BE82,$7B51BE43F3DDA84A,$1000F4DF722EC3C1,$2EB562A9B75FD4DA
  Data.q $6A9DC2F60CC78565,$886D69109A4179DE,$ABB194E6B409D546,$F774ED100D65FCC2,$8742C545133B35AA,$FE49A9C7A2F594FD,$42375CF31F5DEA1E,$CADCEE9FC6CFE310
  Data.q $625D7FED0F80BBE8,$C81FF3D750C6D9B0,$F2BDB4B31EE6E588,$A413592F0D6BB02E,$50AEFA326CF0E457,$6EF60E0FBB5A05CC,$DDEF4C23AC8B89EF,$704F35D5E91777E0
  Data.q $86D2AFE62898D8BE,$719C89AE92125128,$04C0C1B42E9197F4,$DAA503595467B137,$B425F9ED5F6C0BC9,$0795563EAB387529,$A13A8CC92C5A9D22,$DC0798B99BD3AAA1
  Data.q $C6C5ED9BD0FCBBE7,$AC9DF8AADF96DAD3,$AB6537DC819D6A6D,$F501534E4B09F1D5,$21E514003A20FF85,$1E5675471A33175D,$ECE214569E3B32CF,$D4FDD4870ACFEEAC
  Data.q $06A991674E15BF29,$AEA50B303B11B410,$1674E4224005CD85,$73CC77F6A46165D3,$9E4E984B31E3F0EA,$732AD2A53AB2CF4E,$AE2AF23A0AE28E18,$EAC4AA11DDB657AC
  Data.q $6F48548E26ED57AE,$E1127672283F357E,$AD1F0905A208F1DA,$C3FD740FCFB6D996,$084BF1B59AEAB9D3,$18581F195BB80813,$DC111D6DBCD7DE65,$9BD91925C05BD8E4
  Data.q $7506FE1198565E15,$831AD37408128D0B,$C22B3B8C32EEF26F,$4988AA161600DC99,$541DAABD76554779,$257FE8E6687567D2,$8217DCEDDBB153D0,$FF57A5FFEE3FF608
  Data.q $7535CD7C451420FB,$41153E5A546F7839,$F124E0771BE38AF9,$08B08D33A04D0531,$CBEA3F5111467F2F,$89584619C3DABAE6,$DCB11EF07154C4B8,$B6144D90AFD9BA86
  Data.q $578F85ADFE83C53C,$AFB287D85C422F84,$3506FEE3F127DA24,$7D03B063CD1DC545,$371F57AE764ACC7A,$6D12F7B4A2587F69,$86FEF30A3E6CB384,$FB2DDFD73BFDCEB0
  Data.q $2CE33D252A9CC3CD,$F2AC866626BD37F6,$214D6A9D57BF46D9,$B69192A3847EFF4E,$F216467EAA4B0A4A,$8E2F8265AB0AEABA,$87FC3CB8112B5709,$75CA5180FDE7B4D2
  Data.q $B0E7CDCF0A96CC2E,$A082E367DDD88A2C,$7AEF1D4497037E81,$B99EA80F37B74233,$D6BBE97BDBF5C73F,$E7E009B9E6BF6E48,$8CAFC2E74CFC9251,$938CDB6089B85977
  Data.q $889E89670686FB21,$8E7CC89AE62F9246,$CD78747AF5D12E2F,$166173D9712887EA,$BF6CF8254E5AEE1C,$BDA65A6D656492C5,$E5EDD4DE9150D86E,$46C565B6C1E9CA7B
  Data.q $0B6B7459B98A7D5F,$97E987A786D8A0C9,$A7B9C42B3B587609,$1FC38F7A5B8089DF,$C8C0F1BF15EC5C1C,$700D6B2EDA7DAA34,$CB3122C32D79D9D0,$56AA2F1E9BFA3F53
  Data.q $33547533495DD4BE,$D4DE8179707F704E,$1A2AA31DC54E5B80,$D9D394A92D36B6F4,$DA4C9EBBD94A52B3,$D8DE0EFB6D7663A6,$0D3942B7B7A6EE18,$45C9E9F54DE03556
  Data.q $40D99EB421663C71,$6F3E1598BC4ED27A,$141B319BF8CC9525,$F1C70EAD9B63F8D4,$462EAA720A0D1BDF,$AA0426E157A82985,$51CE60261359EF97,$598944A05BFD3FE3
  Data.q $6AECDDED3DE0A63B,$0F63F8F0EA9B7185,$09788D7B2D17E1D4,$4DB44369DA888151,$9B85D35063CD9B0E,$DA8B2C914CC0224D,$7824DD95A438313E,$239A77863D2E6C46
  Data.q $E1D6A32D0264C213,$53E2F80F11D6C74A,$8E78C035F28BAF29,$F299D951B988CD94,$CAB5684CADE63ABC,$F9C496A85EEC05BF,$E5886F999BEB2F46,$D9D1A72B8F557FF6
  Data.q $C21FE61AC0785DF0,$4C488204E29BE94C,$120EC2A2389E3890,$1F99CA539EE4258C,$91286578B3178D5D,$D0B57E425318DF63,$5F114C4D9C12DB8C,$6A6F41AC709380D5
  Data.q $54FA675853AAEE3A,$0B87D1C46920A4FD,$948995081C7961E4,$8B23168D657273F4,$2FD4A7EDAD4DC4F7,$29923C04CE4D07E7,$F7A15F56E7CEC17D,$8B88A633EE078E66
  Data.q $22FA6625A8B0A139,$5A5C9D0939E16ED3,$05B3E86900AADFB7,$8CB04D14426FAEAF,$A2EE1109DE119932,$8A91EEA2968175B6,$F233F35F80D5C8A6,$45726311AD817C43
  Data.q $90CE55249F6B3D90,$5F55AB345852B236,$2722388753DBBF6D,$8D08AB61685A36B3,$588BE685D72BC16A,$8C8B8B2059DBA608,$68DB59BA7067E711,$B3954E9672BB92B0
  Data.q $230E320FF0E07C17,$96CAC4EFF1126613,$C4C993B006A1923A,$133637CC02FB9121,$FA50B9D66AB64B2C,$1B3CC3F525E6A180,$463C0D6F2CE85A33,$62E4B2EFF43AEE60
  Data.q $D23E463E4B5A6AF7,$40E980F88EFBC59C,$79049F12AD951502,$CE35CA565A51A74D,$1AB53308541000E6,$D4A70A8EB7CFC337,$29CFFAA4CE9219F2,$7E6A70AAD46CC072
  Data.q $D1643C81AF24E040,$3AAEC64F319B431F,$F0CE2658232D0C12,$18B532B6EAAE1F40,$75446E4A420D0E76,$CF5494EDA2BDDB16,$7BACF655C7F387F8,$44FBFCC929D47776
  Data.q $290F9C4C6A95BA4F,$2B7374E45FC94071,$42BA01A0749E99C6,$591F9145903C9DE4,$489FD145FC58F4AB,$AAB861605CDB46D0,$E52B2B2615DF453E,$5800CDBD5F62F1A5
  Data.q $F3669BD148F99EB9,$438339EF54F3D123,$C96F5741D068FB77,$AA49E889A7175F9C,$26FF42C3A65A1A64,$FFCD3B80249F95FA,$9B09C51FE16DF2A9,$F37321149EB3E0F5
  Data.q $B0298F19EC842290,$89F3AB0413DE4982,$FB3BDB92CC48A54B,$B594A6E4E56F7564,$70AB028CACDFB625,$D6D318616B10D456,$F3985BE9CB1B350F,$BEEAA0F4D3C7CA61
  Data.q $3B8233D7EF900756,$5B4990FFCDD91C4D,$2E0B37155D07AEF3,$F06B35599E36806A,$C2E9BA0D04F1B4DB,$E64E29C8AE3F2669,$7270727585BF90FB,$9986E814909F3A80
  Data.q $4865B45A3B7F35C0,$A7D54FF949E893F5,$67454CBE6BBA2AE5,$BE5CC5F171C91495,$929D233D32CD0798,$504ECC293ADEB5FD,$EA2A0D735F8AA222,$5A5BD89B22992C01
  Data.q $4C2085DF51900D58,$BB0F5C652DD96EED,$23B4008DD74A9B70,$ED9E1E22B10DDC76,$ECC2D5A1CCF6FB7A,$6AEB4608C2F94052,$9CC5191CCAFC470F,$1F2708FEAC193D22
  Data.q $E35167B10F4DE33F,$BB1177CB1205BEE4,$2BDAB833B1D4F2DA,$2F85B156810AB976,$BC2D322DF7230212,$674A31C32C9D0999,$19EA98F5EA5EE3C1,$D96129D5A05C99B2
  Data.q $C40F2D6BC6931C07,$806A65DF117A0B7B,$6E21CB0DFD77BBA7,$9E598B8A350598AC,$CE6503859505DDC6,$49840A4670015263,$5A029F9536C38E5D,$CF02DE7D6BF9B603
  Data.q $DFAC3921D1E2BA09,$156A4B7F3BB8DEF4,$C95F0CA33B117932,$717D9CC02D4E154F,$F32A4D79779214A3,$CE0F057AE85418DC,$22F60F1F834ABC8E,$2A4618910E99E693
  Data.q $42CED987BCFB1BB3,$CA1A29FC06AEF5FF,$476B9AF1DA3CF56C,$6D729893E99605F0,$4A21D3C59C84A34A,$C37AE60343DE2070,$F46E4EE1EFEAB237,$8BD2FEFD07F95322
  Data.q $CF1A4A7DE5B62CE9,$DA71FEB984EF9B04,$03E59F70C11DA10D,$C452E3B06AE38349,$7C71D6091FDB3C7E,$AB3DA6614EA22DC9,$62BE16E512F4A1F7,$5613A014F6D95A52
  Data.q $3393C42A0E7A8F69,$9CC990423666CF3E,$A13397915691E088,$F51E0F58B6DB0263,$4F8A754BCF0FD224,$0F0297F7392F4854,$ED085416F4E51F6B,$94BB2BC7B2ACF405
  Data.q $C4722D41D33328E4,$7715E4606245C4DC,$608EB14E82725033,$BD7D2579303F4AFD,$248E67281480190A,$F7963D2473734489,$B27886DEEEC6174A,$753FB88E901F4AC1
  Data.q $7727359B144E3324,$089B8C25C26AA0D3,$668C0F0143EBDC7F,$DBA9EBCA21A7DED2,$07EF3B068DAD02A5,$C5EE45780D12EB61,$D792447D973BB942,$40BADA422FD86CE5
  Data.q $E2EFD87DFDCFCD67,$9D99A476B35E7BED,$CFBB0B9E2206CAF9,$67F7EDACEDEC0EDC,$201198130E2310D6,$09812D24656C1084,$BBEA65D2473395AE,$70AA99DB62CD1E8B
  Data.q $1648F655AD428E50,$D2CDEA3A9E375102,$0E79927C4292E180,$91BDE53006B05A4E,$1DCEB595CB9AAE63,$783A9B60663DCE11,$1CE97F7E8DE1DAF7,$6E00D33645D448C9
  Data.q $3E2EB98A804CBBA0,$CEDF8375C43D7D9E,$F30C8856F6D021B9,$D1E81ACCE4D83682,$CB182E21DE83790A,$9C6E18A1AD19249D,$C8219BF9FBB2EE84,$7B99CCF1CFA84E46
  Data.q $61A324D9331E713D,$D713BBF98CE52AA2,$BE8D9BD03514899E,$100B4479C3C9A5FB,$6DA09FCCBEBE6F7C,$58E07891F74B393B,$FB4CA1E0A0ADAB47,$2FF63801A20614B3
  Data.q $BA42E5EA03427B90,$74CD709B0CB2D806,$D1FA38F03F3E8584,$B5C231265F73D134,$BAA262402E90A3E2,$2B1A6FB187E1EF79,$BD15A9EA08BBBDB9,$92DCAC7E8F5B10C8
  Data.q $5ACAB52952079F9C,$85D0C741712884BD,$8567C222B829DCCC,$CECCC7276C1A7337,$8A876F8155AF6778,$4456A3ACCF89DF0B,$4EC04C38046204C3,$99538AAB378F598A
  Data.q $11751B9C4C132C39,$9C45EDEE761A2233,$9EE05F7B9B94C759,$02F0074E681838EB,$0A5796BED52FC2AB,$2AD6362FEBB0893A,$6204A344D6C617A7,$50670C0E1B4ADBA0
  Data.q $01CED6AD793715D9,$1A65DF03323F2E0F,$DB2FB93BF0EEED62,$0D138E23F3F78216,$C6641E6D8F69F7F9,$DB4A31E6C1D31411,$A98F5B5F4CA1E322,$C763A9E089076095
  Data.q $1D0AB525F5A453FA,$15CE44CB234164B5,$7BEE2A8AEB5CA40B,$D7AD7AEB57BA13E2,$1AF38F98827DCF1D,$92FD0997ADF96E50,$8AEC7C4281C580E5,$CFB30B7F9A9F6F40
  Data.q $32F84F5301E5D67A,$47278AE604EF307A,$036B72A9B378F05C,$CE2FCF7064816C22,$7A1C6A345576F90D,$650E19EDB80BA4A8,$F6C198FE8E1D32CF,$1B73069009F7562B
  Data.q $2FEA7A96A7D2F9A1,$777A494213A766D4,$0F63387256FA7995,$4EDD5C81A968680D,$58DEFFF7CFE253AB,$FD02C45BAD719CA3,$929259D3628FB9A4,$0B401AF14C570A9E
  Data.q $582303D96E4BC441,$445EE1DC3887AD7B,$75BDF936676C7EF4,$08C23723AC0AE581,$65DDD38CF9DFD57A,$C71CBCD4067D83B0,$2CCD783938761225,$19220324AED837B3
  Data.q $9CE6852EE3E8C8BF,$CE4CD22C7BAFF465,$56D15618AF1FD68F,$1F853184D63B36C7,$20889EC479185B58,$50BDF7F727E0AD62,$ED6C50173B8FA33E,$2D772F434236B8EB
  Data.q $2545AFED2F299790,$92ECCD42E1D62205,$E8E2DF2BD4DFAF37,$E73CCB3165E15483,$5D8068261B9E7398,$0493F4B1E84E2192,$F2FCBBA0346DCAE9,$8B76BE23B7B9DE58
  Data.q $45D4B28F73B0432A,$239DAD1C44A5D42A,$73CA07E0A7908E19,$C6A7038BB4888E30,$91FCF3D433236967,$C04EF740B8CC2B2E,$38A1D33EFF0BA04C,$956FC740FF517895
  Data.q $D4C99C5541967048,$D2433C970C72FFB6,$685D25D6870C218D,$01E4676D0CA9B62F,$0D656A7E037F9BCD
  lightwoodend:
EndDataSection

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 3:39 am
by netmaestro
It has three looks currently, dark wood, light wood and plastic:

Image

You can render it in any size, it always looks the same because everything is drawn with the vector drawing library.

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 6:03 am
by useful
it's perfect!!!

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 6:07 am
by idle
Looks good, it draws properly on linux but it crashes when I start a clock, the stop works though. Haven't figured out whats causing it yet.

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 8:13 am
by Michael Vogel
Well done - maybe you'd change the font style to "modern" when using plastic...

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 1:53 pm
by davido
@netmaestro,
Very nice looking, functional clocks that work fine on my MacBook.

There are two very minor visual issues on the Mac:

1. Numbers 6,7,8 and 9 are all displaced by plus one 'minute' ; all the rest are fine.
2. The 'left' and 'right' buttons have truncated text: 'Press Left Cloc' and 'Press Right C'

Re: ChessClock early alpha

Posted: Sat Apr 25, 2020 10:30 pm
by netmaestro
Fixed a bug in the code that had the clock running slow. Code updated in the first post. Tested running for two hours, doesn't lose or gain a second. Interestingly, one of the best high-end analog clocks for sale at $249 boasts that its time is accurate to +-1 second per hour. Which is pretty bad given the performance of modern timepieces that keep within +-3 seconds per month.

Re: ChessClock early alpha

Posted: Tue Apr 28, 2020 2:06 pm
by ebs
Hi netmaestro,

The clock really is beautiful!

If it's not being too pushy, can I make a request? I'm staying with PureBasic 5.43 LTS for a number of reasons.
That version doesn't have the #PB_Path_Winding flag, or the PathPointX() and PathPointY() procedures.
I removed the #PB_Path_Winding flag and it didn't seem to make any visible difference.

However, even after installing the correct font, I can't get the numbers to appear.
Is there something I can do to simulate the PathPointX() and PathPointY() procedures?

Thanks,
Eric

Re: ChessClock early alpha

Posted: Wed Apr 29, 2020 9:08 pm
by netmaestro
Decided it's too problematic to draw the clockface each time. It has problems on different platforms, sometimes the font isn't available and it all looks wrong or doesn't draw at all, etc. So I drew the clockface at a clock size of 500 and saved the image. Converted it to datasection data and now the clock carries the face, correctly drawn, with it. Clock sizes up to 1000 look fine and no need for a font. Updated code in first post.

Re: ChessClock early alpha

Posted: Wed Apr 29, 2020 9:19 pm
by ebs
I made my two #PB_Path_Winding edits and it looks great. Thank you!

Re: ChessClock early alpha

Posted: Fri May 01, 2020 7:44 pm
by Kwai chang caine
What can i say .....words exists for define this splendid code and effect ? :oops:
The minimum i can say, it's thanks a lot for sharing 8)
The board chess, the clock, what splendid thing you imagine now ??