RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login
    Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

    How do you intall GOG DOS games?

    Scheduled Pinned Locked Moved Help and Support
    dosboxgogconstructor
    9 Posts 3 Posters 2.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      RetroNerdman
      last edited by

      Currently I'm specifically trying to run Constructor.
      To the best of my knowledge, GOG games for Linux are compatible with Ubuntu, which like Rapbian is based on Debian. So I'm assuming that the RaspberryPi should be able to run this game on DOSBOX without much trouble as it doesn't make use of fancy 3DFX drivers or Roland MIDI stuff.

      The game comes in a weird *.sh file, which I find it odd because it's 245MB, so it's not just the installation script but the whole game. But I assumed that *.sh files were akin to *.bat files in Windows.
      And when I tried to run the *.sh I get the following error:

      Parameters: 
      Executing: bash /home/pi/RetroPie/roms/pc/+Start\ DOSBox.sh "/home/pi/RetroPie/roms/pc/gog_constructor_2.0.0.2.sh"
      Requested buffer size 32768, fragment size 8192
      ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
      Verifying archive integrity... All good.
      Uncompressing Constructor (GOG.com)     0%    38%    77%  100%  
      Collecting info for this system...
      Warning: No binaries for "armv7l" found, trying to default to x86...
      Operating system: linux
      CPU Arch: x86
      trying mojosetup in bin/linux/x86
      USING en_US
      ./startmojo.sh: 55: ./startmojo.sh: /tmp/selfgz714224/bin/linux/x86/mojosetup: Exec format error
      Error: Couldn't run mojosetup
      

      Well, obviously it was set up for a x86 architecture, but my dumbass had to try. Since it's lacking ARM instructions it just won't work.
      But, how do I unpack this thing or modify the instructions to be able to play on the RaspberryPi?

      This is, what I assume to be the header, of the *.sh file:

      #!/bin/sh
      # 
      # This is an executable installer
      # and it has to be run like any other executable file:
      # 
      # Add executable permissions with:
      # chmod +x installer-file.sh
      # 
      # Then run it like this:
      # ./installer-file.sh
      # 
      # This script was generated using Makeself 2.2.0
      # with modifications for mojosetup and GOG.com installer.
      
      umask 077
      
      CRCsum="825253672"
      MD5="d0bc2ce0a02b1d06530ecebc0f5cd869"
      TMPROOT=${TMPDIR:=/tmp}
      
      label="Constructor (GOG.com)"
      script="./startmojo.sh"
      scriptargs=""
      licensetxt=""
      targetdir="binaries"
      filesizes="673763"
      keep="n"
      quiet="n"
      
      # save off this scripts path so the installer can find it
      export MAKESELF_SHAR="$( cd "$(dirname "$0")" && pwd)/$(basename "$0")"
      
      print_cmd_arg=""
      if type printf > /dev/null; then
          print_cmd="printf"
      elif test -x /usr/ucb/echo; then
          print_cmd="/usr/ucb/echo"
      else
          print_cmd="echo"
      fi
      
      unset CDPATH
      
      MS_Printf()
      {
          $print_cmd $print_cmd_arg "$1"
      }
      
      MS_PrintLicense()
      {
        if test x"$licensetxt" != x; then
          echo $licensetxt
          while true
          do
            MS_Printf "Please type y to accept, n otherwise: "
            read yn
            if test x"$yn" = xn; then
              keep=n
       	eval $finish; exit 1        
              break;    
            elif test x"$yn" = xy; then
              break;
            fi
          done
        fi
      }
      
      MS_diskspace()
      {
      	(
      	if test -d /usr/xpg4/bin; then
      		PATH=/usr/xpg4/bin:$PATH
      	fi
      	df -kP "$1" | tail -1 | awk '{ if ($4 ~ /%/) {print $3} else {print $4} }'
      	)
      }
      
      MS_dd()
      {
          blocks=`expr $3 / 1024`
          bytes=`expr $3 % 1024`
          dd if="$1" ibs=$2 skip=1 obs=1024 conv=sync 2> /dev/null | \
          { test $blocks -gt 0 && dd ibs=1024 obs=1024 count=$blocks ; \
            test $bytes  -gt 0 && dd ibs=1 obs=1024 count=$bytes ; } 2> /dev/null
      }
      
      MS_dd_Progress()
      {
          if test "$noprogress" = "y"; then
              MS_dd $@
              return $?
          fi
          file="$1"
          offset=$2
          length=$3
          pos=0
          bsize=4194304
          while test $bsize -gt $length; do
              bsize=`expr $bsize / 4`
          done
          blocks=`expr $length / $bsize`
          bytes=`expr $length % $bsize`
          (
              dd bs=$offset count=0 skip=1 2>/dev/null
              pos=`expr $pos \+ $bsize`
              MS_Printf "     0%% " 1>&2
              if test $blocks -gt 0; then
                  while test $pos -le $length; do
                      dd bs=$bsize count=1 2>/dev/null
                      pcent=`expr $length / 100`
                      pcent=`expr $pos / $pcent`
                      if test $pcent -lt 100; then
                          MS_Printf "\b\b\b\b\b\b\b" 1>&2
                          if test $pcent -lt 10; then
                              MS_Printf "    $pcent%% " 1>&2
                          else
                              MS_Printf "   $pcent%% " 1>&2
                          fi
                      fi
                      pos=`expr $pos \+ $bsize`
                  done
              fi
              if test $bytes -gt 0; then
                  dd bs=$bytes count=1 2>/dev/null
              fi
              MS_Printf "\b\b\b\b\b\b\b" 1>&2
              MS_Printf " 100%%  " 1>&2
          ) < "$file"
      }
      
      MS_Help()
      {
          cat << EOH >&2
      Makeself version 2.2.0 combined with MojoSetup
      
      EOH
      #     cat << EOH >&2
      # Makeself version 2.2.0
      #  1) Getting help or info about $0 :
      #   $0 --help   Print this message
      #   $0 --info   Print embedded info : title, default target directory, embedded script ...
      #   $0 --lsm    Print embedded lsm entry (or no LSM)
      #   $0 --list   Print the list of files in the archive
      #   $0 --check  Checks integrity of the archive
       
      #  2) Running $0 :
      #   $0 [options] [--] [additional arguments to embedded script]
      #   with following options (in that order)
      #   --confirm             Ask before running embedded script
      #   --quiet		Do not print anything except error messages
      #   --noexec              Do not run embedded script
      #   --keep                Do not erase target directory after running
      # 			the embedded script
      #   --noprogress          Do not show the progress during the decompression
      #   --nox11               Do not spawn an xterm
      #   --nochown             Do not give the extracted files to the current user
      #   --target dir          Extract directly to a target directory
      #                         directory path can be either absolute or relative
      #   --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
      #   --                    Following arguments will be passed to the embedded script
      # EOH
      }
      
      MS_Check()
      {
          OLD_PATH="$PATH"
          PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
      	MD5_ARG=""
          MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
          test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
      	test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
          PATH="$OLD_PATH"
      
          if test "$quiet" = "n";then
          	MS_Printf "Verifying archive integrity..."
          fi
          offset=`head -n 519 "$1" | wc -c | tr -d " "`
          verb=$2
          i=1
          for s in $filesizes
          do
      		crc=`echo $CRCsum | cut -d" " -f$i`
      		if test -x "$MD5_PATH"; then
      			if test `basename $MD5_PATH` = digest; then
      				MD5_ARG="-a md5"
      			fi
      			md5=`echo $MD5 | cut -d" " -f$i`
      			if test $md5 = "00000000000000000000000000000000"; then
      				test x$verb = xy && echo " $1 does not contain an embedded MD5 checksum." >&2
      			else
      				md5sum=`MS_dd "$1" $offset $s | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
      				if test "$md5sum" != "$md5"; then
      					echo "Error in MD5 checksums: $md5sum is different from $md5" >&2
      					exit 2
      				else
      					test x$verb = xy && MS_Printf " MD5 checksums are OK." >&2
      				fi
      				crc="0000000000"; verb=n
      			fi
      		fi
      		if test $crc = "0000000000"; then
      			test x$verb = xy && echo " $1 does not contain a CRC checksum." >&2
      		else
      			sum1=`MS_dd "$1" $offset $s | CMD_ENV=xpg4 cksum | awk '{print $1}'`
      			if test "$sum1" = "$crc"; then
      				test x$verb = xy && MS_Printf " CRC checksums are OK." >&2
      			else
      				echo "Error in checksums: $sum1 is different from $crc" >&2
      				exit 2;
      			fi
      		fi
      		i=`expr $i + 1`
      		offset=`expr $offset + $s`
          done
          if test "$quiet" = "n";then
          	echo " All good."
          fi
      }
      
      UnTAR()
      {
          if test "$quiet" = "n"; then
          	tar $1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 $$; }
          else
      
          	tar $1f - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 $$; }
          fi
      }
      
      finish=true
      xterm_loop=
      noprogress=n
      nox11=y
      copy=none
      ownership=y
      verbose=n
      
      initargs="$@"
      
      while true
      do
          case "$1" in
          -h | --help)
      	MS_Help
      	exit 0
      	;;
          -q | --quiet)
      	quiet=y
      	noprogress=y
      	shift
      	;;
          --info)
      	echo Identification: "$label"
      	echo Target directory: "$targetdir"
      	echo Uncompressed size: 1452 KB
      	echo Compression: gzip
      	echo Date of packaging: Fri Apr  7 11:00:51 CEST 2017
      	echo Built with Makeself version 2.2.0 on 
      	echo Build command was: "makeself/makeself \\
          \"--nox11\" \\
          \"--header\" \\
          \"makeself/makeself-header.sh\" \\
          \"binaries/\" \\
          \"mojosetup.sh\" \\
          \"Constructor (GOG.com)\" \\
          \"./startmojo.sh\""
      	if test x$script != x; then
      	    echo Script run after extraction:
      	    echo "    " $script $scriptargs
      	fi
      	if test x"" = xcopy; then
      		echo "Archive will copy itself to a temporary location"
      	fi
      	if test x"n" = xy; then
      	    echo "directory $targetdir is permanent"
      	else
      	    echo "$targetdir will be removed after extraction"
      	fi
      	exit 0
      	;;
          --dumpconf)
      	echo LABEL=\"$label\"
      	echo SCRIPT=\"$script\"
      	echo SCRIPTARGS=\"$scriptargs\"
      	echo archdirname=\"binaries\"
      	echo KEEP=n
      	echo COMPRESS=gzip
      	echo filesizes=\"$filesizes\"
      	echo CRCsum=\"$CRCsum\"
      	echo MD5sum=\"$MD5\"
      	echo OLDUSIZE=1452
      	echo OLDSKIP=520
      	exit 0
      	;;
          --lsm)
      cat << EOLSM
      No LSM.
      EOLSM
      	exit 0
      	;;
          --list)
      	echo Target directory: $targetdir
      	offset=`head -n 519 "$0" | wc -c | tr -d " "`
      	for s in $filesizes
      	do
      	    MS_dd "$0" $offset $s | eval "gzip -cd" | UnTAR t
      	    offset=`expr $offset + $s`
      	done
      	exit 0
      	;;
      	--tar)
      	offset=`head -n 519 "$0" | wc -c | tr -d " "`
      	arg1="$2"
          if ! shift 2; then MS_Help; exit 1; fi
      	for s in $filesizes
      	do
      	    MS_dd "$0" $offset $s | eval "gzip -cd" | tar "$arg1" - $*
      	    offset=`expr $offset + $s`
      	done
      	exit 0
      	;;
          --check)
      	MS_Check "$0" y
      	exit 0
      	;;
          --confirm)
      	verbose=y
      	shift
      	;;
      	--noexec)
      	script=""
      	shift
      	;;
          --keep)
      	keep=y
      	shift
      	;;
          --target)
      	keep=y
      	targetdir=${2:-.}
          if ! shift 2; then MS_Help; exit 1; fi
      	;;
          --noprogress)
      	noprogress=y
      	shift
      	;;
          --nox11)
      	nox11=y
      	shift
      	;;
          --nochown)
      	ownership=n
      	shift
      	;;
          --xwin)
      	finish="echo Press Return to close this window...; read junk"
      	xterm_loop=1
      	shift
      	;;
          --phase2)
      	copy=phase2
      	shift
      	;;
          --)
      	shift
      	break ;;
          -*)
      	echo Unrecognized flag : "$1" >&2
      	MS_Help
      	exit 1
      	;;
          *)
      	break ;;
          esac
      done
      
      if test "$quiet" = "y" -a "$verbose" = "y";then
      	echo Cannot be verbose and quiet at the same time. >&2
      	exit 1
      fi
      
      MS_PrintLicense
      
      case "$copy" in
      copy)
          tmpdir=$TMPROOT/makeself.$RANDOM.`date +"%y%m%d%H%M%S"`.$$
          mkdir "$tmpdir" || {
      	echo "Could not create temporary directory $tmpdir" >&2
      	exit 1
          }
          SCRIPT_COPY="$tmpdir/makeself"
          echo "Copying to a temporary location..." >&2
          cp "$0" "$SCRIPT_COPY"
          chmod +x "$SCRIPT_COPY"
          cd "$TMPROOT"
          exec "$SCRIPT_COPY" --phase2 -- $initargs
          ;;
      phase2)
          finish="$finish ; rm -rf `dirname $0`"
          ;;
      esac
      
      if test "$nox11" = "n"; then
          if tty -s; then                 # Do we have a terminal?
      	:
          else
              if test x"$DISPLAY" != x -a x"$xterm_loop" = x; then  # No, but do we have X?
                  if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
                      GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
                      for a in $GUESS_XTERMS; do
                          if type $a >/dev/null 2>&1; then
                              XTERM=$a
                              break
                          fi
                      done
                      chmod a+x $0 || echo Please add execution rights on $0
                      if test `echo "$0" | cut -c1` = "/"; then # Spawn a terminal!
                          exec $XTERM -title "$label" -e "$0" --xwin "$initargs"
                      else
                          exec $XTERM -title "$label" -e "./$0" --xwin "$initargs"
                      fi
                  fi
              fi
          fi
      fi
      
      if test "$targetdir" = "."; then
          tmpdir="."
      else
          if test "$keep" = y; then
      	if test "$quiet" = "n";then
      	    echo "Creating directory $targetdir" >&2
      	fi
      	tmpdir="$targetdir"
      	dashp="-p"
          else
      	tmpdir="$TMPROOT/selfgz$$$RANDOM"
      	dashp=""
          fi
          mkdir $dashp $tmpdir || {
      	echo 'Cannot create target directory' $tmpdir >&2
      	echo 'You should try option --target dir' >&2
      	eval $finish
      	exit 1
          }
      fi
      
      location="`pwd`"
      if test x$SETUP_NOCHECK != x1; then
          MS_Check "$0"
      fi
      offset=`head -n 519 "$0" | wc -c | tr -d " "`
      
      if test x"$verbose" = xy; then
      	MS_Printf "About to extract 1452 KB in $tmpdir ... Proceed ? [Y/n] "
      	read yn
      	if test x"$yn" = xn; then
      		eval $finish; exit 1
      	fi
      fi
      
      if test "$quiet" = "n";then
      	MS_Printf "Uncompressing $label"
      fi
      res=3
      if test "$keep" = n; then
          trap 'echo Signal caught, cleaning up >&2; cd $TMPROOT; /bin/rm -rf $tmpdir; eval $finish; exit 15' 1 2 3 15
      fi
      
      leftspace=`MS_diskspace $tmpdir`
      if test -n "$leftspace"; then
          if test "$leftspace" -lt 1452; then
              echo
              echo "Not enough space left in "`dirname $tmpdir`" ($leftspace KB) to decompress $0 (1452 KB)" >&2
              if test "$keep" = n; then
                  echo "Consider setting TMPDIR to a directory with more free space."
              fi
              eval $finish; exit 1
          fi
      fi
      
      for s in $filesizes
      do
          if MS_dd_Progress "$0" $offset $s | eval "gzip -cd" | ( cd "$tmpdir"; UnTAR x ) 1>/dev/null; then
      		if test x"$ownership" = xy; then
      			(PATH=/usr/xpg4/bin:$PATH; cd "$tmpdir"; chown -R `id -u` .;  chgrp -R `id -g` .)
      		fi
          else
      		echo >&2
      		echo "Unable to decompress $0" >&2
      		eval $finish; exit 1
          fi
          offset=`expr $offset + $s`
      done
      if test "$quiet" = "n";then
      	echo
      fi
      
      cd "$tmpdir"
      res=0
      if test x"$script" != x; then
          if test x"$verbose" = xy; then
      		MS_Printf "OK to execute: $script $scriptargs $* ? [Y/n] "
      		read yn
      		if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
      			eval $script $scriptargs $*; res=$?;
      		fi
          else
      		eval $script $scriptargs $*; res=$?
          fi
          if test $res -ne 0; then
      		test x"$verbose" = xy && echo "The program '$script' returned an error code ($res)" >&2
          fi
      fi
      if test "$keep" = n; then
          cd $TMPROOT
          /bin/rm -rf $tmpdir
      fi
      eval $finish; exit $res
      

      I even tried the Windows version by copying the data from the installation folder to the RaspberryPi, however when running DOSBOX, the game asks for the CD which I don't have an image for. Nor I could figure out how the GOG release bypasses that without a mini-ISO or something like that.

      Can anyone help me figure out how to play this game?

      I also apologize because I couldn't figure out how to create a collapsed box to hide the whole installation above.

      mituM 1 Reply Last reply Reply Quote 0
      • mituM
        mitu Global Moderator @RetroNerdman
        last edited by

        @RetroNerdman The .sh file is a self-unpacking installer (makeself) that unpacks an archive and then runs a setup routing. It won't work in the Pi, since it tries to run a x86 installer.
        The question is - is the game running with DosBox on Windows ? Can you find a dosbox.conf in the game's installation folder ?

        1 Reply Last reply Reply Quote 0
        • mituM
          mitu Global Moderator
          last edited by

          The game looks like it works through dosbox. So, install the game on Windows, then

          1. Create a folder at \\retropie\roms\pc-data\constr and copy there all the files from the installation folder
          2. Copy the dosbox.conf from the Windows installation folder to \\retropie\roms\pc\constructor.conf
          3. Edit the [autoexec] section of the constructor.conf you created and replace it with
          [autoexec]
          
          @ECHO OFF
          mount C "/home/pi/RetroPie/roms/pc-data/constr"
          c:
          cd \
          imgmount d "const.gog" -t iso -fs iso
          game.exe
          exit
          

          Then restart Emulationstation and you should have a Constructor game entry that should work.
          NOTE: Linux is case sensitive, so make sure you create the new folders as described, otherwise the folder won't be found.

          I think the method here can be used for a lot of GOG games that use Dosbox, just need to inspect the .conf file and adjust it accordingly.

          1 Reply Last reply Reply Quote 1
          • ClydeC
            Clyde
            last edited by Clyde

            The GOG .sh archives should be zip files that can be extracted by unzip. See my post about unzipping Neo Geo games from their Linux and Windows GOG installers.

            TL;DR: unzip gog_constructor_2.0.0.2.sh -d . run from the directory the file is located in should extract it to that same directory. You can change the single dot . (= current directory) to any other -destination path you like.

            If that works, proceed with @mitu's instructions. One relatively easy way to copy files around locally on the pi is the file manager mc that you can run from Retropie's console, either by connecting a keyboard to the Pi or via SSH.

            1 Reply Last reply Reply Quote 0
            • R
              RetroNerdman
              last edited by

              Update time! Sorry for the delay, I haven't had a lot of time this past week.
              Thanks everyone for their input.

              @mitu In the end, what worked for me was the following:

              • copy all the files from the Windows installation folder to a new folder in the Retropie card: /home/pi/RetroPie/roms/pc-data/constr
              • create constructor.conf at /home/pi/RetroPie/roms/pc
              # This is the configuration file for DOSBox 0.74-2. (Please use the latest version of DOSBox)
              # Lines starting with a # are comment lines and are ignored by DOSBox.
              # They are used to (briefly) document the effect of each option.
              
              [autoexec]
              
              @ECHO OFF
              mount C "/home/pi/RetroPie/roms/pc-data/constr"
              c:
              cd \
              imgmount d "const.gog" -t iso -fs iso
              game.exe
              exit
              

              (Thank you for the script above!)

              Game seems to be running at full speed, pillarboxed fullscreen (keeping the original aspect ratio), mouse acceleration feels about right (although I remember it being more sensitive back in Windows 98) and no audio glitches (again, I'm not sure, but I think it's missing some audio cues and sound tracks? I no longer have a Windows 98 PC to try my original disc).
              Network doesn't work, but it's most likely me who doesn't know how to make it work.

              Again, thanks everyone. I have no idea how I missed the ISO as const.gog.

              ========================================================================
              From here on, it's just a diary of what I went through and save you some time in case you're stuck too.

              I deleted everything related to DOSBOX and Contructor from both my RaspberryPi and Windows PC, just so I would start from the scratch.

              @Clyde I've tried to unzip the files, however I got this error message (I used WinSCP to copy from Windows and connected to terminal through PuTTY):

              unzip gog_constructor_2.0.0.2.sh -d ~/RetroPie/roms/pc-data/constructor/
              Archive:  gog_constructor_2.0.0.2.sh
              warning [gog_constructor_2.0.0.2.sh]:  686216 extra bytes at beginning or within zipfile
                (attempting to process anyway)
              error: invalid zip file with overlapped components (possible zip bomb)
              
              

              @mitu I know you figured that out, but yes, the Windows release is running on DOSBOX 0.74-2
              The configuration files, however, are split in:

              • dosboxConstructor.conf
              • dosboxConstructor_client.conf
              • dosboxConstructor_server.conf
              • dosboxConstructor_settings.conf
              • dosboxConstructor_single.conf

              I tried creating a single *.conf file (by copying the info from dosboxConstructor_single, dosboxConstructor and the bits you suggested), however the game runs like terribly slow. The screen is stretched a bit and it's on the left, instead of centered.

              So I copied everything to the roms/pc folder and using the DOSBOX shortcut from ES, I then manually mounted the const.gog file and ran the game.exe file. Everything worked smoothly (with the exception of the mouse not being captured immediately, so I had to click on the screen and networking not being available).

              Here are the contents of each *.conf:

              • dosboxConstructor.conf
              # This is the configuration file for DOSBox 0.74-2. (Please use the latest version of DOSBox)
              # Lines starting with a # are comment lines and are ignored by DOSBox.
              # They are used to (briefly) document the effect of each option.
              
              [sdl]
              #       fullscreen: Start dosbox directly in fullscreen. (Press ALT-Enter to go back)
              #       fulldouble: Use double buffering in fullscreen. It can reduce screen flickering, but it can also result in a slow DOSBox.
              #   fullresolution: What resolution to use for fullscreen: original, desktop or fixed size (e.g. 1024x768).
              #                     Using your monitor's native resolution (desktop) with aspect=true might give the best results.
              #                     If you end up with small window on a large screen, try an output different from surface.
              #                     On Windows 10 with display scaling (Scale and layout) set to a value above 100%, it is recommended
              #                     to use a lower full/windowresolution, in order to avoid window size problems.
              # windowresolution: Scale the window to this size IF the output device supports hardware scaling.
              #                     (output=surface does not!)
              #           output: What video system to use for output.
              #                   Possible values: surface, overlay, opengl, openglnb, ddraw.
              #         autolock: Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock)
              #      sensitivity: Mouse sensitivity.
              #      waitonerror: Wait before closing the console if dosbox has an error.
              #         priority: Priority levels for dosbox. Second entry behind the comma is for when dosbox is not focused/minimized.
              #                     pause is only valid for the second entry.
              #                   Possible values: lowest, lower, normal, higher, highest, pause.
              #       mapperfile: File used to load/save the key/event mappings from. Resetmapper only works with the defaul value.
              #     usescancodes: Avoid usage of symkeys, might not work on all operating systems.
              
              fullscreen=true
              fulldouble=false
              fullresolution=desktop
              windowresolution=original
              output=overlay
              autolock=true
              sensitivity=200
              waitonerror=true
              priority=higher,normal
              mapperfile=mapper-0.74-2.map
              usescancodes=true
              
              [dosbox]
              # language: Select another language file.
              #  machine: The type of machine DOSBox tries to emulate.
              #           Possible values: hercules, cga, tandy, pcjr, ega, vgaonly, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe.
              # captures: Directory where things like wave, midi, screenshot get captured.
              #  memsize: Amount of memory DOSBox has in megabytes.
              #             This value is best left at its default to avoid problems with some games,
              #             though few games might require a higher value.
              #             There is generally no speed advantage when raising this value.
              
              language=
              machine=svga_s3
              captures=capture
              memsize=32
              
              [render]
              # frameskip: How many frames DOSBox skips before drawing one.
              #    aspect: Do aspect correction, if your output method doesn't support scaling this can slow things down!
              #    scaler: Scaler used to enlarge/enhance low resolution modes. If 'forced' is appended,
              #              then the scaler will be used even if the result might not be desired.
              #              To fit a scaler in the resolution used at full screen may require a border or side bars,
              #              to fill the screen entirely, depending on your hardware, a different scaler/fullresolution might work.
              #            Possible values: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, hq2x, hq3x, 2xsai, super2xsai, supereagle, tv2x, tv3x, rgb2x, rgb3x, scan2x, scan3x.
              
              frameskip=0
              aspect=false
              scaler=normal2x
              
              [cpu]
              #      core: CPU Core used in emulation. auto will switch to dynamic if available and
              #            appropriate.
              #            Possible values: auto, dynamic, normal, simple.
              #   cputype: CPU Type used in emulation. auto is the fastest choice.
              #            Possible values: auto, 386, 386_slow, 486_slow, pentium_slow, 386_prefetch.
              #    cycles: Amount of instructions DOSBox tries to emulate each millisecond.
              #            Setting this value too high results in sound dropouts and lags.
              #            Cycles can be set in 3 ways:
              #              'auto'          tries to guess what a game needs.
              #                              It usually works, but can fail for certain games.
              #              'fixed #number' will set a fixed amount of cycles. This is what you usually
              #                              need if 'auto' fails. (Example: fixed 4000).
              #              'max'           will allocate as much cycles as your computer is able to
              #                              handle.
              #            Possible values: auto, fixed, max.
              #   cycleup: Amount of cycles to decrease/increase with keycombos.(CTRL-F11/CTRL-F12)
              # cycledown: Setting it lower than 100 will be a percentage.
              
              core=auto
              cputype=auto
              cycles=max
              cycleup=1000
              cycledown=1000
              
              [mixer]
              #   nosound: Enable silent mode, sound is still emulated though.
              #      rate: Mixer sample rate, setting any device's rate higher than this will probably lower their sound quality.
              #            Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.
              # blocksize: Mixer block size, larger blocks might help sound stuttering but sound will also be more lagged.
              #            Possible values: 1024, 2048, 4096, 8192, 512, 256.
              # prebuffer: How many milliseconds of data to keep on top of the blocksize.
              
              nosound=false
              rate=44100
              blocksize=1024
              prebuffer=25
              
              [midi]
              #     mpu401: Type of MPU-401 to emulate.
              #             Possible values: intelligent, uart, none.
              # mididevice: Device that will receive the MIDI data from MPU-401.
              #             Possible values: default, win32, alsa, oss, coreaudio, coremidi, none.
              # midiconfig: Special configuration options for the device driver. This is usually the id of the device you want to use
              #               (find the id with mixer/listmidi).
              #               Or in the case of coreaudio, you can specify a soundfont here.
              #               See the README/Manual for more details.
              
              mpu401=intelligent
              mididevice=default
              midiconfig=
              
              [sblaster]
              #  sbtype: Type of Soundblaster to emulate. gb is Gameblaster.
              #          Possible values: sb1, sb2, sbpro1, sbpro2, sb16, gb, none.
              #  sbbase: The IO address of the soundblaster.
              #          Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, 300.
              #     irq: The IRQ number of the soundblaster.
              #          Possible values: 7, 5, 3, 9, 10, 11, 12.
              #     dma: The DMA number of the soundblaster.
              #          Possible values: 1, 5, 0, 3, 6, 7.
              #    hdma: The High DMA number of the soundblaster.
              #          Possible values: 1, 5, 0, 3, 6, 7.
              # sbmixer: Allow the soundblaster mixer to modify the DOSBox mixer.
              # oplmode: Type of OPL emulation. On 'auto' the mode is determined by sblaster type. All OPL modes are Adlib-compatible, except for 'cms'.
              #          Possible values: auto, cms, opl2, dualopl2, opl3, none.
              #  oplemu: Provider for the OPL emulation. compat might provide better quality (see oplrate as well).
              #          Possible values: default, compat, fast.
              # oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly).
              #          Possible values: 44100, 49716, 48000, 32000, 22050, 16000, 11025, 8000.
              
              sbtype=sb16
              sbbase=220
              irq=5
              dma=1
              hdma=5
              sbmixer=true
              oplmode=auto
              oplemu=default
              oplrate=44100
              
              [gus]
              #      gus: Enable the Gravis Ultrasound emulation.
              #  gusrate: Sample rate of Ultrasound emulation.
              #           Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.
              #  gusbase: The IO base address of the Gravis Ultrasound.
              #           Possible values: 240, 220, 260, 280, 2a0, 2c0, 2e0, 300.
              #   gusirq: The IRQ number of the Gravis Ultrasound.
              #           Possible values: 5, 3, 7, 9, 10, 11, 12.
              #   gusdma: The DMA channel of the Gravis Ultrasound.
              #           Possible values: 3, 0, 1, 5, 6, 7.
              # ultradir: Path to Ultrasound directory. In this directory
              #           there should be a MIDI directory that contains
              #           the patch files for GUS playback. Patch sets used
              #           with Timidity should work fine.
              
              gus=false
              gusrate=44100
              gusbase=240
              gusirq=5
              gusdma=3
              ultradir=C:\ULTRASND
              
              [speaker]
              # pcspeaker: Enable PC-Speaker emulation.
              #    pcrate: Sample rate of the PC-Speaker sound generation.
              #            Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.
              #     tandy: Enable Tandy Sound System emulation. For 'auto', emulation is present only if machine is set to 'tandy'.
              #            Possible values: auto, on, off.
              # tandyrate: Sample rate of the Tandy 3-Voice generation.
              #            Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.
              #    disney: Enable Disney Sound Source emulation. (Covox Voice Master and Speech Thing compatible).
              
              pcspeaker=true
              pcrate=44100
              tandy=auto
              tandyrate=44100
              disney=true
              
              [joystick]
              # joysticktype: Type of joystick to emulate: auto (default), none,
              #               2axis (supports two joysticks),
              #               4axis (supports one joystick, first joystick used),
              #               4axis_2 (supports one joystick, second joystick used),
              #               fcs (Thrustmaster), ch (CH Flightstick).
              #               none disables joystick emulation.
              #               auto chooses emulation depending on real joystick(s).
              #               (Remember to reset dosbox's mapperfile if you saved it earlier)
              #               Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.
              #        timed: enable timed intervals for axis. Experiment with this option, if your joystick drifts (away).
              #     autofire: continuously fires as long as you keep the button pressed.
              #       swap34: swap the 3rd and the 4th axis. Can be useful for certain joysticks.
              #   buttonwrap: enable button wrapping at the number of emulated buttons.
              
              joysticktype=auto
              timed=true
              autofire=false
              swap34=false
              buttonwrap=true
              
              [serial]
              # serial1: set type of device connected to com port.
              #          Can be disabled, dummy, modem, nullmodem, directserial.
              #          Additional parameters must be in the same line in the form of
              #          parameter:value. Parameter for all types is irq (optional).
              #          for directserial: realport (required), rxdelay (optional).
              #                           (realport:COM1 realport:ttyS0).
              #          for modem: listenport (optional).
              #          for nullmodem: server, rxdelay, txdelay, telnet, usedtr,
              #                         transparent, port, inhsocket (all optional).
              #          Example: serial1=modem listenport:5000
              #          Possible values: dummy, disabled, modem, nullmodem, directserial.
              # serial2: see serial1
              #          Possible values: dummy, disabled, modem, nullmodem, directserial.
              # serial3: see serial1
              #          Possible values: dummy, disabled, modem, nullmodem, directserial.
              # serial4: see serial1
              #          Possible values: dummy, disabled, modem, nullmodem, directserial.
              
              serial1=dummy
              serial2=dummy
              serial3=disabled
              serial4=disabled
              
              [dos]
              #            xms: Enable XMS support.
              #            ems: Enable EMS support.
              #            umb: Enable UMB support.
              # keyboardlayout: Language code of the keyboard layout (or none).
              
              xms=true
              ems=true
              umb=true
              keyboardlayout=auto
              
              • dosboxConstructor_client.conf
              [IPX]
              Enable=1
              Connection=1
              ipx=true
              
              [autoexec]
              # Lines in this section will be run at startup.
              
              @ECHO OFF
              mount C ".."
              mount C "..\cloud_saves" -t overlay
              imgmount d "..\const.gog" -t iso -fs iso
              c:
              cls
              IPXNET CONNECT 127.0.0.1
              game.exe
              exit
              
              
              • dosboxConstructor_server.conf
              [IPX]
              Enable=1
              Connection=1
              ipx=true
              
              [autoexec]
              # Lines in this section will be run at startup.
              
              @ECHO OFF
              mount C ".."
              mount C "..\cloud_saves" -t overlay
              imgmount d "..\const.gog" -t iso -fs iso
              c:
              cls
              IPXNET STARTSERVER
              game.exe
              exit
              
              • dosboxConstructor_settings.conf
              [IPX]
              Enable=0
              Connection=0
              ipx=false
              
              [autoexec]
              # Lines in this section will be run at startup.
              
              @ECHO OFF
              mount C ".."
              imgmount d "..\const.gog" -t iso -fs iso
              c:
              cls
              setsound.bat
              exit
              
              • dosboxConstructor_single.conf
              [IPX]
              ipx=false
              
              [autoexec]
              # Lines in this section will be run at startup.
              
              @ECHO OFF
              cls
              mount C ".."
              mount C "..\cloud_saves" -t overlay
              imgmount d "..\const.gog" -t iso -fs iso
              c:
              goto launcher
              
              :launcher
              cls
              ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
              ECHO ÅŸ ------------------------------------------ ÅŸ
              ECHO ÅŸ  Constructor Launcher                      ÅŸ
              ECHO ÅŸ ------------------------------------------ ÅŸ
              ECHO ÅŸ  1) Constructor                            ÅŸ
              ECHO ÅŸ  2) Game DOS Settings                      ÅŸ
              ECHO ÅŸ ------------------------------------------ ÅŸ
              ECHO ÅŸ  3) exit program                           ÅŸ
              ECHO ÅŸ ------------------------------------------ ÅŸ
              ECHO ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ
              
              choice /c123 /s Which program do you want to run? [1-3]: /n 
              if errorlevel 3 goto exit
              if errorlevel 2 goto setup
              if errorlevel 1 goto game
              
              :game
              cls
              GAME.EXE
              goto exit
              
              :setup
              cls
              SETSOUND.BAT
              goto launcher
              
              :exit
              exit
              

              While it's obvious that this is a menu created to make it easier to select either Audio Configuration or Play Game, it simply doesn't work for on RetroPie's DOSBOX. On Windows it runs perfectly fine.

              mituM ClydeC 2 Replies Last reply Reply Quote 0
              • mituM
                mitu Global Moderator @RetroNerdman
                last edited by

                @RetroNerdman said in How do you intall GOG DOS games?:

                Network doesn't work, but it's most likely me who doesn't know how to make it work.

                I think you need to muck around with the IPX configuration options in the .conf files - but that might require some additional setup on the host OS.
                Glad you got it working and have fun !

                1 Reply Last reply Reply Quote 0
                • ClydeC
                  Clyde @RetroNerdman
                  last edited by

                  @RetroNerdman said in How do you intall GOG DOS games?:

                  @Clyde I've tried to unzip the files, however I got this error message (I used WinSCP to copy from Windows and connected to terminal through PuTTY):

                  Seems like unzip may have problems with zip files that are larger than 4GB. Is this the case with Constructor? Then 7z may be able to extract the file. See here and here.

                  1. Install 7z:
                  sudo apt install p7zip 
                  
                  1. Extract your archive:
                  7z x gog_constructor_2.0.0.2.sh
                  

                  This is merely FYI since you already got the contents of the Windows installer.

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    RetroNerdman @Clyde
                    last edited by

                    @Clyde Actually it's not, it's just a 245MB file. I also have enough disk space to have the whole game uncompressed (which is about 450MB).
                    But I still appreciate the help and the links.

                    ClydeC 1 Reply Last reply Reply Quote 0
                    • ClydeC
                      Clyde @RetroNerdman
                      last edited by

                      @RetroNerdman You're welcome. I only have experience with the Neo Geo GOG installers, so my advice is just fishing in muddy waters. 😉

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                      Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.