Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # usage: rip.sh tosec.7z
- # burns a cd-r rip from a tosec archive
- # only works for simple games at the moment
- # no cdda, under 616mb data
- # does 45000 lba data/data sao/tao, 80 min
- # required software: cdrkit/cdrtools, sed, 7z, xorriso, sfk, binhack, isofix,
- # pngtomr, imagemagick, pvr2png, disc juggler, logoinsert, dd, sox, fslint,
- # perl, awk, bash, bincon, dc_afsshrink
- #if file exists, continue
- if [ -f "$@" ]
- then
- CDDA=""
- CDDA=$(7z l "$@" | grep "track05.raw")
- if [ "$CDDA" != "" ]
- then
- echo "$@" >> ~/dcrips.cdda.txt
- exit 2
- fi
- # sync writes before we start
- sync
- FILEPATH=$@
- FILE=${FILEPATH##*/}
- BASENAME=$(echo "$FILE" | sed -e 's/...$//')
- # set cd-r options
- CDR_MINS=80
- LBA=45000
- CDROM_ID="/dev/sr2"
- # 2gb required in tmp, 3gb required in tmp2
- # put tmp on ram drive & tmp2 on different drive
- # to tosec gd-rom storage for speed
- # both in ram if you have it
- TMP_DIR="/tmp"
- TMP2_DIR="/tmp"
- # clean old dirs
- rm -rf "$TMP_DIR"/dcrip
- rm -rf "$TMP2_DIR"/gd
- mkdir "$TMP_DIR"/dcrip
- mkdir "$TMP_DIR"/gd
- TMP_DIR="$TMP_DIR"/dcrip/"$BASENAME"
- TMP2_DIR="$TMP2_DIR"/gd/"$BASENAME"
- mkdir "$TMP_DIR"
- mkdir "$TMP2_DIR"
- mkdir "$TMP_DIR"/dcrip
- mkdir "$TMP2_DIR"/gd
- # set default sox options
- export SOX_OPTS="-V1 --no-clobber --multi-threaded --buffer 134217728"
- # extract zip (command line parameter) to "$TMP2_DIR"
- 7z x -mmt=2 "$@" -o"$TMP2_DIR"/gd
- cd "$TMP2_DIR"/gd
- # Extract gd data to "$TMP_DIR"/
- if [ -f ./track05.bin ]
- then
- # rebuild iso for gd-roms with 5 tracks
- dd bs=352800 count=1 if=/dev/zero of="$TMP_DIR"/dcrip/pregap
- cat track03.bin "$TMP_DIR"/dcrip/pregap track04.raw "$TMP_DIR"/dcrip/pregap track05.bin > tmp.bin
- rm -rf track04.raw
- rm -rf track03.bin
- rm -rf track05.bin
- rm -rf "$TMP_DIR"/dcrip/pregap
- isofix tmp.bin 45000 > /dev/null
- rm -rf tmp.bin
- else
- # assume 3 tracks, cdda not handled yet
- isofix track03.bin 45000 > /dev/null
- rm -rf track03.bin
- fi
- rm -rf ./header.iso
- # get volume id & other metadata from iso
- VOL_ID=`file -s ./fixed.iso | sed "s/^.*'\(.*\)'.*$/\1/" | sed 's/^ *//;s/ *$//'`
- SYSTEM_ID=`isoinfo -d -i ./fixed.iso | grep "System id: " | sed -n "/System id: /s/System id: //p"`
- VOLUME_ID=`isoinfo -d -i ./fixed.iso | grep "Volume id: " | sed -n "/Volume id: /s/Volume id: //p"`
- VOLUME_SET_ID=`isoinfo -d -i ./fixed.iso | grep "Volume set id: " | sed -n "/Volume set id: /s/Volume set id: //p"`
- PUBLISHER_ID=`isoinfo -d -i ./fixed.iso | grep "Publisher id: " | sed -n "/Publisher id: /s/Publisher id: //p"`
- DATA_PREPARER_ID=`isoinfo -d -i ./fixed.iso | grep "Data preparer id: " | sed -n "/Data preparer id: /s/Data preparer id: //p"`
- APPLICATION_ID=`isoinfo -d -i ./fixed.iso | grep "Application id: " | sed -n "/Application id: /s/Application id: //p"`
- COPYRIGHT_FILE_ID=`isoinfo -d -i ./fixed.iso | grep "Copyright File id: " | sed -n "/Copyright File id: /s/Copyright File id: //p"`
- ABSTRACT_FILE_ID=`isoinfo -d -i ./fixed.iso | grep "Abstract File id: " | sed -n "/Abstract File id: /s/Abstract File id: //p"`
- BIBLIOGRAPHIC_FILE_ID=`isoinfo -d -i ./fixed.iso | grep "Bibliographic File id: " | sed -n "/Bibliographic File id: /s/Bibliographic File id: //p"`
- VOLUME_SET_SIZE=`isoinfo -d -i ./fixed.iso | grep "Volume set size is: " | sed -n "/Volume set size is: /s/Volume set size is: //p"`
- VOLUME_SET_NUMBER=`isoinfo -d -i ./fixed.iso | grep "Volume set sequence number is: " | sed -n "/Volume set sequence number is: /s/Volume set sequence number is: //p"`
- # bin 2 iso track01
- bchunk track01.bin /home//dc.cue track > /dev/null
- # Check if we have a custom file sort & copy it, else copy the gd-rom file sort.
- if [ -f /home//dcrip/filesort/$VOL_ID-filesort.txt ]
- then
- cp /home//dcrip/filesort/$VOL_ID-filesort.txt "$TMP_DIR"/dcrip/$VOL_ID-filesort.txt
- cp /home//dcrip/filesort/$VOL_ID-1-filesort.txt "$TMP_DIR"/dcrip/$VOL_ID-1-filesort.txt
- else
- # generate $VOL_ID-filesort.txt
- echo "DATA1/00.0 100000" > "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- echo "DATA1/AUTORUN.INF 9900" >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- echo "DATA1/0GDTEX.BMP 9800" >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- echo "DATA1/0GDTEX.PVR 9600" >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- echo "DATA2/0.0 10000" > "$TMP_DIR/dcrip/$VOL_ID-filesort.txt"
- # this hacky line of sed commands transforms the output of xorriso into a sort.txt that mkisofs can use
- # so the original gd-rom file order is preseved.
- xorriso -report_about SORRY -indev ./track01.iso -find . -sort_lba | grep -v "0GDTEX" | sed "s/'//g" | sed 's/^/DATA1/' | sed 's/$/\t-/' | awk '{print $0,FNR}' | sed 's/ //g' >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- xorriso -report_about SORRY -indev ./fixed.iso -find . -sort_lba | grep -v "0GDTEX" | sed "s/'//g" | sed 's/^/DATA2/' | sed 's/$/\t-/' | awk '{print $0,FNR}' | sed 's/ //g' | sed 's/$/00/' >> "$TMP_DIR/dcrip/$VOL_ID-filesort.txt"
- # these lines will give a plain unnumbered sort, useful for creating custom orders
- # xorriso -report_about SORRY -indev ./track01.iso -find . -sort_lba > "$TMP_DIR/dcrip/$VOL_ID-1-rawsort.txt"
- # xorriso -report_about SORRY -indev ./fixed.iso -find . -sort_lba >> "$TMP_DIR/dcrip/$VOL_ID-rawsort.txt"
- fi
- # extract track01
- xorriso -report_about SORRY -indev ./track01.iso -osirrox "on" -extract . "$TMP_DIR/dcrip/DATA1/"
- # set write permission, xorriso sets the dir to read only
- chmod +w -R "$TMP_DIR/dcrip/DATA1"
- # extract gd data
- xorriso -report_about SORRY -indev ./fixed.iso -osirrox "on" -extract . "$TMP_DIR/dcrip/DATA2/"
- # set write permission, xorriso sets the dir to read only
- chmod +w -R "$TMP_DIR/dcrip/DATA2"
- # set default $FIRST_READ get name from ip.bin, trim spaces, then get modification date & remove temp file
- sfk partcopy bootfile.bin -fromto 0x60 0x6F "$TMP_DIR"/dcrip/1st_read.txt -yes
- FIRST_READ=`cat "$TMP_DIR"/dcrip/1st_read.txt | sed 's/ //g'`
- FIRST_DATE=`date -r "$TMP_DIR"/dcrip/DATA2/$FIRST_READ +%Y%m%d%H%M.%S`
- rm -f "$TMP_DIR"/dcrip/1st_read.txt
- if [ $FIRST_READ = "0WINCEOS.BIN" ]
- then
- # echo "Wince!! - $*" >> /home/hdd//dcrips/errors.txt
- # exit
- bincon "$TMP_DIR"/dcrip/DATA2/$FIRST_READ "$TMP_DIR"/dcrip/DATA2/$FIRST_READ.tmp
- rm -rf "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- mv "$TMP_DIR"/dcrip/DATA2/$FIRST_READ.tmp "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- touch -t $FIRST_DATE "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- fi
- if [ $VOL_ID = "VIRTUA_TENNIS_2__" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' fixed.iso`
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy fixed.iso $OFFSET 32 "$TMP_DIR"/dcrip/toc.dat -yes
- sfk rep -binary /CDE4436A/09000900/ -dir "$TMP_DIR"/dcrip/DATA2/ -file 1ST_READ.BIN -yes
- rm -rf "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- touch "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- touch -t $FIRST_DATE "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- elif [ $VOL_ID = "TENNIS_2K2_______" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' fixed.iso`
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy fixed.iso $OFFSET 32 "$TMP_DIR"/dcrip/toc.dat -yes
- sfk rep -binary /CDE4436A/09000900/ -dir "$TMP_DIR"/dcrip/DATA2/ -file 1ST_READ.BIN -yes
- rm -rf "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- touch "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- touch -t $FIRST_DATE "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- elif [ $VOL_ID = "POWER_SMASH_2____" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' fixed.iso`
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy fixed.iso $OFFSET 32 "$TMP_DIR"/dcrip/toc.dat -yes
- # protection fix
- sfk rep -binary /CDE4436A/09000900/ -dir "$TMP_DIR"/dcrip/DATA2/ -file 1ST_READ.BIN -yes
- # replace dummy with 0 byte file
- rm -rf "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- touch "$TMP_DIR"/dcrip/DATA2/BIG512.BIN
- # set 1ST_READ modification time to the original
- touch -t $FIRST_DATE "$TMP_DIR"/dcrip/DATA2/$FIRST_READ
- elif [ $VOL_ID = "SILENT_SCOPE" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /SPECIAL.BIN/g' fixed.iso`
- OFFSET=`expr $OFFSET1 - 43`
- sfk partcopy fixed.iso $OFFSET 32 "$TMP_DIR"/dcrip/toc.dat -yes
- rm -rf "$TMP_DIR"/dcrip/DATA2/SPECIAL.BIN
- touch "$TMP_DIR"/dcrip/DATA2/SPECIAL.BIN
- fi
- rm -rf fixed.iso
- # generate audio track, use track 2 audio from gd & pad it for 45000 lba
- # convert to wav by piping through sox.
- AUDIO_SIZE=`stat -c %s track02.raw`
- SESSION_SECTORS=`expr $LBA - 11400`
- SESSION_SIZE=`expr $SESSION_SECTORS \* 2352`
- #DUMMY_SIZE=`expr $SESSION_SIZE - $AUDIO_SIZE`
- #dd bs=$DUMMY_SIZE count=1 if=/dev/zero of="$TMP_DIR"/dcrip/tmp.raw
- #cat track02.raw "$TMP_DIR"/dcrip/tmp.raw | sox -r 44100 -e signed -b 16 -c 2 -t raw - \
- # -r 44100 -e signed -b 16 -c 2 -t wav "$TMP_DIR"/dcrip/$VOL_ID-audio.wav
- #rm -rf "$TMP_DIR"/dcrip/tmp.raw
- rm -rf track*.*
- #echo "CD_ROM_XA" > "$TMP_DIR"/dcrip/$VOL_ID-audio.toc
- #echo "" >> "$TMP_DIR"/dcrip/$VOL_ID-audio.toc
- #echo "TRACK AUDIO" >> "$TMP_DIR"/dcrip/$VOL_ID-audio.toc
- #echo "AUDIOFILE \"$VOL_ID-audio.wav\" 0" >> "$TMP_DIR"/dcrip/$VOL_ID-audio.toc
- # remove warning & useless files
- rm -rf "$TMP_DIR"/dcrip/DATA2/*.DA
- rm -rf "$TMP_DIR"/dcrip/DATA2/IP.BIN
- rm -rf "$TMP_DIR"/dcrip/DATA2/IP0000.BIN
- rm -rf "$TMP_DIR"/dcrip/DATA1/*.DA
- rm -rf "$TMP_DIR"/dcrip/DATA1/IP.BIN
- rm -rf "$TMP_DIR"/dcrip/DATA1/IP0000.BIN
- # copy bootfile
- mv ./bootfile.bin "$TMP_DIR"/dcrip/IP.BIN
- cd "$TMP_DIR"/dcrip/
- # remove "$TMP2_DIR"
- rm -rf "$TMP2_DIR"/gd
- # game specific hacks
- if [ $VOL_ID = "THE_TYPING_OF_THE_DEAD" ]
- then
- # remove garbage data
- rm -rf ./DATA2/PJWJFCFF.ADX
- rm -rf ./DATA2/QJVLTRPQ.ADX
- rm -rf ./DATA2/QKEFIBMS.ADX
- rm -rf ./DATA2/QLHLCGXO.ADX
- rm -rf ./DATA2/ROWCOUFN.ADX
- rm -rf ./DATA2/RSVTSJTR.ADX
- rm -rf ./DATA2/RVBMIRHK.ADX
- rm -rf ./DATA2/SOPLDNMI.ADX
- rm -rf ./DATA2/THQAFGPU.ADX
- rm -rf ./DATA2/TIEROMCA.ADX
- rm -rf ./DATA2/UMLPTBTL.ADX
- rm -rf ./DATA2/UPPBWOJU.ADX
- rm -rf ./DATA2/VDEPEXIN.ADX
- rm -rf ./DATA2/VFJHWIHT.ADX
- rm -rf ./DATA2/VYXPMFPI.ADX
- rm -rf ./DATA2/WGENOWNJ.ADX
- rm -rf ./DATA2/WRTCWGJV.ADX
- rm -rf ./DATA2/WVFJYHTA.ADX
- rm -rf ./DATA2/XGJLSFXY.ADX
- rm -rf ./DATA2/XICOOGBL.ADX
- rm -rf ./DATA2/XTMQXIIJ.ADX
- rm -rf ./DATA2/ZOMBIE01.AFS
- rm -rf ./DATA2/ZOMBIE02.AFS
- rm -rf ./DATA2/ZOMBIE03.AFS
- rm -rf ./DATA2/ZOMBIE04.AFS
- rm -rf ./DATA2/ZOMBIE05.AFS
- rm -rf ./DATA2/ZOMBIE06.AFS
- rm -rf ./DATA2/ZOMBIE07.AFS
- rm -rf ./DATA2/ZOMBIE08.AFS
- rm -rf ./DATA2/ZOMBIE09.AFS
- rm -rf ./DATA2/ZOMBIE10.AFS
- rm -rf ./DATA2/ZOMBIE11.AFS
- rm -rf ./DATA2/ZOMBIE12.AFS
- rm -rf ./DATA2/ZOMBIE13.AFS
- rm -rf ./DATA2/ZOMBIE14.AFS
- rm -rf ./DATA2/ZOMBIE15.AFS
- rm -rf ./DATA2/ZOMBIE16.AFS
- rm -rf ./DATA2/ZOMBIE17.AFS
- rm -rf ./DATA2/ZOMBIE18.AFS
- rm -rf ./DATA2/ZOMBIE19.AFS
- rm -rf ./DATA2/ZOMBIE20.AFS
- rm -rf ./DATA2/ZOMBIE21.AFS
- rm -rf ./DATA2/STAGE1.AFS
- rm -rf ./DATA2/STAGE2.AFS
- rm -rf ./DATA2/STAGE3.AFS
- rm -rf ./DATA2/STAGE4.AFS
- rm -rf ./DATA2/STAGE5.AFS
- rm -rf ./DATA2/STAGE6.AFS
- rm -rf ./DATA2/STAGE_TRN.AFS
- rm -rf ./DATA2/AJLAJOPT.AFS
- rm -rf ./DATA2/ALIKXTCI.AFS
- rm -rf ./DATA2/EKKPVIDS.AFS
- rm -rf ./DATA2/EVTEUEUH.AFS
- rm -rf ./DATA2/GMJPVVLO.AFS
- rm -rf ./DATA2/GNCTCVIH.AFS
- rm -rf ./DATA2/HBGDEPFL.AFS
- rm -rf ./DATA2/HSIJULRG.AFS
- rm -rf ./DATA2/KANWAIHO.AFS
- rm -rf ./DATA2/KMKWWCTS.AFS
- rm -rf ./DATA2/KTMIGQHX.AFS
- rm -rf ./DATA2/LIHKFEXJ.AFS
- rm -rf ./DATA2/OBPAAIKC.AFS
- rm -rf ./DATA2/OSXDIRXU.AFS
- rm -rf ./DATA2/PHQDVGCE.AFS
- rm -rf ./DATA2/PJWJFCFF.AFS
- rm -rf ./DATA2/QLHLCGXO.AFS
- rm -rf ./DATA2/TIEROMCA.AFS
- rm -rf ./DATA2/VDEPEXIN.AFS
- rm -rf ./DATA2/WVFJYHTA.AFS
- rm -rf ./DATA2/XGJLSFXY.AFS
- elif [ $VOL_ID = "OUTTRIGGER" ]
- then
- # protection fix
- sfk rep -binary /CDEB22D1/090022D1/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- elif [ $VOL_ID = "UFCPAL10001" ]
- then
- # protection fix
- sfk rep -binary /15D330300189/15D318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- sfk rep -binary /406320330189/406318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- rm -rf /tmp/dcrip/DATA2/Z500MB.ZZZ
- dd bs=1908900 count=1 if=/dev/zero of=./DATA2/Z500MB.ZZZ
- elif [ $VOL_ID = "ULTIMATE_FIGHTING_CHAMPIONSHIP" ]
- then
- # japan
- # protection fix
- sfk rep -binary /15D330300189/15D318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- sfk rep -binary /406320330189/406318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- dd bs=2710814 count=1 if=/dev/zero of=./DATA2/Z700MB.ZZZ
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- elif [ $VOL_ID = "UFCMASTER10011" ]
- then
- # USA
- # protection fix
- sfk rep -binary /15D330300189/15D318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- sfk rep -binary /406320330189/406318000189/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- dd bs=2710814 count=1 if=/dev/zero of=./DATA2/Z700MB.ZZZ
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- elif [ $VOL_ID = "SOULCALIBUR" ]
- then
- cd ./DATA2/
- # find P16 audio files
- # raw pcm signed le 16bit 44.1khz
- for fl in *R.P16
- do
- # downmix 16bit audio to mono
- SIZE=`stat -c %s $fl`
- if [ $SIZE -gt 1 ]
- then
- # strip last chars from file name
- pr=$(echo $fl | sed -e 's/.....$//')
- # use sox to mix both channels into a mono channel
- # need to specify file format, because these are raw files, no header
- # use mix-power to maintain same volume as input
- # dither with noise shaping to reduce effect of downsampling
- sox -G --combine mix-power \
- -r 44100 -e signed -b 16 -c 1 -t raw "$pr"L.P16 \
- -r 44100 -e signed -b 16 -c 1 -t raw "$pr"R.P16 \
- -r 44100 -e signed -b 16 -c 1 -t raw "$pr"M.P16 dither -s
- # remove old files
- RDATE=`date -r "$pr"R.P16 +%Y%m%d%H%M.%S`
- LDATE=`date -r "$pr"L.P16 +%Y%m%d%H%M.%S`
- rm -f "$pr"R.P16
- rm -f "$pr"L.P16
- mv "$pr"M.P16 "$pr"L.P16
- ln "$pr"L.P16 "$pr"R.P16
- touch -t $LDATE "$pr"L.P16
- touch -t $RDATE "$pr"R.P16
- fi
- done
- # find P08 audio file
- # raw pcm signed le 8bit 44.1khz
- # there's only one & it's repeated in 16bit,
- # probably a dummy, but downmix it anyway
- for fl in *R.P08
- do
- # strip last chars from file name
- pr=$(echo $fl | sed -e 's/.....$//')
- # use sox to mix both channels into a mono channel
- # need to specify file format, because these are raw files, no header
- # use mix-power to maintain same volume as input
- # dither with noise shaping to reduce effect of downsampling
- sox -G --combine mix-power \
- -r 44100 -e signed -b 8 -c 1 -t raw "$pr"L.P08 \
- -r 44100 -e signed -b 8 -c 1 -t raw "$pr"R.P08 \
- -r 44100 -e signed -b 8 -c 1 -t raw "$pr"M.P08 dither -s
- # remove old files
- RDATE=`date -r "$pr"R.P08 +%Y%m%d%H%M.%S`
- LDATE=`date -r "$pr"L.P08 +%Y%m%d%H%M.%S`
- rm -f "$pr"R.P08
- rm -f "$pr"L.P08
- mv "$pr"M.P08 "$pr"L.P08
- ln "$pr"L.P08 "$pr"R.P08
- touch -t $LDATE "$pr"L.P08
- touch -t $RDATE "$pr"R.P08
- done
- cd ..
- elif [ $VOL_ID = "DONALD_DUCK_QUACK_ATTACK" ]
- then
- # data/data german & italian intro videos to first session
- mv ./DATA2/INTROAL.SFD ./DATA1/INTROAL.SFD
- mv ./DATA2/INTROIT.SFD ./DATA1/INTROIT.SFD
- elif [ $VOL_ID = "DONALD1" ]
- then
- # usa version - goin' quackers
- mv ./DATA2/INTROAL.SFD ./DATA1/INTROAL.SFD
- mv ./DATA2/INTROIT.SFD ./DATA1/INTROIT.SFD
- elif [ $VOL_ID = "CANNON_SPIKE" ]
- then
- rm ./DATA1/DMY.BIN
- elif [ $VOL_ID = "JIMMY_WHITES_2_CUEBALL" ]
- then
- rm ./DATA1/PADDINGA.PAD
- elif [ $VOL_ID = "CHICKENRUN" ]
- then
- rm ./DATA1/PAD.DAT
- elif [ $VOL_ID = "GUNBIRD2" ]
- then
- rm ./DATA1/DUMMY.DAT
- elif [ $VOL_ID = "JOJO" ]
- then
- rm ./DATA1/DUMMY.DAT
- elif [ $VOL_ID = "MTVSKATE" ]
- then
- rm ./DATA1/DCVOICE.DA
- mv ./DATA2/MTV_LRV.SFD ./DATA1/
- mv ./DATA2/FLH_LRV.SFD ./DATA1/
- echo "DATA1/MTV_LRV.SFD -100" >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- echo "DATA1/FLH_LRV.SFD -110" >> "$TMP_DIR/dcrip/$VOL_ID-1-filesort.txt"
- fi
- # shrink .afs files
- find ./ -name *.AFS -type f -exec /home//bin/afsshrink.sh '{}' \;
- # deduplicate & relink files
- /usr/share/fslint/fslint/findup -m
- # 60hz pal patch if game isn't pal...
- PAL=""
- PAL=$(grep "EUROPE" IP.BIN)
- if [ "$PAL" = "" ]
- then
- echo "60hz PAL Patch"
- sfk rep -binary /A001E403A002E401A003/A000E403A000E401A000/ -dir ./DATA2/ -file "$FIRST_READ" -yes
- touch -t $FIRST_DATE ./DATA2/$FIRST_READ
- fi
- # copy "$FIRST_READ" so binhack works, don't use binhacked copy, no need
- cp ./DATA2/"$FIRST_READ" .
- # binhack, this is just for the IP.BIN so we remove "$FIRST_READ" after
- echo -e "$FIRST_READ\nIP.BIN\n$LBA\n" | binhack32
- rm -rf ./$FIRST_READ
- #if [ -f "./DATA2/0GDTEX.PVR" ]
- if [ true = false ]
- then
- # convert disc icon with pvr2png & image magick, then generate autorun.inf
- cd ./DATA2/
- OGD_DATE=`date -r ./0GDTEX.PVR +%Y%m%d%H%M.%S`
- wine /home//Downloads/Pvr2Png.exe 0GDTEX.PVR 0GDTEX.PNG > /dev/null
- convert 0GDTEX.PNG -background "#FFFFFF" ../DATA1/0GDTEX.BMP
- # flip it
- ### convert 0GDTEX.PNG -background "#FFFFFF" -flip -flop ../DATA1/0GDTEX.BMP
- touch -t $OGD_DATE ../DATA1/0GDTEX.BMP
- LABEL=`echo $VOL_ID | sed 's/_/ /g' | sed 's/\(.*\)/\L\1/' | sed 's/\<./\U&/g'`
- echo -e "[autorun]\r\nlabel=$LABEL\r\nicon=0GDTEX.BMP\r\n" > ../DATA1/AUTORUN.INF
- touch -t $FIRST_DATE ../DATA1/AUTORUN.INF
- # convert 0gdtex into a logo.mr to insert into ip.bin
- convert 0GDTEX.PNG -background "#C3C3C3" -filter Lanczos -distort Resize 90X90 -alpha Remove -colors 128 ../logo.png
- # flip it
- ### convert 0GDTEX.PNG -background "#C3C3C3" -filter Lanczos -distort Resize 90X90 -alpha Remove -flip -flop -colors 128 ../logo.png
- rm -rf 0GDTEX.PNG
- mv 0GDTEX.PVR ../DATA1/
- cd ..
- pngtomr logo.png logo.mr
- logoinsert logo.mr IP.BIN
- rm -rf logo.*
- fi
- #### BUILD SESSION 1 (DATA)
- echo "CD_ROM_XA" > "$TMP_DIR"/dcrip/$VOL_ID-data1.toc
- echo "" >> "$TMP_DIR"/dcrip/$VOL_ID-data1.toc
- echo "TRACK MODE2_FORM1" >> "$TMP_DIR"/dcrip/$VOL_ID-data1.toc
- echo "DATAFILE \"$VOL_ID-data1.iso\"" >> "$TMP_DIR"/dcrip/$VOL_ID-data1.toc
- # create first test iso to see how big the dummy should be
- mkisofs -quiet -G IP.BIN -sort $VOL_ID-1-filesort.txt -hide 00.0 -l -V "$VOLUME_ID" -sysid "$SYSTEM_ID" -A "$APPLICATION_ID" -volset "$VOLUME_SET_ID" -volset-size "$VOLUME_SET_SIZE" -volset-seqno "$VOLUME_SET_NUMBER" -publisher "$PUBLISHER_ID" -p "$DATA_PREPARER_ID" -copyright "$COPYRIGHT_FILE_ID" -abstract "$ABSTRACT_FILE_ID" -biblio "$BIBLIOGRAPHIC_FILE_ID" -o $VOL_ID-data1.iso DATA1/
- # get test iso size
- GAME_SIZE=`stat -c %s $VOL_ID-data1.iso`
- # delete temporary iso with no dummy, we're done with it
- rm -rf ./$VOL_ID-data1.iso
- # convert size to cd sectors
- GAME_SECTORS=`expr $GAME_SIZE / 2048`
- DUMMY_SECTORS=`expr $SESSION_SECTORS - $GAME_SECTORS`
- # multiply by 2048 to find out how big the dummy file should be in bytes
- DUMMY_SIZE=`expr $DUMMY_SECTORS \* 2048`
- if [ $DUMMY_SIZE -lt 0 ]
- then
- echo "1st session too big! - $@ = $GAME_SIZE bytes, need to lose $DUMMY_SIZE bytes"
- exit 1
- fi
- # create dummy file
- dd bs=$DUMMY_SIZE count=1 if=/dev/zero of=./DATA1/00.0
- # make real iso
- mkisofs -quiet -G IP.BIN -sort $VOL_ID-1-filesort.txt -hide 00.0 -l -V "$VOLUME_ID" -sysid "$SYSTEM_ID" -A "$APPLICATION_ID" -volset "$VOLUME_SET_ID" -volset-size "$VOLUME_SET_SIZE" -volset-seqno "$VOLUME_SET_NUMBER" -publisher "$PUBLISHER_ID" -p "$DATA_PREPARER_ID" -copyright "$COPYRIGHT_FILE_ID" -abstract "$ABSTRACT_FILE_ID" -biblio "$BIBLIOGRAPHIC_FILE_ID" -o $VOL_ID-data1.iso DATA1/
- DATADATA="-M $VOL_ID-data1.iso"
- #### BUILD SESSION 2 (DATA)
- # create first test iso to see how big the dummy should be
- mkisofs -quiet -G IP.BIN -sort $VOL_ID-filesort.txt -hide 0.0 -C 0,45000 $DATADATA -l -V "$VOLUME_ID" -sysid "$SYSTEM_ID" -A "$APPLICATION_ID" -volset "$VOLUME_SET_ID" -volset-size "$VOLUME_SET_SIZE" -volset-seqno "$VOLUME_SET_NUMBER" -publisher "$PUBLISHER_ID" -p "$DATA_PREPARER_ID" -copyright "$COPYRIGHT_FILE_ID" -abstract "$ABSTRACT_FILE_ID" -biblio "$BIBLIOGRAPHIC_FILE_ID" -o $VOL_ID-data.iso DATA2/
- # get test iso size
- GAME_SIZE=`stat -c %s $VOL_ID-data.iso`
- # delete temporary iso with no dummy, we're done with it
- #rm -rf ./$VOL_ID-data.iso
- # maximum possible sectors, 4500 sectors per minute of audio
- CDR_SECTORS=`expr $CDR_MINS \* 4500`
- # more realistic, most manufacturers leave you a few sectors short
- # 20 should be safe
- CDR_SECTORS=`expr $CDR_SECTORS - 20`
- # convert that to cd sectors
- GAME_SECTORS=`expr $GAME_SIZE / 2048`
- # add session start, pregap & 2
- DISC_SECTORS=`expr $GAME_SECTORS + $LBA + 150 + 2`
- # difference between maximum space allowed & what we have so far, in cd sectors
- DUMMY_SECTORS=`expr $CDR_SECTORS - $DISC_SECTORS`
- # multiply by 2048 to find out how big the dummy file should be in bytes
- DUMMY_SIZE=`expr $DUMMY_SECTORS \* 2048`
- if [ $DUMMY_SIZE -lt 0 ]
- then
- if [ $DUMMY_SIZE -lt -68000000 ]
- then
- SIZE=`expr $DUMMY_SIZE + 68000000`
- echo "$@ Game too big! = $GAME_SIZE bytes, need to lose $SIZE bytes" >> ~/dcrips.bad.txt
- else
- echo "$@ 2nd session too big! = $GAME_SIZE bytes, move $DUMMY_SIZE bytes to first session" >> ~/dcrips.fix.txt
- fi
- exit 1
- else
- echo "$@ OK, game fits = $GAME_SIZE bytes, dummy is $DUMMY_SIZE bytes" >> ~/dcrips.txt
- exit
- fi
- # create dummy file
- dd bs=$DUMMY_SIZE count=1 if=/dev/zero of=./DATA2/0.0
- # make real iso
- mkisofs -quiet -G IP.BIN -sort $VOL_ID-filesort.txt -hide 0.0 -C 0,45000 $DATADATA -l -V "$VOLUME_ID" -sysid "$SYSTEM_ID" -A "$APPLICATION_ID" -volset "$VOLUME_SET_ID" -volset-size "$VOLUME_SET_SIZE" -volset-seqno "$VOLUME_SET_NUMBER" -publisher "$PUBLISHER_ID" -p "$DATA_PREPARER_ID" -copyright "$COPYRIGHT_FILE_ID" -abstract "$ABSTRACT_FILE_ID" -biblio "$BIBLIOGRAPHIC_FILE_ID" -o $VOL_ID-data.iso DATA2/
- exit
- # remove files
- rm -rf "$TMP_DIR"/dcrip/DATA2
- rm -rf "$TMP_DIR"/dcrip/DATA1
- rm -rf "$TMP_DIR"/dcrip/IP.BIN
- if [ $VOL_ID = "VIRTUA_TENNIS_2__" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' $VOL_ID-data.iso`
- # above command gets us the offset of the end of the filename
- # we need the 32 bytes from before the start of the filename
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy toc.dat 0 32 $VOL_ID-data.iso $OFFSET -yes
- rm -rf toc.dat
- elif [ $VOL_ID = "TENNIS_2K2_______" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' $VOL_ID-data.iso`
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy toc.dat 0 32 $VOL_ID-data.iso $OFFSET -yes
- rm -rf toc.dat
- elif [ $VOL_ID = "POWER_SMASH_2____" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /BIG512.BIN/g' $VOL_ID-data.iso`
- OFFSET=`expr $OFFSET1 - 42`
- sfk partcopy toc.dat 0 32 $VOL_ID-data.iso $OFFSET -yes
- rm -rf toc.dat
- elif [ $VOL_ID = "SILENT_SCOPE" ]
- then
- # copy toc info for dummy file protection
- OFFSET1=`perl -ln0777e 'print pos() while /SPECIAL.BIN/g' $VOL_ID-data.iso`
- OFFSET=`expr $OFFSET1 - 43`
- sfk partcopy toc.dat 0 32 $VOL_ID-data.iso $OFFSET -yes
- rm -rf toc.dat
- fi
- umount /run/media//*
- if [ -f "$VOL_ID-data1.iso" ]
- then
- # burn data 1st session, sao mode
- echo "data"
- #### cdrecord dev=$CDROM_ID driveropts=noburnfree -multi -xa $VOL_ID-data1.iso speed=24
- cdrdao write --multi --speed 32 --device $CDROM_ID $VOL_ID-data1.toc
- elif [ -f $VOL_ID-audio.wav ]
- then
- # burn audio 1st session
- echo "audio"
- ### cdrecord dev=$CDROM_ID driveropts=noburnfree -multi -audio $VOL_ID-audio.wav speed=24
- cdrdao write --multi --speed 32 --device $CDROM_ID $VOL_ID-audio.toc
- fi
- # burn data 2nd session, tao mode - needed for some writers
- cdrecord dev=$CDROM_ID -tao driveropts=noburnfree -xa $VOL_ID-data.iso speed=32
- # remove temp directory
- cd /home//dcrips
- rm -rf "$TMP_DIR"/
- rm -rf "$TMP2_DIR"/
- cd ../..
- # start disc juggler
- wine /home/hdd//.wine/drive_c/Program\ Files\ \(x86\)/Padus/DiscJuggler/Cdj.exe
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement