The forum

[Script] Chessmaster: Grandmaster Edition

The final installment of the best-selling chess series of all time

Author Replies
Justinian Tuesday 7 July 2015 at 18:15
JustinianAnonymous

Description of the program

Chessmaster: Grandmaster Edition is the final installment of the Chessmaster series, which is the best-selling chess software in history.

Workarounds used

On Windows, the user browses Chessmaster's collections of tutorials by using navigation buttons. However, most of these buttons are broken in Wine (see https://appdb.winehq.org/objectManager.php?sClass=version&iId=10198). I have tested my scripts with Wine versions of 1.6.2, 1.7.45 and 1.9.0, and I have tested both the x86 and x64 architectures, but the buttons remain broken.

To work around this (at least until the issue is fixed in Wine), it is necessary to ensure that all tutorials are accessible from the front pages of their respective sections, so that users never need to use the navigation buttons. As such, I have created a seperate script (called "Chessmaster Grandmaster Edition - Tutorial Patch") to restructure the tutorial directories so that all tutorials appear on the front pages of their respective sections.

This is achieved in the installation script by:

  1. Copying all tutorial files into folders that are accessible without using the broken navigation buttons.
  2. Using cat and sed to modify the game's "Curriculum.dat" file, so that the game recongises the copied tutorial files.

Known issues

  • The Windows installer for Chessmaster: Grandmaster Edition can sometimes freeze. Killing the virtual drive and restarting the installation will resolve this.
  • Radio buttons do not work properly, so certain settings cannot be changed. This should not significantly impact on typical usage.
  • Menu headings (e.g. "File", "Edit", "Help", etc.) have a purple tinge.

Screenshots

Playing a game

 

Chess puzzles

 

Browsing the tutorials, after installing the game using an old version of the installation script. That old version of the script did not contain the workaround for the tutorial browsing issue. The navigation buttons on the sidebar (e.g. "Arsenal", "Strategy", etc.) do not function correctly, so most of the tutorials were inaccessible.

 

Browsing the tutorials, after installing the game using a newer version of the installation script. This newer version of the script contains the workaround for the tutorial browsing issue (hence why the contents of "Arsenal", "Strategy", etc. are appearing even when their respective buttons are not selected).

Questions

  1. Should I create seperate forum threads for the patch scripts? Currently I am including them in this thread.
    Answer: Leave it as it is.
  2. Should I merge "Chessmaster Grandmaster Edition - Tutorial Patch" into the main script, seeing as it is necessary to work around a major bug?
    Answer: Yes
  3. "Chessmaster Grandmaster Edition - Tutorial Patch" requires the use of a modified .dat file. Is PlayOnLinux able to host this file so that users can download it? If you look at its contents in a text editor, it is fairly easy to verify that the file is not malicious.
    Answer: No
  4. Would it be acceptable if I hosted the modified .dat file myself, via Dropbox?
    Answer: There is no need to do this anymore. The main installation script now disassembles, patches and reassembles the "Curriculum.dat" file using cat and sed commands, without any need to download anything.

Scripts

Chessmaster: Grandmaster Edition

#!/usr/bin/env playonlinux-bash
# Date : (2015-07-07 13-33)
# Last revision : (2016-01-03 10-09)
# Wine version used : 1.6.2 (amd64)
# Distribution used to test : Linux Mint 17.2 KDE 64-bit
# Author : Justinian
[ "$PLAYONLINUX" = "" ] && exit 0
source "$PLAYONLINUX/lib/sources"

TITLE="Chessmaster: Grandmaster Edition"
PREFIX="ChessmasterGrandmasterEdition"
NEEDED=4.2.0

POL_SetupWindow_Init
POL_AdvisedVersion $NEEDED || POL_Debug_Message "$TITLE works better with $APPLICATION_TITLE $NEEDED\nPlease update"
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Ubisoft" "http://www.ubi.com/" "Justinian" "$PREFIX"

# I had to split the following text into two seperate messages,
# as it would otherwise not fit in the window when displayed.
# I could have saved an extra line by replacing "Workaround:\n" with "Workaround: ",
# and that would have allowed the text to barely fit within the window.
# However, it is likely that the length of the text will change when translated to other languages,
# and would therefore not fit in the window for certain languages.
POL_SetupWindow_message "$(eval_gettext 'Known issues and workarounds:\n\n==== ISSUE 1 ====\nThe Ubisoft installation window sometimes stops responding during the installation.\n\nWorkaround:\nIf the Ubisoft installation window stops responding, then use $APPLICATION_TITLE to select "Tools" -> "Close all $APPLICATION_TITLE software". Then restart the installation.')" "$TITLE"
POL_SetupWindow_message "$(eval_gettext 'Known issues and workarounds:\n\n==== ISSUE 2 ====\nWhen browsing the tutorials in $TITLE, the navigation buttons to the left of the tutorials do not work.\n\nWorkaround:\nDuring the installation, $APPLICATION_TITLE will automatically patch $TITLE so that all tutorials can be accessed without using the broken navigation buttons. The navigation buttons will still be broken, but you will have no need to use them.')" "$TITLE"

POL_SetupWindow_message "$(eval_gettext 'Please insert the game media into your disk drive.')" "$TITLE"

POL_SetupWindow_cdrom
POL_SetupWindow_check_cdrom "Chessmaster Grandmaster Edition En/Chessmaster Grandmaster Edition.msi"

POL_Wine_SelectPrefix "$PREFIX"
# Chessmaster Grandmaster Edition's chess engine is available as both 32-bit and 64-bit executables.
# Presumably, the 64-bit executable should offer better performance.
# As such, PlayOnLinux should use a 64-bit Wine prefix if possible.
POL_System_SetArch "auto"
POL_Wine_PrefixCreate

POL_Wine start /unix "$CDROM/Autorun.exe"
POL_Wine_WaitExit "$TITLE"

POL_SetupWindow_wait "$(eval_gettext 'Please wait while $TITLE is installed.')" "$TITLE"

POL_Shortcut "gu.exe" "Chessmaster Grandmaster Edition" "" "" "Game;BoardGame;KidsGame"
POL_Shortcut_Document "Chessmaster Grandmaster Edition" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Chessmaster® Grandmaster Edition Manual.pdf"

POL_System_TmpCreate "$PREFIX"

# Temporarily rename tutorials with identical names,
# so that they do not conflict when copied into the same folder.
mv "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Arsenal/Mastery Quiz.tut" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Arsenal/Arsenal - Mastery Quiz.tut"
mv "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Strategy/Mastery Quiz.tut" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Strategy/Strategy - Mastery Quiz.tut"

# Copy all tutorials into folders that are accessible without
# using Chessmaster: Grandmaster Edition's navigation buttons
# (since these buttons are broken in Wine).
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Intermediate/bruce diagnostic/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Intermediate/Tutorials/"
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Intermediate/Endgame Quiz/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Intermediate/Tutorials/"
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Advanced/Puzzles/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/Advanced/Match the masters/"
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Arsenal/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Intro/"
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Art of Learning/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Intro/"
cp -r "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Strategy/." "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Intro/"

# Change the names of the original tutorial files back to their original names.
mv "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Arsenal/Arsenal - Mastery Quiz.tut" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Arsenal/Mastery Quiz.tut"
mv "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Strategy/Strategy - Mastery Quiz.tut" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/Tutorials/josh academy/Josh Strategy/Mastery Quiz.tut"

# The "Curriculum.dat" file tells Chessmaster: Grandmaster Edition where its tutorial files are located.
# Since we have copied many of the tutorial files into new locations,
# we need to patch the default "Curriculum.dat" file to recognise these new locations.
# Furthermore, it would be nice to keep a backup of the existing "Curriculum.dat" file.
mv "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/TData/Curriculum.dat" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/TData/Curriculum.dat.old"
cp "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/TData/Curriculum.dat.old" "$POL_System_TmpDir/Curriculum.dat.old"
cd "$POL_System_TmpDir"

