Patch updated. Notes: - Download urls and AHK scripts are *all* tested as of this patch (~5 hours to install everything). - BAT scripts are *not* tested.
Remaining issues: - url escaping when posting login & password (I'll work on this next) - possibly BAT scripting mistakes (verb definition) - possibly a yet unidentified auth bug which affected Dan Kegel - missing BAT scripts for bundles (not sure what to do for those) Changelog: - add cookie support in "download" (required as GOG.com requires auth to download games) - add download support for gog verbs - Refresh against current svn head - _load_gog: added install_dir parameter (needed by a few games) - double all "\" meant to be literal backslashes - fix download path for verbs: ut2004_gog abes_oddysee_gog abes_exoddus_gog descent_1_2_gog - add verbs: descent_3_gog psychonauts_gog ut_goty_gog unreal_gold_gog unreal_2_se_gog battle_chess_gog earth_2150_trilogy_gog earth_2160_gog empire_earth_gold_gog earthworm_jim_1_2_gog shogo_gog settlers_2_gold_gog robinson_requiem_collection_gog redneck_rampage_gog praetorians_gog perimeter_gog painkiller_black_gog operation_flashpoint_goty_gog neighbours_from_hell_compilation_gog mdk_gog mdk2_gog ground_control_2_gog ghost_master_gog freespace_gog freespace_2_gog flatout_gog earthworm_jim_3d_gog fallout_gog fallout_2_gog fallout_tactics_gog -- Vincent Pelletier
Index: wisotool =================================================================== --- wisotool (révision 1220) +++ wisotool (copie de travail) @@ -340,7 +340,7 @@ } # Download a file -# Usage: package url [sha1sum [filename]] +# Usage: package url [sha1sum [filename [cookie jar]]] # Caches downloads in wisotoolcache/$package download() { if [ "$4"x != ""x ] @@ -371,11 +371,11 @@ # [*] --read-timeout is useful on the adobe server that doesn't # close the connection unless you tell it to (control-C or closing # the socket) - try wget -O "$file" -nd -c --read-timeout=300 --retry-connrefused --header "Accept-Encoding: gzip,deflate" "$2" + try wget -O "$file" -nd -c --read-timeout=300 --retry-connrefused --header "Accept-Encoding: gzip,deflate" ${5:+--load-cookies "$5"} "$2" else # curl doesn't get filename from the location given by the server! # fortunately, we know it - try curl -L -o "$file" -C - --header "Accept-Encoding: gzip,deflate" "$2" + try curl -L -o "$file" -C - --header "Accept-Encoding: gzip,deflate" ${5:+--cookie "$5"} "$2" fi # Need to decompress .exe's that are compressed, else cygwin fails # Only affects cygwin, so don't barf if 'file' not installed @@ -2182,7 +2182,7 @@ #---------------------------------------------------------------- # Generic GOG.com installer -# Usage: game_id game_title [other_files [reader_control [run_command [download_id]]]] +# Usage: game_id game_title [other_files [reader_control [run_command [download_id [install_dir]]]]] # game_id # Used for main installer name and download url. # game_title @@ -2197,6 +2197,8 @@ # Used for bat script, relative to installation path. # download_id # For games which download url doesn't match their game_id +# install_dir +# If different from game_title _load_gog() { # TODO: support SHA1 checks ? (installer verifies files) @@ -2209,8 +2211,21 @@ reader_control="$4" run_command="$5" download_id="$6" + install_dir="$7" + if [ "$download_id"x = ""x ] + then + download_id="$game_id" + fi + if [ "$install_dir"x = ""x ] + then + install_dir="$game_title" + fi + installer_path="$WISOTOOL_CACHE/$PACKAGE" + mkdir -p "$installer_path" + auth_path="$WISOTOOL_CACHE/gog_auth" + mkdir -p "$auth_path" installer="setup_$game_id.exe" cookie="$auth_path/cookie.txt" @@ -2220,7 +2235,32 @@ file_path="$installer_path/$file" if ! test -s "$file_path" then - die "Please download $file to $installer_path" + if ! test -f "$cookie" + then + login_file="$auth_path/login.txt" + password_file="$auth_path/password.txt" + if ! test -f "$login_file" -a -f "$password_file" + then + die "Please put your GOG.com login in '$login_file' and password in '$password_file' or put '$file' in '$installer_path'." + fi + base_url="https://www.gog.com" + login_url="/en/login/ajax/" + next_url="$WISOTOOL_TMP/gog_redir_url" + post_data="$WISOTOOL_TMP/gog_post_data" + # Note: just write login & password to a file so they don't appear in "ps" + echo "a=check&t=old&u=`cat \"$login_file\" | sed 's/&/%26/g'`&p=`cat \"$password_file\" | sed 's/&/%26/g'`&r=frontpage" > "$post_data" + if test -x "`which wget 2>/dev/null`" + then + try wget -O "$next_url" --save-cookies "$cookie" --post-file "$post_data" "$base_url$login_url" + try wget -O /dev/null --load-cookies "$cookie" --save-cookies "$cookie" "$base_url`cat \"$next_url\"`" + else + try curl -o "$next_url" --cookie-jar "$cookie" --data "@$post_data" "$base_url$login_url" + try curl -o /dev/null --cookie "$cookie" --cookie-jar "$cookie" "$base_url`cat \"$next_url\"`" + fi + rm -f "$post_data" + rm -f "$next_url" + fi + download "$PACKAGE" "https://www.gog.com/en/download/game/$download_id/$file_id" "" "$file" "$cookie" fi file_id=`expr $file_id + 1` done @@ -2257,7 +2297,7 @@ if [ "$run_command"x != ""x ] then cat > "$DRIVE_C/run-$PACKAGE.bat" <<__EOF__ -cd "$programfilesdir_x86_win\GOG.com\\$game_title" +cd "$programfilesdir_x86_win\\GOG.com\\$install_dir" $run_command __EOF__ fi @@ -2267,7 +2307,7 @@ load_dukenukem3d_gog() { - _load_gog "duke3d" "Duke Nukem 3D" "" "TsCheckBox2" "DOSBOX\dosbox.exe -conf dosboxDuke3D.conf -noconsole -c \"exit\"" "duke_nukem_3d_atomic_edition" + _load_gog "duke3d" "Duke Nukem 3D" "" "TsCheckBox2" "DOSBOX\\dosbox.exe -conf dosboxDuke3D.conf -noconsole -c \"exit\"" "duke_nukem_3d_atomic_edition" } verblist_add dukenukemmp_gog "Duke Nukem Manhattan Project (GOG.com)" setup_duke_nukem_manhattan_project.exe @@ -2281,21 +2321,21 @@ load_ut2004_gog() { - _load_gog "ut2004" "Unreal Tournament 2004" "setup_ut2004-1.bin setup_ut2004-2.bin" "TsCheckBox2" "system\ut2004.exe" + _load_gog "ut2004" "Unreal Tournament 2004" "setup_ut2004-1.bin setup_ut2004-2.bin" "TsCheckBox2" "system\\ut2004.exe" "unreal_tournament_2004_ece" } verblist_add abes_oddysee_gog "Abes Oddysee (GOG.com)" AbeWin.exe setup_abes_oddysee.exe load_abes_oddysee_gog() { - _load_gog "abes_oddysee" "Abe's Oddysee" "" "TsCheckBox2" "AbeWin.exe" + _load_gog "abes_oddysee" "Abe's Oddysee" "" "TsCheckBox2" "AbeWin.exe" "oddworld_abes_oddysee" } verblist_add abes_exoddus_gog "Abes Exoddus (GOG.com)" Exoddus.exe setup_abes_exodus.exe load_abes_exoddus_gog() { - _load_gog "abes_exoddus" "Abe's Exoddus" "" "TsCheckBox2" "Exoddus.exe" + _load_gog "abes_exoddus" "Abe's Exoddus" "" "TsCheckBox2" "Exoddus.exe" "oddworld_abes_exoddus" } verblist_add beyond_good_and_evil_gog "Beyond Good and Evil (GOG.com)" setup_beyond_good_and_evil.exe @@ -2309,7 +2349,7 @@ load_far_cry_gog() { - _load_gog "far_cry" "Far Cry" "setup_far_cry-1.bin setup_far_cry-2.bin" "TsCheckBox2" "Bin32\FarCry.exe" + _load_gog "far_cry" "Far Cry" "setup_far_cry-1.bin setup_far_cry-2.bin" "TsCheckBox2" "Bin32\\FarCry.exe" } verblist_add descent_1_2_gog "Descent and Descent 2 (GOG.com)" setup_descent_1_2.exe @@ -2317,16 +2357,246 @@ load_descent_1_2_gog() { # XXX: this installs 2 games, how should bat script be ? - _load_gog "descent_1_2" "Descent and Descent 2" "" "TsCheckBox5" "" + _load_gog "descent_1_2" "Descent and Descent 2" "" "TsCheckBox5" "" "descent_1_descent_2" } +verblist_add descent_3_gog "Descent 3 (GOG.com)" setup_descent_3.exe + +load_descent_3_gog() +{ + _load_gog "descent_3" "Descent 3 and Mercenary Expansion" "" "TsCheckBox4" "Descent 3.exe" "descent_3_expansion" "Descent 3" +} + verblist_add evil_genius_gog "Evil Genius (GOG.com)" setup_evil_genius.exe load_evil_genius_gog() { - _load_gog "evil_genius" "Evil Genius" "" "TsCheckBox2" "ReleaseExe\EvilGeniusExeStub-Release.exe" + _load_gog "evil_genius" "Evil Genius" "" "TsCheckBox2" "ReleaseExe\\EvilGeniusExeStub-Release.exe" } +verblist_add psychonauts_gog "Psychonauts (GOG.com)" setup_psychonauts.exe + +load_psychonauts_gog() +{ + _load_gog "psychonauts" "Psychonauts" "setup_psychonauts-1.bin setup_psychonauts-2.bin" "TsCheckBox2" "Psychonauts.exe" +} + +verblist_add ut_goty_gog "Unreal Tournament GOTY (GOG.com)" setup_ut_goty.exe + +load_ut_goty_gog() +{ + # XXX: Installer window contains: "Unreal Tournament", 2 spaces, a long dash, 1 space "Game Of The Year Edition" + _load_gog "ut_goty" "Unreal Tournament " "" "TsCheckBox2" "gogwrap.exe GOGUT" "unreal_tournament_goty" "Unreal Tournament GOTY" +} + +verblist_add unreal_gold_gog "Unreal Gold Edition (GOG.com)" setup_unreal_gold.exe + +load_unreal_gold_gog() +{ + _load_gog "unreal_gold" "Unreal Gold" "" "TsCheckBox2" "gogwrap.exe GOGUNREAL" +} + +verblist_add unreal_2_se_gog "Unreal 2: The awakening Special Edition (GOG.com)" setup_unreal2_se.exe + +load_unreal_2_se_gog() +{ + # \x96 is ansi-1250 for "en dash" + _load_gog "unreal2_se" "Unreal 2 `echo -e '\x96'` The Awakening Special Edition" "" "TsCheckBox4" "gogwrap.exe GOGUNREAL2" "unreal_2_the_awakening_se" +} + +verblist_add battle_chess_gog "Battle Chess (GOG.com)" setup_battle_chess.exe + +load_battle_chess_gog() +{ + # XXX: this installs 3 games, how should bat script be ? + _load_gog "battle_chess" "Battle Chess Special Edition" "" "TsCheckBox5" "" "battle_chess_special_edition" +} + +verblist_add earth_2150_trilogy_gog "Earth 2150 trilogy (GOG.com)" setup_earth_2150_trilogy.exe + +load_earth_2150_trilogy_gog() +{ + # XXX: this installs 3 games, how should bat script be ? + _load_gog "earth_2150_trilogy" "Earth 2150 Trilogy" "" "TsCheckBox4" "" +} + +verblist_add earth_2160_gog "Earth 2160 (GOG.com)" setup_earth_2160.exe + +load_earth_2160_gog() +{ + _load_gog "earth_2160" "Earth 2160" "" "TsCheckBox2" "Earth2160_START.exe" +} + +verblist_add empire_earth_gold_gog "Empire Earth Gold (GOG.com)" setup_empire_earth_gold.exe + +load_empire_earth_gold_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + _load_gog "empire_earth_gold" "Empire Earth Gold Edition" "" "TsCheckBox4" "" "empire_earth_gold_edition" +} + +verblist_add earthworm_jim_1_2_gog "Earthworm Jim 1 & 2 (GOG.com)" setup_ewj_1_2.exe + +load_earthworm_jim_1_2_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + _load_gog "ewj_1_2" "Earthworm Jim 1 and 2" "" "TsCheckBox5" "" "earthworm_jim_1_2" +} + +verblist_add shogo_gog "Shogo Mobile Armor Division (GOG.com)" setup_shogo.exe + +load_shogo_gog() +{ + # \x96 is ansi-1250 for "en dash" + _load_gog "shogo" "Shogo `echo -e '\x96'` Mobile Armor Division" "" "TsCheckBox2" "Shogo.exe" "shogo_mobile_armor_division" +} + +verblist_add settlers_2_gold_gog "The Settlers 2 Gold (GOG.com)" setup_settlers_2_gold.exe + +load_settlers_2_gold_gog() +{ + _load_gog "settlers_2_gold" "Settlers 2 GOLD" "" "TsCheckBox2" "DOSBOX\\dosbox.exe -conf dosboxSettlers2.conf -noconsole -c \"exit\"" "the_settlers_2_gold_edition" +} + +verblist_add robinson_requiem_collection_gog "Robinson Requiem & Deus (GOG.com)" setup_robinson_requiem_collection.exe + +load_robinson_requiem_collection_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + _load_gog "robinson_requiem_collection" "Robinson's Requiem Collection" "" "TsCheckBox5" "" "robinsons_requiem_collection" +} + +verblist_add redneck_rampage_gog "Redneck Rampage (GOG.com)" setup_redneck_rampage.exe + +load_redneck_rampage_gog() +{ + # XXX: this installs 3 games, how should bat script be ? + _load_gog "redneck_rampage" "Redneck Rampage Collection" "" "TsCheckbox5" "" "redneck_rampage_collection" +} + +verblist_add praetorians_gog "Praetorians (GOG.com)" setup_praetorians.exe + +load_praetorians_gog() +{ + _load_gog "praetorians" "Praetorians" "" "TsCheckBox2" "Praetorians.exe" +} + +verblist_add perimeter_gog "Perimeter (GOG.com)" setup_perimeter.exe + +load_perimeter_gog() +{ + _load_gog "perimeter" "Perimeter" "" "TsCheckBox2" "perimeter.exe" +} + +verblist_add painkiller_black_gog "Painkiller Black (GOG.com)" setup_painkiller_black.exe setup_painkiller_black-1.bin setup_painkiller_black-2.bin + +load_painkiller_black_gog() +{ + _load_gog "painkiller_black" "Painkiller Black" "setup_painkiller_black-1.bin setup_painkiller_black-2.bin" "TsCheckBox2" "bin\\Painkiller.exe" "painkiller" +} + +verblist_add operation_flashpoint_goty_gog "Operation Flashpoint GOTY (GOG.com)" setup_operation_flashpoint_goty.exe + +load_operation_flashpoint_goty_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + # \x96 is ansi-1250 for "en dash" + _load_gog "operation_flashpoint_goty" "Operation Flashpoint `echo -e '\x96'` Game of the Year Edition" "" "TsCheckBox2" "" "" "Operation Flashpoint - GOTY" +} + +verblist_add neighbours_from_hell_compilation_gog "Neighbours From Hell 1 & 2 (GOG.com)" setup_neighbours_from_hell_compilation.exe + +load_neighbours_from_hell_compilation_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + _load_gog "neighbours_from_hell_compilation" "Neighbours From Hell Compilation" "" "TsCheckBox4" +} + +verblist_add mdk_gog "MDK (GOG.com)" setup_mdk.exe + +load_mdk_gog() +{ + _load_gog "mdk" "MDK" "" "TsCheckBox4" "gogwrap.exe GOGMDK" +} + +verblist_add mdk2_gog "MDK 2 (GOG.com)" setup_mdk_2.exe + +load_mdk2_gog() +{ + _load_gog "mdk_2" "MDK 2" "" "TsCheckBox2" "MDK2.exe" +} + +verblist_add ground_control_2_gog "Ground Control 2 (GOG.com)" setup_ground_control_2.exe + +load_ground_control_2_gog() +{ + _load_gog "ground_control_2" "Ground Control II" "" "TsCheckBox2" "gcii.exe" "ground_control_2_operation_exodus" +} + +verblist_add ghost_master_gog "Ghost Master (GOG.com)" setup_ghost_master.exe + +load_ghost_master_gog() +{ + _load_gog "ghost_master" "Ghost Master" "" "TsCheckBox2" "ghost.exe" +} + +verblist_add freespace_gog "Freespace (GOG.com)" setup_freespace.exe + +load_freespace_gog() +{ + _load_gog "freespace" "Freespace with Silent Threat Expansion" "" "TsCheckBox4" "fs.exe" "freespace_expansion" "Freespace" +} + +verblist_add freespace_2_gog "Freespace 2 (GOG.com)" setup_freespace_2.exe + +load_freespace_2_gog() +{ + _load_gog "freespace_2" "Freespace 2" "" "TsCheckBox2" "fs2.exe" +} + +verblist_add flatout_gog "FlatOut (GOG.com)" setup_flatout.exe + +load_flatout_gog() +{ + _load_gog "flatout" "FlatOut" "" "TsCheckBox2" "flatout.exe" +} + +verblist_add earthworm_jim_3d_gog "Earthworm Jim 3D (GOG.com)" setup_ewj3d.exe + +load_earthworm_jim_3d_gog() +{ + _load_gog "ewj3d" "Earthworm Jim 3D" "" "TsCheckBox2" "gogwrap.exe GOGEARTHWORMJIM3D" "earthworm_jim_3d" +} + +verblist_add fallout_gog "Fallout (GOG.com)" setup_fallout.exe + +load_fallout_gog() +{ + _load_gog "fallout" "Fallout" "" "TsCheckBox2" "falloutw.exe" +} + +verblist_add fallout_2_gog "Fallout 2 (GOG.com)" setup_fallout_2.exe + +load_fallout_2_gog() +{ + _load_gog "fallout_2" "Fallout 2" "" "TsCheckBox2" "fallout2.exe" +} + +verblist_add fallout_tactics_gog "Fallout Tactics (GOG.com)" setup_fallout_tactics.exe + +load_fallout_tactics_gog() +{ + _load_gog "fallout_tactics" "Fallout Tactics" "" "TsCheckBox2" "BOS.exe" +} + +verblist_add tex_murphy_1_and_2_gog "Tex Murphy 1 & 2 (GOG.com)" setup_tex_murphy_1_and_2.exe + +load_tex_murphy_1_and_2_gog() +{ + # XXX: this installs 2 games, how should bat script be ? + _load_gog "tex_murphy_1_and_2" "Tex Murphy 1 and 2" "" "TsCheckBox5" "" "tex_murphy_1_2" +} + #---------------------------------------------------------------- print_version() {