Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- CACHE=~/.nca
- # Default I use the title id of Devious Dungeon DEMO
- TITLE=0100EB900A534000
- ARGS=`getopt -o k:x:t: --long key:,xci:,title:,help -n 'example.bash' -- "$@"` && eval set -- "$ARGS"
- usage() {
- cat <<- EOF
- xci2lfs [Options] dir
- Convert XCI game format to be used by Atmosphere.
- Options:
- -c|--key file key.dat location
- -x|--xci file .xci game location
- -t|--title id target title id, default is "0100EB900A534000"
- EOF
- }
- prepare() {
- [ -e $CACHE] && [ -d $CACHE ] || mkdir -p ~/.nca
- [ -e $ROMFS] && [ -d $ROMFS ] || mkdir -p $ROMFS
- [ -e $EXEFS] && [ -d $EXEFS ] || mkdir -p $EXEFS
- }
- extract() {
- HOME=$CACHE/$TITLE
- [ -d $HOME ] || mkdir -p $HOME
- hactool -k $KEYFL -txci --securedir=$HOME $XCIFL
- NCA=$HOME/$(ls -S $HOME | head -1)
- hactool -k $KEYFL --section0dir=$EXEFS $NCA
- hactool -k $KEYFL --section1dir=$ROMFS $NCA
- }
- update_npdm() {
- cp $EXEFS/main.npdm $EXEFS/main.npdm.orig
- perl -e "print pack 'Q', 0x$TITLE" | dd of=$EXEFS/main.npdm bs=1 seek=1088 count=8 conv=notrunc
- }
- while true; do
- case "$1" in
- -k|--key) KEYFL=$2; shift 2;;
- -x|--xci) XCIFL=$2; shift 2;;
- -t|--title) TITLE=$2; shift 2;;
- --help) usage; exit 0 ;;
- --) shift; break ;;
- *) echo "Invalid arguments."; exit 1 ;;
- esac
- done
- OUTPUT="$1"; [ -z "$OUTPUT" ] && OUTPUT=$PWD
- ROMFS=$OUTPUT/$TITLE/romfs
- EXEFS=$OUTPUT/$TITLE/exefs
- if [ ! -e "$KEYFL" ]; then
- echo "Please provide a valid key.dat file."; exit 1
- fi
- if [ ! -e "$XCIFL" ]; then
- echo "Please provide a valid .xci file."; exit 1
- fi
- prepare
- extract
- update_npdm
Add Comment
Please, Sign In to add comment