# Extract lines that need to be converted into headers from "Curriculum.dat.old".
sed -n 14p Curriculum.dat.old > headers1.txt    # Beginning -> Tutorials
sed -n 158p Curriculum.dat.old >> headers1.txt    # Beginning -> Drills
sed -n 214p Curriculum.dat.old >> headers1.txt    # Intermediate -> Tutorials
sed -n 256p Curriculum.dat.old >> headers1.txt    # Intermediate -> Drills
sed -n 301p Curriculum.dat.old >> headers1.txt    # Intermediate -> Larry Evans' Endgame Quiz
sed -n 270p Curriculum.dat.old >> headers1.txt    # Intermediate -> Rating Exam
sed -n 306p Curriculum.dat.old >> headers1.txt    # Advanced -> Match the Masters
sed -n 379p Curriculum.dat.old >> headers1.txt    # Advanced -> Drills
sed -n 321p Curriculum.dat.old >> headers1.txt    # Advanced -> Nunn's Puzzles
sed -n 399p Curriculum.dat.old >> headers1.txt    # Kids -> Tutorials
sed -n 542p Curriculum.dat.old >> headers1.txt    # Kids -> Drills
sed -n 598p Curriculum.dat.old >> headers1.txt    # Kids -> Josh Games
sed -n 699p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Introduction
sed -n 728p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Arsenal
sed -n 742p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Strategy
sed -n 804p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> The Art of Learning
sed -n 855p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Endgame Course
sed -n 756p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Psychology of Competition
sed -n 788p Curriculum.dat.old >> headers1.txt    # Josh Waitzkin's Academy -> Annotated Games
sed -n 892p Curriculum.dat.old >> headers1.txt    # Larry Christiansen Attacking Chess -> Attacking Chess
sed -n 908p Curriculum.dat.old >> headers1.txt    # Larry Christiansen Attacking Chess -> Christiansen vs Chessmaster

# Convert the extracted lines into headers, by adding the appropriate suffix to each line.
sed 's/\r/,HEADER,0\r/' headers1.txt > headers2.txt

# Indent the headers appropriately.
sed 's/^/\t/' headers2.txt > headers.txt

# At various points during the construction of the new "Curriculum.dat" file,
# it will be necessary to add the following strings:
# "\t{\r\n", "\t}\r\n" and "\t}\r\n\t\r\n".
# Rather than repeatedly reconstructing these strings,
# it is better to construct them once, store them in files and reuse them.
cat << EOF >> open1.txt
    {
EOF
sed 's/$/\r/' open1.txt > open.txt
cat << EOF >> close1.txt
    }
EOF
sed 's/$/\r/' close1.txt > close.txt
cat << EOF >> close_line1.txt
    }
    
EOF
sed 's/$/\r/' close_line1.txt > close_line.txt

# Construct the new "Curriculum.dat" file.
#
# Sections of "Curriculum.dat.old" that do not need to be modified can be copied as is,
# using a single sed command.
#
# However, each section that needs to be modified requires a block of 5 commands.
# These command blocks are structured as follows:
# "sed" to get the appropriate header line from "headers.txt"
# "cat" to get an opening brace from "open.txt"
# "sed" to get the content for the current block from "Curriculum.dat.old"
# "sed" to indent the content obtained in the previous step (sometimes this requires 1 tab, other times it requires 2 tabs)
# "cat" to get a closing brace (either from "close.txt" or "close_line.txt", depending on whether a trailing newline is required)

sed -n 1,15p Curriculum.dat.old > Curriculum.dat

# Beginning -> Tutorials
sed -n 1p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 17,154p Curriculum.dat.old > B-T.txt
sed 's/^/\t\t/' B-T.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Beginning -> Drills
sed -n 2p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 160,211p Curriculum.dat.old > B-D.txt
sed 's/^/\t/' B-D.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 156,215p Curriculum.dat.old >> Curriculum.dat

# Intermediate -> Tutorials
sed -n 3p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 217,247p Curriculum.dat.old > I-T.txt
sed 's/^/\t\t/' I-T.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Intermediate -> Drills
sed -n 4p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 258,267p Curriculum.dat.old > I-D.txt
sed 's/^/\t/' I-D.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Intermediate -> Larry Evans' Endgame Quiz
sed -n 5p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 303p Curriculum.dat.old > I-L.txt
sed 's/^/\t/' I-L.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Intermediate -> Rating Exam
sed -n 6p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 272,298p Curriculum.dat.old > I-R.txt
sed 's/^/\t/' I-R.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 249,307p Curriculum.dat.old >> Curriculum.dat

