]> code.delx.au - gnu-emacs-elpa/blobdiff - chess-sound.el
Try to improve the promotion situation on ICS by allowing chess-ply to query for...
[gnu-emacs-elpa] / chess-sound.el
index 08b2f7f7bd2264e85a48a5636e4a8d87d0d30f4d..ed1ce532d5e51984c5fb988b74305ea5022a3e69 100644 (file)
@@ -3,7 +3,6 @@
 ;; This is very similar to chess-announce, except it uses specific
 ;; .WAV files instead of text-to-speech.
 ;;
-;; $Revision$
 
 (require 'chess-game)
 
   :group 'chess-sound)
 
 (defsubst chess-sound (file)
-  (funcall chess-sound-play-function
-          (expand-file-name (concat file ".wav")
-                            chess-sound-directory)))
+  (ignore-errors
+    (funcall chess-sound-play-function
+            (expand-file-name (concat file ".wav")
+                              chess-sound-directory))))
 
 (defsubst chess-sound-play (file)
   (apply 'call-process chess-sound-program
@@ -58,7 +58,8 @@
         (file-readable-p (expand-file-name "move.wav"
                                            chess-sound-directory))
         (or (eq chess-sound-play-function 'play-sound-file)
-            (file-executable-p chess-sound-program))))
+            (and chess-sound-program
+                 (file-executable-p chess-sound-program)))))
 
    ((eq event 'move)
     (let* ((ply (chess-game-ply game (1- (chess-game-index game))))
@@ -69,8 +70,8 @@
              (chess-sound "move"))
        (let* ((source (chess-ply-source ply))
               (target (chess-ply-target ply))
-              (s-piece (chess-pos-piece pos source))
-              (t-piece (chess-pos-piece pos target))
+              (s-piece (and source (chess-pos-piece pos source)))
+              (t-piece (and target (chess-pos-piece pos target)))
               (which (chess-ply-keyword ply :which))
               text)
          (cond
            (chess-sound "O-O"))
           ((chess-ply-keyword ply :long-castle)
            (chess-sound "O-O-O"))
-          ((= t-piece ? )
+          ((and s-piece t-piece (= t-piece ? ) target)
            (if which
                (chess-sound (char-to-string which)))
            (chess-sound (format "%c_" (downcase s-piece)))
            (chess-sound (chess-index-to-coord target)))
-          (t
+          ((and s-piece t-piece target)
            (if which
                (chess-sound (char-to-string which)))
            (chess-sound (format "%c_" (downcase s-piece)))
            (chess-sound (format "%c_" (downcase t-piece)))
            (chess-sound (chess-index-to-coord target))))
 
+         (if (chess-ply-keyword ply :promote)
+             (chess-sound
+              (format "%c_" (downcase
+                             (chess-ply-keyword ply :promote)))))
          (if (chess-ply-keyword ply :en-passant)
              (chess-sound "enpassant"))
          (if (chess-ply-keyword ply :check)