# Advanced -> Match the Masters
sed -n 7p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 308,318p Curriculum.dat.old > A-M.txt
sed 's/^/\t/' A-M.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Advanced -> Drills
sed -n 8p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 381,396p Curriculum.dat.old > A-D.txt
sed 's/^/\t/' A-D.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Advanced -> Nunn's Puzzles
sed -n 9p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 323,376p Curriculum.dat.old > A-N.txt
sed 's/^/\t/' A-N.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 319,400p Curriculum.dat.old >> Curriculum.dat

# Kids -> Tutorials
sed -n 10p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 401,538p Curriculum.dat.old > K-T.txt
sed 's/^/\t\t/' K-T.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Kids -> Drills
sed -n 11p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 544,595p Curriculum.dat.old > K-D.txt
sed 's/^/\t/' K-D.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Kids -> Josh Games
sed -n 12p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 600,611p Curriculum.dat.old > K-J.txt
sed 's/^/\t/' K-J.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 540,700p Curriculum.dat.old >> Curriculum.dat

# Josh Waitzkin's Academy -> Introduction
sed -n 13p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 701,722p Curriculum.dat.old > J-I.txt
sed 's/^/\t/' J-I.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# "Josh Waitzkin's Academy -> Arsenal" and "Josh Waitzkin's Academy -> Strategy" present special cases.
# Earlier in the script, tutorials from these categories were renamed,
# so that their filenames did not conflict when the files were copied into the same folder.
# As such, the "Curriculum.dat" file needs to be modified to recognise the new filenames.

# Josh Waitzkin's Academy -> Arsenal
sed -n 14p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 730,737p Curriculum.dat.old > J-A.txt
sed -n 738p Curriculum.dat.old > J-A_tmp.txt
sed 's/\t/\tArsenal - /' J-A_tmp.txt >> J-A.txt
sed -n 739p Curriculum.dat.old >> J-A.txt
sed 's/^/\t/' J-A.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Josh Waitzkin's Academy -> Strategy
sed -n 15p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 744,751p Curriculum.dat.old > J-S.txt
sed -n 752p Curriculum.dat.old > J-S_tmp.txt
sed 's/\t/\tStrategy - /' J-S_tmp.txt >> J-S.txt
sed -n 753p Curriculum.dat.old >> J-S.txt
sed 's/^/\t/' J-S.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Josh Waitzkin's Academy -> The Art of Learning
sed -n 16p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 806,852p Curriculum.dat.old > J-T.txt
sed 's/^/\t/' J-T.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Josh Waitzkin's Academy -> Endgame Course
sed -n 17p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 857,889p Curriculum.dat.old > J-E.txt
sed 's/^/\t/' J-E.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Josh Waitzkin's Academy -> Psychology of Competition
sed -n 18p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 758,785p Curriculum.dat.old > J-P.txt
sed 's/^/\t/' J-P.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Josh Waitzkin's Academy -> Annotated Games
sed -n 19p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 790,801p Curriculum.dat.old > J-G.txt
sed 's/^/\t/' J-G.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 723,893p Curriculum.dat.old >> Curriculum.dat

# Larry Christiansen Attacking Chess -> Attacking Chess
sed -n 20p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 894,904p Curriculum.dat.old > L-A.txt
sed 's/^/\t/' L-A.txt >> Curriculum.dat
cat close_line.txt >> Curriculum.dat

# Larry Christiansen Attacking Chess -> Christiansen vs Chessmaster
sed -n 21p headers.txt >> Curriculum.dat
cat open.txt >> Curriculum.dat
sed -n 910,916p Curriculum.dat.old > L-C.txt
sed 's/^/\t/' L-C.txt >> Curriculum.dat
cat close.txt >> Curriculum.dat

sed -n 906,918p Curriculum.dat.old >> Curriculum.dat

# Copy the new "Curriculum.dat" file to the appropriate location.
cp "$POL_System_TmpDir/Curriculum.dat" "$WINEPREFIX/drive_c/$PROGRAMFILES/Ubisoft/Chessmaster Grandmaster Edition/Data/TData/Curriculum.dat"

POL_System_TmpDelete

POL_SetupWindow_Close
exit

 

Chessmaster: Grandmaster Edition - Patch 1.01

#!/usr/bin/env playonlinux-bash
# Date : (2015-06-15 10-21)
# Last revision : (2016-01-09 08-50)
# Wine version used : 1.6.2 (amd64)
# Distribution used to test : Linux Mint 17.2 KDE 64-bit
# Author : Justinian
[ "$PLAYONLINUX" = "" ] && exit 0
source "$PLAYONLINUX/lib/sources"

TITLE_REQUIRED="Chessmaster: Grandmaster Edition"
TITLE="Chessmaster: Grandmaster Edition - Patch 1.01"
PREFIX="ChessmasterGrandmasterEdition"

POL_SetupWindow_Init
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Ubisoft" "http://www.ubi.com/" "Justinian" "$PREFIX"

if [ "$(POL_Wine_PrefixExists "$PREFIX")" = "True" ]
then
    POL_System_TmpCreate "$PREFIX"
    
    POL_SetupWindow_InstallMethod "LOCAL,DOWNLOAD"
    
    if [ "$INSTALL_METHOD" = "LOCAL" ]
    then
        POL_SetupWindow_browse "$(eval_gettext 'Please select the setup file to run.')" "$TITLE"
        INSTALLER="$APP_ANSWER"
    elif [ "$INSTALL_METHOD" = "DOWNLOAD" ]
    then
        cd "$POL_System_TmpDir"
        POL_Download "http://patches.ubi.com/chessmaster_xi/chessmaster_xi_1.01.exe" "dd2346ae560ad2fa3b03704d638f812b"
        INSTALLER="$POL_System_TmpDir/chessmaster_xi_1.01.exe"
    fi
    
    POL_Wine_SelectPrefix "$PREFIX"
    
    POL_Wine_WaitBefore "$TITLE"
    POL_Wine "$INSTALLER"
    
    POL_System_TmpDelete
else
    POL_Debug_Fatal "$(eval_gettext 'This is an installer for an update or an addon;\nPlease install $TITLE_REQUIRED first')"
fi

POL_SetupWindow_Close
exit

 

Chessmaster: Grandmaster Edition - Patch 1.02

#!/usr/bin/env playonlinux-bash
# Date : (2015-06-15 10-21)
# Last revision : (2016-01-09 08-55)
# Wine version used : 1.6.2 (amd64)
# Distribution used to test : Linux Mint 17.2 KDE 64-bit
# Author : Justinian
[ "$PLAYONLINUX" = "" ] && exit 0
source "$PLAYONLINUX/lib/sources"

TITLE_REQUIRED="Chessmaster: Grandmaster Edition"
TITLE="Chessmaster: Grandmaster Edition - Patch 1.02"
PREFIX="ChessmasterGrandmasterEdition"

POL_SetupWindow_Init
POL_Debug_Init

POL_SetupWindow_presentation "$TITLE" "Ubisoft" "http://www.ubi.com/" "Justinian" "$PREFIX"

if [ "$(POL_Wine_PrefixExists "$PREFIX")" = "True" ]
then
    POL_System_TmpCreate "$PREFIX"
    
    POL_SetupWindow_InstallMethod "LOCAL,DOWNLOAD"
    
    if [ "$INSTALL_METHOD" = "LOCAL" ]
    then
        POL_SetupWindow_browse "$(eval_gettext 'Please select the setup file to run.')" "$TITLE"
        INSTALLER="$APP_ANSWER"
    elif [ "$INSTALL_METHOD" = "DOWNLOAD" ]
    then
        cd "$POL_System_TmpDir"
        POL_Download "http://patches.ubi.com/chessmaster_xi/chessmaster_xi_1.02.exe" "1e66273ad3b5f4eabb90055b8e7a3cd4"
        INSTALLER="$POL_System_TmpDir/chessmaster_xi_1.02.exe"
    fi
    
    POL_Wine_SelectPrefix "$PREFIX"
    
    POL_Wine_WaitBefore "$TITLE"
    POL_Wine "$INSTALLER"
    
    POL_System_TmpDelete
else
    POL_Debug_Fatal "$(eval_gettext 'This is an installer for an update or an addon;\nPlease install $TITLE_REQUIRED first')"
fi

POL_SetupWindow_Close
exit

 

Chessmaster: Grandmaster Edition - Tutorial Patch

(This script has been merged into the main script, as per petch's advice)

 

Icons and installer resources

Chessmaster: Grandmaster Edition-48x48.png

 

Chessmaster: Grandmaster Edition-22x22.png

 

left.png

 

top.png

 

EDIT (2015-07-07): I have attempted several times to copy the images into my post. It seems to work fine, but after I click "Send", no images are displayed. Can anyone advise me on what to do about this?

EDIT 2 (2015-07-29): I have edited this post in response to feedback from MTres19 and petch.

EDIT 3 (2016-01-09): I have automated the process of patching the "Curriculum.dat" file, and I have merged the Tutorial Patch into the main script.

Edited by Justinian

MTres19 Friday 10 July 2015 at 17:21
MTres19Anonymous

I'm no expert, but some of the buttons in QuickTime Player were broken until I added

POL_Call POL_Install_ie8

to my script. You might also try some of the POL_Install_msxml* function scripts.

 

As for pictures, you'll have to upload them to a file hosting website, like Google Drive, then get an exact path to the URL of your image. There's a tutorial here: https://support.google.com/drive/answer/2881970?hl=en. Paste the URL you end up with in step 7 of the tutorial into a browser. You'll be redirected, then you'll see your image. Copy the URL you now see in your browser. Then click the button with an icon that looks like a picture in the editing toolbar for the text box on this forum. Enter the URL you copied into the "URL" field, and in a moment you should see a preview of your picture. That's how I've done it, anyway. Dropbox might make it easier, but I don't know for sure.

Hope that's some help.

-Matthew

 

PS: I'm definitely not a staff member, so I can't say whether you should submit it to the "Supported software" section yet.

petch Friday 10 July 2015 at 20:08
petch

Hi Justinian,

Should I create seperate forum threads for the patch scripts? Currently I am including them in this thread.

That's ok, as long as we tell what script(s) we're talking about when there's some ambiguity, we should be able to understand each other ;)

Should I merge "Chessmaster Grandmaster Edition - Tutorial Patch" into the main script, seeing as it is necessary to work around a major bug?

Personally, if the game is barely usable without that patch, I'm for including it into the main script. Maybe we'll want to leave the choice to use the patch to the user, in case there's an issue related to the patch, or some new version of Wine fixes the issue in the first place; Like at very least keep a backup of the original file around?

"Chessmaster Grandmaster Edition - Tutorial Patch" requires the use of a modified .dat file. Is PlayOnLinux able to host this file so that users can download it? If you look at its contents in a text editor, it is fairly easy to verify that the file is not malicious.

The issue here is that the content of the original .dat must be copyrighted, and I doubt it's mentionned anywhere whether it can be redistributed; One should probably assume it's not.

Could the editing be automated, say with sed or perl?

 

And now the script reviews,

Scripts

Chessmaster Grandmaster Edition

POL_Shortcut_Document "$TITLE" "Chessmaster® Grandmaster Edition Manual.pdf"

Older versions of PlayOnLinux/PlayOnMac required a full path here (relative to drive_c subdirectory, at least), but it seems that even the now popular 4.2.5 finds the file correctly, so I guess that's now ok

POL_SetupWindow_message "$(eval_gettext '$TITLE has been successfully installed.')" "$TITLE"

Ending success message are deprecated, because the script can still reach the end while triggering non-fatal errors, so such messages can be more confusing than anything.

Chessmaster Grandmaster Edition Patch 1.01

    POL_SetupWindow_wait "$(eval_gettext 'Please wait while $TITLE is installed.')" "$TITLE"

 

You can use POL_Wine_WaitBefore "$TITLE" instead, that's one less translated message in the script (it displays a standard wait message)

Chessmaster Grandmaster Edition - Tutorial Patch

    POL_SetupWindow_message "What this patch does:\nAfter installing this patch, you will be able to access all of the official $TITLE_REQUIRED tutorials without using the buggy navigation buttons. For example, if you browse to the \"Advanced\" tab of the \"Chessmaster Series\" tutorials, you will be able to access the \"Drills\" and \"Nunn's Puzzles\" from the front page, without clicking the navigation buttons on the sidebar.\n\nWhat this patch does not do:\nThis patch does not fix the buggy navigation buttons; it just allows you to avoid using them." "$TITLE"

You forgot the translation support on this (long) message

 

I don't think there's any simpler way to include images, allowing to upload images to the server is prone to abuse, specially without any anti deep linking mechanism, and I don't know if this editor has any such thing...

Regards,

Pierre.

Justinian Wednesday 29 July 2015 at 22:27
JustinianAnonymous

Sorry for taking so long to respond to the feedback.

I have uploaded new versions of my scripts, with the following changes:

  • I have now specified a full path (beginning in "$WINEPREFIX/drive_c/$PROGRAMFILES/") for POL_Shortcut_Document. Credit to petch for pointing out the issue.
  • I have removed the ending success messages. Credit to petch for pointing out the issue.
    However, I feel uncomfortable about the lack of an ending success message in the Tutorial Patch. Since the Tutorial Patch does not launch any programs, and finishes rather rapidly, I fear users may get the impression that the script has crashed, rather than completed.
  • I have replaced POL_SetupWindow_wait with POL_Wine_WaitBefore in all cases except the Tutorial Patch (which carries out filesystem operations, rather than starting a program). Credit to petch for pointing out the issue.
  • I have added translation support to the long message in the Tutorial Patch. Credit to petch for pointing out the issue.
  • I have changed $TITLE from "Chessmaster Grandmaster Edition" to "Chessmaster: Grandmaster Edition" (which is what the game is officially called). However, I have left the shortcut name as it is, in order to imitate the shortcut's name on Windows.

 

Quoted from MTres19:

I'm no expert, but some of the buttons in QuickTime Player were broken until I added
POL_Call POL_install_ie8
to my script. You might also try some of the POL_Install_msxml* function scripts.

Neither POL_Install_msxml3 nor POL_Install_ie8 make a difference.

 

 

Quoted from MTres19:

As for pictures, you'll have to upload them to a file hosting website, like Google Drive, then get an exact path to the URL of your image.

That solves my issue.

I was under the impression (based on Ronin DUSETTE's post here) that all you had to do was copy the images directly into the post editor. It seemed unusually convenient, yet it appeared to work - at least within the editor. Only after I submitted my post did the images go missing.

Anyway, I have now uploaded all the appropriate images to Dropbox.

 

Quoted from petch:

The issue here is that the content of the original .dat must be copyrighted, and I doubt it's mentionned anywhere whether it can be redistributed; One should probably assume it's not.

I doubt that Ubisoft would complain about the "Curriculum.dat" file being redistributed. All it contains is an index of the game's tutorial files - it does not contain the tutorials themselves, or any other valuable data.

Nonetheless, I understand if PlayOnLinux does not want to host copyrighted files. I have modified the "Chessmaster: Grandmaster Edition - Tutorial Patch" script to download the "Curriculum.dat" file from my personal Dropbox - is this acceptable? If it is, I will merge the Tutorial Patch into the main script (as suggested by petch). If not, I can scrap the Tutorial Patch altogether, seeing as everything other than the tutorials will still function without it.

 

Quoted from petch:

Could the editing be automated, say with sed or perl?

Maybe, but it would take a lot of work.

Also, I do not think it would make a difference with regard to the legality of the whole issue. The modifications to the "Curriculum.dat" file involve copying particular areas of the file into other areas of the file. To automate the modifications would require a script that searches for particular strings in the file - but then such a script would need to contain those strings, which are of course covered by Ubisoft's copyright.

EDIT (2015-07-30): Now that I think about it, I could find the areas that need to be copied by counting line numbers, instead of searching for strings. That would solve the legal issue.

Edited by Justinian

Justinian Saturday 9 January 2016 at 10:44
JustinianAnonymous

Once again, I am sorry for neglecting these scripts for so long. I have not had time to work on them again until recently.

Anyway, I have now automated the process of modifying the "Curriculum.dat" file (using cat and sed commands). This solves the legal issues related to the redistribution of the "Curriculum.dat" file.

Furthermore, I have merged the tutorial patch into the main script.

Are there any further issues that I should address?

Edited by Justinian

This site allows content generated by members, and we promptly remove any content that infringes copyright according to our Terms of Service. To report copyright infringement, please send a notice to dmcayonlinux.com