diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f12f5b50..64b9c875a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ * Reduced RAM and VRAM usage, reducing load times by Auria and Benau * New kart Wilbert by Jymis * New kart Hexley by Jymis -* New track Cornfield Crossing by samuncle +* New tracks Cornfield Crossing and Candela City by samuncle * Physics improvements and various physics bugfixes by hiker * Kart GFX improvements (exhaust and headlight) * In-game screen recording feature by Benau and Stragus @@ -10,6 +10,8 @@ * Hardware skinning * New smoother camera by Auria * New grand prix win scene +* Gamepad configuration bugfixes +* 3 Strikes Battles : added spare tire karts * Various improvements (wall driving fixes, parachutes, GP points, cannon fixes, colorization shader) ## SuperTuxKart 0.9.2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 552f04ac0..a8f1a4d7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,11 +255,6 @@ if(UNIX AND NOT APPLE AND NOT SERVER_ONLY) find_package(X11 REQUIRED) include_directories(${X11_INCLUDE_DIR}) - find_package(Xrandr REQUIRED) - if(NOT XRANDR_FOUND) - message(FATAL_ERROR "XRANDR not found.") - endif() - if(USE_LIBBFD) find_package(Libbfd) if(LIBBFD_FOUND) @@ -419,7 +414,7 @@ if(NOT SERVER_ONLY) endif() if(UNIX AND NOT APPLE) - target_link_libraries(supertuxkart ${X11_LIBRARIES} ${XRANDR_LIBRARIES}) + target_link_libraries(supertuxkart ${X11_X11_LIB}) if(USE_LIBBFD) target_link_libraries(supertuxkart ${LIBBFD_LIBRARIES}) endif() diff --git a/android/README.ANDROID b/android/README.ANDROID index bd8793919..689d09928 100644 --- a/android/README.ANDROID +++ b/android/README.ANDROID @@ -44,7 +44,8 @@ and extract it to stk-code/lib. It contains sources of libraries that are used in STK, but are not availiable in stk-code repository (curl, freetype, openal). You need also Android SDK for android-19 platform (the API for Android 4.4) and -Android NDK r12b. +Android NDK. Note that NDK >= r15b is atm. not supported. Version r12b is +strongly recommended, because it's known that it works without issues. You need to create proper "android-sdk" and "android-ndk" symlinks in the directory with Android project, so that the compilation script will have access diff --git a/android/generate_assets.sh b/android/generate_assets.sh index b76822c6a..d3b61a5c4 100755 --- a/android/generate_assets.sh +++ b/android/generate_assets.sh @@ -19,7 +19,7 @@ ################################################################################ -export KARTS="elephpant gnu nolok pidgin suzanne tux xue" +export KARTS="all" export TRACKS="battleisland cornfield_crossing featunlocked gplose gpwin \ hacienda introcutscene introcutscene2 lighthouse olivermath \ overworld sandtrack scotland snowmountain snowtuxpeak \ @@ -42,6 +42,8 @@ export RUN_OPTIMIZE_SCRIPT=0 export DECREASE_QUALITY=1 export CONVERT_TO_JPG=1 +export CONVERT_TO_JPG_BLACKLIST="data/karts/hexley/hexley_kart_diffuse.png" + export BLACKLIST_FILES="data/music/cocoa_river_fast.ogg2" ################################################################################ @@ -52,21 +54,21 @@ cd "`dirname "$0"`" # Find assets path for ASSETS_PATH in $ASSETS_PATHS; do - if [ -d $ASSETS_PATH ] && [ `ls $ASSETS_PATH | grep -c tracks` -gt 0 ]; then - echo "Assets found in $ASSETS_PATH" - ASSETS_PATH_FOUND=1 - break - fi + if [ -d $ASSETS_PATH ] && [ `ls $ASSETS_PATH | grep -c tracks` -gt 0 ]; then + echo "Assets found in $ASSETS_PATH" + ASSETS_PATH_FOUND=1 + break + fi done if [ -z $ASSETS_PATH_FOUND ]; then - echo "Couldn't find assets path" - exit 1 + echo "Couldn't find assets path" + exit 1 fi if [ ! -d "../data" ]; then - echo "Couldn't find data directory" - exit 1 + echo "Couldn't find data directory" + exit 1 fi @@ -81,27 +83,27 @@ echo "Copy all assets" mkdir -p assets/data for DIR in `ls $ASSETS_PATH`; do - CAN_BE_COPIED=0 + CAN_BE_COPIED=0 - for ASSETS_DIR in $ASSETS_DIRS; do - if [ $DIR = $ASSETS_DIR ]; then - CAN_BE_COPIED=1 - break - fi - done; + for ASSETS_DIR in $ASSETS_DIRS; do + if [ $DIR = $ASSETS_DIR ]; then + CAN_BE_COPIED=1 + break + fi + done; - # Don't copy karts and tracks. It will be handled later - BLACKLIST_ASSETS="karts tracks" - for ASSETS_DIR in $BLACKLIST_ASSETS; do - if [ $DIR = $ASSETS_DIR ]; then - CAN_BE_COPIED=0 - break - fi - done; + # Don't copy karts and tracks. It will be handled later + BLACKLIST_ASSETS="karts tracks" + for ASSETS_DIR in $BLACKLIST_ASSETS; do + if [ $DIR = $ASSETS_DIR ]; then + CAN_BE_COPIED=0 + break + fi + done; - if [ $CAN_BE_COPIED -gt 0 ]; then - cp -a "$ASSETS_PATH/$DIR" assets/data/ - fi + if [ $CAN_BE_COPIED -gt 0 ]; then + cp -a "$ASSETS_PATH/$DIR" assets/data/ + fi done; @@ -111,22 +113,22 @@ echo "Copy selected tracks" mkdir -p assets/data/tracks for DIR in `ls $ASSETS_PATH/tracks`; do - CAN_BE_COPIED=0 + CAN_BE_COPIED=0 - if [ "$TRACKS" != "all" ]; then - for TRACK in $TRACKS; do - if [ $DIR = $TRACK ]; then - CAN_BE_COPIED=1 - break - fi - done; - else - CAN_BE_COPIED=1 - fi + if [ "$TRACKS" != "all" ]; then + for TRACK in $TRACKS; do + if [ $DIR = $TRACK ]; then + CAN_BE_COPIED=1 + break + fi + done; + else + CAN_BE_COPIED=1 + fi - if [ $CAN_BE_COPIED -gt 0 ]; then - cp -a "$ASSETS_PATH/tracks/$DIR" assets/data/tracks/ - fi + if [ $CAN_BE_COPIED -gt 0 ]; then + cp -a "$ASSETS_PATH/tracks/$DIR" assets/data/tracks/ + fi done @@ -136,22 +138,22 @@ echo "Copy selected karts" mkdir -p assets/data/karts for DIR in `ls $ASSETS_PATH/karts`; do - CAN_BE_COPIED=0 + CAN_BE_COPIED=0 - if [ "$KARTS" != "all" ]; then - for KART in $KARTS; do - if [ $DIR = $KART ]; then - CAN_BE_COPIED=1 - break - fi - done; - else - CAN_BE_COPIED=1 - fi + if [ "$KARTS" != "all" ]; then + for KART in $KARTS; do + if [ $DIR = $KART ]; then + CAN_BE_COPIED=1 + break + fi + done; + else + CAN_BE_COPIED=1 + fi - if [ $CAN_BE_COPIED -gt 0 ]; then - cp -a "$ASSETS_PATH/karts/$DIR" assets/data/karts/ - fi + if [ $CAN_BE_COPIED -gt 0 ]; then + cp -a "$ASSETS_PATH/karts/$DIR" assets/data/karts/ + fi done @@ -160,263 +162,405 @@ echo "Decrease assets quality" convert_image() { - if [ -z "$1" ]; then - echo "No file to convert" - return - fi + FILE="$1" + FILE_TYPE="$2" + echo "Convert file: $FILE" - FILE="$1" - FILE_TYPE="$2" + if [ ! -f "$FILE" ]; then + echo " File doesn't exist." + return + fi - W=`identify -format "%[fx:w]" "$FILE"` - H=`identify -format "%[fx:h]" "$FILE"` + W=`identify -format "%[fx:w]" "$FILE"` + H=`identify -format "%[fx:h]" "$FILE"` - if [ -z $W ] || [ -z $H ]; then - echo "Couldn't convert $FILE file" - return - fi + if [ -z $W ] || [ -z $H ]; then + echo "Couldn't convert $FILE file" + return + fi - if [ $W -gt $TEXTURE_SIZE ] || [ $H -gt $TEXTURE_SIZE ]; then - if [ $W -gt $H ]; then - SCALED_W=$TEXTURE_SIZE - SCALED_H=$(($TEXTURE_SIZE * $H / $W)) - else - SCALED_W=$(($TEXTURE_SIZE * $W / $H)) - SCALED_H=$TEXTURE_SIZE - fi + if [ $W -gt $TEXTURE_SIZE ] || [ $H -gt $TEXTURE_SIZE ]; then + if [ $W -gt $H ]; then + SCALED_W=$TEXTURE_SIZE + SCALED_H=$(($TEXTURE_SIZE * $H / $W)) + else + SCALED_W=$(($TEXTURE_SIZE * $W / $H)) + SCALED_H=$TEXTURE_SIZE + fi - SCALE_CMD="-scale ${SCALED_W}x${SCALED_H}" - fi + SCALE_CMD="-scale ${SCALED_W}x${SCALED_H}" + fi - if [ "$FILE_TYPE" = "jpg" ]; then - QUALITY_CMD="-quality $JPEG_QUALITY" - elif [ "$FILE_TYPE" = "png" ]; then - QUALITY_CMD="-quality $PNG_QUALITY" - fi + if [ "$FILE_TYPE" = "jpg" ]; then + QUALITY_CMD="-quality $JPEG_QUALITY" + elif [ "$FILE_TYPE" = "png" ]; then + QUALITY_CMD="-quality $PNG_QUALITY" + fi - convert $SCALE_CMD $QUALITY_CMD "$FILE" "tmp.$FILE_TYPE" + convert $SCALE_CMD $QUALITY_CMD "$FILE" "tmp.$FILE_TYPE" - if [ -s "tmp.$FILE_TYPE" ]; then - SIZE_OLD=`du -k "$FILE" | cut -f1` - SIZE_NEW=`du -k "tmp.$FILE_TYPE" | cut -f1` + if [ -s "tmp.$FILE_TYPE" ]; then + SIZE_OLD=`du -k "$FILE" | cut -f1` + SIZE_NEW=`du -k "tmp.$FILE_TYPE" | cut -f1` - if [ $SIZE_NEW -lt $SIZE_OLD ]; then - mv "tmp.$FILE_TYPE" "$FILE" - fi - fi + if [ $SIZE_NEW -lt $SIZE_OLD ]; then + mv "tmp.$FILE_TYPE" "$FILE" + fi + fi - rm -f "tmp.$FILE_TYPE" + rm -f "tmp.$FILE_TYPE" } convert_sound() { - if [ -z "$1" ]; then - echo "No file to convert" - return - fi + FILE="$1" + echo "Convert file: $FILE" - FILE="$1" + if [ ! -f "$FILE" ]; then + echo " File doesn't exist." + return + fi - oggdec "$FILE" -o tmp.wav + oggdec "$FILE" -o tmp.wav - if [ -s tmp.wav ]; then - OGGENC_CMD="" + if [ -s tmp.wav ]; then + OGGENC_CMD="" - if [ "$SOUND_MONO" -gt 0 ]; then - OGGENC_CMD="$OGGENC_CMD --downmix" - fi + if [ "$SOUND_MONO" -gt 0 ]; then + OGGENC_CMD="$OGGENC_CMD --downmix" + fi - OGG_RATE=`ogginfo "$FILE" | grep "Rate: " | cut -f 2 -d " " \ - | grep -o '[0-9]*'` + OGG_RATE=`ogginfo "$FILE" | grep "Rate: " | cut -f 2 -d " " \ + | grep -o '[0-9]*'` - if [ ! -z "$OGG_RATE" ] && [ "$OGG_RATE" -gt "$SOUND_SAMPLE" ]; then - OGGENC_CMD="$OGGENC_CMD --resample $SOUND_SAMPLE" - fi + if [ ! -z "$OGG_RATE" ] && [ "$OGG_RATE" -gt "$SOUND_SAMPLE" ]; then + OGGENC_CMD="$OGGENC_CMD --resample $SOUND_SAMPLE" + fi - OGGENC_CMD="$OGGENC_CMD -b $SOUND_QUALITY" + OGGENC_CMD="$OGGENC_CMD -b $SOUND_QUALITY" - oggenc $OGGENC_CMD tmp.wav -o tmp.ogg - fi + oggenc $OGGENC_CMD tmp.wav -o tmp.ogg + fi - if [ -s tmp.ogg ]; then - SIZE_OLD=`du -k "$FILE" | cut -f1` - SIZE_NEW=`du -k "tmp.ogg" | cut -f1` + if [ -s tmp.ogg ]; then + SIZE_OLD=`du -k "$FILE" | cut -f1` + SIZE_NEW=`du -k "tmp.ogg" | cut -f1` - if [ $SIZE_NEW -lt $SIZE_OLD ]; then - mv tmp.ogg "$FILE" - fi - fi + if [ $SIZE_NEW -lt $SIZE_OLD ]; then + mv tmp.ogg "$FILE" + fi + fi - rm -f tmp.wav tmp.ogg + rm -f tmp.wav tmp.ogg } -convert_b3d() +convert_to_jpg() { - if [ -z "$1" ]; then - echo "No file to convert" - return - fi + FILE="$1" + echo "Convert file: $FILE" - FILE="$1" - echo "Convert file: $FILE" + if [ ! -f "$FILE" ]; then + echo " File doesn't exist." + return + fi - if [ ! -f "$FILE" ]; then - echo " File doesn't exist." - return - fi + ALREADY_CONVERTED=0 - HEX_FILE=`hexdump -ve '1/1 "%.2x"' "$FILE"` - - TEXS_CHUNK="54455853" - TEXS_CHUNK_POS=24 - - FOUND_CHUNK=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 8)) \ - | tail -c +$(($TEXS_CHUNK_POS + 1))` - - if [ -z "$FOUND_CHUNK" ] || [ "$FOUND_CHUNK" != "$TEXS_CHUNK" ]; then - echo " Unsupported format." - return - fi - - TEXS_SIZE=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 16)) | tail -c 8` - - TEXS_SIZE_CONVERTED=`echo $TEXS_SIZE | cut -c7-8` - TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c5-6` - TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c3-4` - TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c1-2` - TEXS_SIZE_CONVERTED=`echo $((0x$TEXS_SIZE_CONVERTED))` - - if [ $TEXS_SIZE_CONVERTED -le 0 ]; then - echo " Invalid TEXS size value." - return - fi - - TEXS_BEGIN=$(($TEXS_CHUNK_POS + 16)) - TEXS_END=$(($TEXS_BEGIN + $TEXS_SIZE_CONVERTED * 2)) - HEX_TEXS=`echo $HEX_FILE | head -c $TEXS_END | tail -c +$(($TEXS_BEGIN+1))` - CURR_POS=0 - - cp "$FILE" tmp.b3d - - while [ $CURR_POS -lt $TEXS_END ]; do - NULL_POS=`echo $HEX_TEXS | tail -c +$(($CURR_POS+1)) | grep -b -o "00" \ - | head -n 1 | cut -f1 -d":"` - - if [ -z $NULL_POS ]; then - echo " Done." - break - fi - - if [ $NULL_POS -lt 4 ]; then - echo " Something went wrong..." - break - fi - - TEXNAME_BEGIN=$((($TEXS_BEGIN + $CURR_POS) / 2)) - TEXNAME_END=$((($TEXS_BEGIN + $CURR_POS + $NULL_POS) / 2)) - CURR_POS=$(($CURR_POS + $NULL_POS + 58)) - - TEXTURE_NAME=`dd if="$FILE" bs=1 skip=$TEXNAME_BEGIN \ - count=$(($TEXNAME_END - $TEXNAME_BEGIN)) 2> /dev/null` - DIRNAME=`dirname "$FILE"` - TEXTURE_PATH="$DIRNAME/$TEXTURE_NAME" - - echo " Texture: $TEXTURE_NAME" - - ALREADY_CONVERTED=0 - - if [ -s "./converted_textures" ]; then - while read -r CONVERTED_TEXTURE; do - if [ "$TEXTURE_PATH" = "$CONVERTED_TEXTURE" ]; then - ALREADY_CONVERTED=1 - break + if [ -s "./converted_textures" ]; then + while read -r CONVERTED_TEXTURE; do + if [ "$FILE" = "$CONVERTED_TEXTURE" ]; then + ALREADY_CONVERTED=1 + break fi - done < "./converted_textures" - fi + done < "./converted_textures" + fi - if [ $ALREADY_CONVERTED -eq 0 ]; then - if [ ! -f "$TEXTURE_PATH" ]; then - echo " Couldn't find texture file. Ignore..." + if [ $ALREADY_CONVERTED -eq 1 ]; then + return + fi + + BLACKLISTED=0 + + for BLACKLIST_FILE in $CONVERT_TO_JPG_BLACKLIST; do + if [ "$FILE" = "assets/$BLACKLIST_FILE" ]; then + BLACKLISTED=1 + break + fi + done + + if [ $BLACKLISTED -eq 1 ]; then + #echo " File is blacklisted. Ignore..." + continue + fi + + FILE_EXTENSION=`echo "$FILE" | tail -c 5` + + if [ `echo "$FILE_EXTENSION" | head -c 1` != "." ]; then + #echo " Unsupported file extension. Ignore..." + continue + fi + + FILE_FORMAT=`identify -format %m "$FILE"` + + if [ "$FILE_FORMAT" = "JPEG" ]; then + #echo " File is already JPEG. Ignore..." + continue + fi + + IS_OPAQUE=`identify -format '%[opaque]' "$FILE"` + #HAS_ALPHA=`identify -format '%A' "$FILE"` + + if [ "$IS_OPAQUE" = "False" ] || [ "$IS_OPAQUE" = "false" ]; then + #echo " File has alpha channel. Ignore..." + continue + fi + + DIRNAME="`dirname "$FILE"`" + BASENAME="`basename "$FILE"`" + IS_GLOSS_MAP=`find "$DIRNAME" -iname "*.xml" -exec cat {} \; \ + | grep -c "gloss-map=\"$BASENAME\""` + + if [ $IS_GLOSS_MAP -gt 0 ]; then + #echo " File is a gloss-map. Ignore..." + continue + fi + + NEW_FILE="`echo $FILE | head -c -5`.jpg" + + if [ -f "$NEW_FILE" ]; then + #echo " There is already a file with .jpg extension. Ignore..." + continue + fi + + # We can check if new file is smaller + convert -quality $JPEG_QUALITY "$FILE" "$NEW_FILE" + rm -f "$FILE" + + echo "$FILE" >> "./converted_textures" +} + +convert_to_jpg_extract_b3dz() +{ + FILE="$1" + echo "Convert file: $FILE" + + if [ ! -f "$FILE" ]; then + echo " File doesn't exist." + return + fi + + DIRNAME="`dirname "$FILE"`" + + unzip "$FILE" -d "$DIRNAME" + rm -f "$FILE" + + TEXNAME="`basename "$FILE"`" + NEWNAME="`echo $TEXNAME | head -c -6`.b3d" + + sed -i "s/\"$TEXNAME\"/\"$NEWNAME\"/g" "$DIRNAME/kart.xml" +} + +convert_to_jpg_update_b3d() +{ + FILE="$1" + echo "Convert file: $FILE" + + if [ ! -f "$1" ]; then + echo " File doesn't exist." + return + fi + + HEX_FILE=`hexdump -ve '1/1 "%.2x"' "$FILE"` + + TEXS_CHUNK="54455853" + TEXS_CHUNK_POS=24 + + FOUND_CHUNK=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 8)) \ + | tail -c +$(($TEXS_CHUNK_POS + 1))` + + if [ -z "$FOUND_CHUNK" ] || [ "$FOUND_CHUNK" != "$TEXS_CHUNK" ]; then + echo " File has no textures." + return + fi + + TEXS_SIZE=`echo $HEX_FILE | head -c $(($TEXS_CHUNK_POS + 16)) | tail -c 8` + + TEXS_SIZE_CONVERTED=`echo $TEXS_SIZE | cut -c7-8` + TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c5-6` + TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c3-4` + TEXS_SIZE_CONVERTED=$TEXS_SIZE_CONVERTED`echo $TEXS_SIZE | cut -c1-2` + TEXS_SIZE_CONVERTED=`echo $((0x$TEXS_SIZE_CONVERTED))` + + if [ $TEXS_SIZE_CONVERTED -le 0 ]; then + echo " Invalid TEXS size value." + return + fi + + TEXS_BEGIN=$(($TEXS_CHUNK_POS + 16)) + TEXS_END=$(($TEXS_BEGIN + $TEXS_SIZE_CONVERTED * 2)) + HEX_TEXS=`echo $HEX_FILE | head -c $TEXS_END | tail -c +$(($TEXS_BEGIN+1))` + CURR_POS=0 + + while [ $CURR_POS -lt $TEXS_END ]; do + NULL_POS=`echo $HEX_TEXS | tail -c +$(($CURR_POS+1)) | grep -b -o "00" \ + | head -n 1 | cut -f1 -d":"` + + if [ -z $NULL_POS ]; then + #echo " Done." + break + fi + + if [ $NULL_POS -lt 4 ]; then + echo " Something went wrong..." + break + fi + + TEXNAME_BEGIN=$((($TEXS_BEGIN + $CURR_POS) / 2)) + TEXNAME_END=$((($TEXS_BEGIN + $CURR_POS + $NULL_POS) / 2)) + CURR_POS=$(($CURR_POS + $NULL_POS + 58)) + + TEXTURE_NAME=`dd if="$FILE" bs=1 skip=$TEXNAME_BEGIN \ + count=$(($TEXNAME_END - $TEXNAME_BEGIN)) 2> /dev/null` + DIRNAME="`dirname "$FILE"`" + TEXTURE_PATH="$DIRNAME/$TEXTURE_NAME" + + IS_CONVERTED=0 + + while read -r CONVERTED_TEXTURE; do + if [ "$TEXTURE_PATH" = "$CONVERTED_TEXTURE" ]; then + IS_CONVERTED=1 + break + fi + done < "./converted_textures" + + if [ $IS_CONVERTED -eq 1 ]; then + echo -n ".jpg" | dd of="$FILE" bs=1 seek=$(($TEXNAME_END - 4)) \ + conv=notrunc 2> /dev/null + fi; + done +} + +convert_to_jpg_update_spm() +{ + FILE="$1" + echo "Convert file: $FILE" + + if [ ! -f "$1" ]; then + echo " File doesn't exist." + return + fi + + HEX_FILE=`hexdump -ve '1/1 "%.2x"' "$FILE"` + + SP_HEADER="5350" + SP_FOUND=`echo $HEX_FILE | head -c 4` + + if [ -z "$SP_FOUND" ] || [ "$SP_FOUND" != "$SP_HEADER" ]; then + echo " Unsupported format." + return + fi + + TEXS_BEGIN=60 + TEXS_COUNT=`echo $HEX_FILE | head -c $TEXS_BEGIN | tail -c 4` + + TEXS_COUNT_CONVERTED=`echo $TEXS_COUNT | cut -c3-4` + TEXS_COUNT_CONVERTED=$TEXS_COUNT_CONVERTED`echo $TEXS_COUNT | cut -c1-2` + TEXS_COUNT_CONVERTED=`echo $((0x$TEXS_COUNT_CONVERTED))` + TEXS_COUNT_CONVERTED=$(($TEXS_COUNT_CONVERTED * 2)) + + if [ $TEXS_COUNT_CONVERTED -le 0 ]; then + echo " Invalid textures count value." + return + fi + + CURR_POS=$(($TEXS_BEGIN + 2)) + + while [ $TEXS_COUNT_CONVERTED -gt 0 ]; do + TEXS_COUNT_CONVERTED=$(($TEXS_COUNT_CONVERTED - 1)) + + TEX_LEN=`echo $HEX_FILE | head -c $(($CURR_POS)) | tail -c 2` + TEX_LEN=`echo $((0x$TEX_LEN))` + + TEXNAME_BEGIN=$(($CURR_POS / 2)) + TEXNAME_END=$(($CURR_POS / 2 + $TEX_LEN)) + CURR_POS=$(($CURR_POS + 2 + $TEX_LEN * 2)) + + if [ $TEX_LEN -eq 0 ]; then + #echo " Empty texture name, ignore..." continue - fi + fi - FILE_EXTENSION=`echo "$TEXTURE_PATH" | tail -c 5` + TEXTURE_NAME=`dd if="$FILE" bs=1 skip=$TEXNAME_BEGIN \ + count=$(($TEXNAME_END - $TEXNAME_BEGIN)) 2> /dev/null` + + DIRNAME="`dirname "$FILE"`" + TEXTURE_PATH="$DIRNAME/$TEXTURE_NAME" - if [ `echo "$FILE_EXTENSION" | head -c 1` != "." ]; then - echo " Unsupported file extension. Ignore..." - continue - fi + IS_CONVERTED=0 - FILE_FORMAT=`identify -format %m "$TEXTURE_PATH"` + while read -r CONVERTED_TEXTURE; do + if [ "$TEXTURE_PATH" = "$CONVERTED_TEXTURE" ]; then + IS_CONVERTED=1 + break + fi + done < "./converted_textures" - if [ "$FILE_FORMAT" = "JPEG" ]; then - echo " File is already JPEG. Ignore..." - continue - fi + if [ $IS_CONVERTED -eq 1 ]; then + echo -n ".jpg" | dd of="$FILE" bs=1 seek=$(($TEXNAME_END - 4)) \ + conv=notrunc 2> /dev/null + fi + done +} - #IS_OPAQUE=`identify -format '%[opaque]' "$TEXTURE_PATH"` - HAS_ALPHA=`identify -format '%A' "$TEXTURE_PATH"` +convert_to_jpg_update_xml() +{ + FILE="$1" + echo "Convert file: $FILE" - if [ "$HAS_ALPHA" = "True" ] || [ "$HAS_ALPHA" = "true" ]; then - echo " File has alpha channel. Ignore..." - continue - fi + if [ ! -f "$FILE" ]; then + echo " File doesn't exist." + return + fi - NEW_TEXTURE_NAME="`echo $TEXTURE_NAME | head -c -5`.jpg" - NEW_TEXTURE_PATH="`echo $TEXTURE_PATH | head -c -5`.jpg" + DIRNAME="`dirname "$FILE"`" - if [ -f "$NEW_TEXTURE_PATH" ]; then - echo " There is already a file with .jpg extension. Ignore..." - continue - fi + while read -r CONVERTED_TEXTURE; do + DIRNAME_TEX="`dirname "$CONVERTED_TEXTURE"`" - convert -quality $JPEG_QUALITY "$TEXTURE_PATH" "$NEW_TEXTURE_PATH" - rm -f "$TEXTURE_PATH" + if [ "$DIRNAME_TEX" != "$DIRNAME" ]; then + continue; + fi - if [ -s "$DIRNAME/materials.xml" ]; then - sed -i "s/name=\"$TEXTURE_NAME\"/name=\"$NEW_TEXTURE_NAME\"/g" \ - "$DIRNAME/materials.xml" - fi + TEXNAME="`basename "$CONVERTED_TEXTURE" | head -c -5`" - if [ -s "$DIRNAME/scene.xml" ]; then - sed -i "s/name=\"$TEXTURE_NAME\"/name=\"$NEW_TEXTURE_NAME\"/g" \ - "$DIRNAME/scene.xml" - fi - - echo "$TEXTURE_PATH" >> "./converted_textures" - fi - - echo -n ".jpg" | dd of=./tmp.b3d bs=1 seek=$(($TEXNAME_END - 4)) \ - conv=notrunc 2> /dev/null - done - - SIZE_OLD=`du -b "$FILE" | cut -f1` - SIZE_NEW=`du -b "tmp.b3d" | cut -f1` - - if [ $SIZE_NEW -ne $SIZE_OLD ]; then - echo " Something went wrong..." - exit - fi - - mv tmp.b3d "$FILE" + sed -i "s/\"$TEXNAME.[pP][nN][gG]/\"$TEXNAME.jpg/g" "$FILE" + sed -i "s/ $TEXNAME.[pP][nN][gG]/ $TEXNAME.jpg/g" "$FILE" + done < "./converted_textures" } if [ $DECREASE_QUALITY -gt 0 ]; then - find assets/data -iname "*.png" | while read f; do convert_image "$f" "png"; done - find assets/data -iname "*.jpg" | while read f; do convert_image "$f" "jpg"; done - find assets/data -iname "*.ogg" | while read f; do convert_sound "$f"; done + find assets/data -iname "*.png" | while read f; do convert_image "$f" "png"; done + find assets/data -iname "*.jpg" | while read f; do convert_image "$f" "jpg"; done + find assets/data -iname "*.ogg" | while read f; do convert_sound "$f"; done fi if [ $CONVERT_TO_JPG -gt 0 ]; then - find assets/data -iname "*.b3d" | while read f; do convert_b3d "$f"; done + rm -f "./converted_textures" + + find assets/data -not -path "assets/data/textures/*" -iname "*.png" | while read f; do convert_to_jpg "$f"; done - if [ -s "./converted_textures" ]; then - echo "Converted textures:" - cat "./converted_textures" - rm -f "./converted_textures" - fi + find assets/data -iname "*.b3dz" | while read f; do convert_to_jpg_extract_b3dz "$f"; done + find assets/data -iname "*.b3d" | while read f; do convert_to_jpg_update_b3d "$f"; done + find assets/data -iname "*.spm" | while read f; do convert_to_jpg_update_spm "$f"; done + find assets/data -iname "*.xml" | while read f; do convert_to_jpg_update_xml "$f"; done + + if [ -s "./converted_textures" ]; then + echo "Converted textures:" + cat "./converted_textures" + rm -f "./converted_textures" + fi fi @@ -427,14 +571,14 @@ cp -a ../data/* assets/data/ # Remove unused files for BLACKLIST_FILE in $BLACKLIST_FILES; do - rm -f "assets/$BLACKLIST_FILE" + rm -f "assets/$BLACKLIST_FILE" done # Run optimize_data.sh script if [ $RUN_OPTIMIZE_SCRIPT -gt 0 ]; then - echo "Run optimize_data.sh script" - sh -c 'cd assets/data; ../../../data/optimize_data.sh' + echo "Run optimize_data.sh script" + sh -c 'cd assets/data; ../../../data/optimize_data.sh' fi diff --git a/cmake/FindEGL.cmake b/cmake/FindEGL.cmake new file mode 100644 index 000000000..430334b4a --- /dev/null +++ b/cmake/FindEGL.cmake @@ -0,0 +1,18 @@ +# - Find EGL +# Find the EGL includes and libraries +# +# Following variables are provided: +# EGL_FOUND +# True if EGL has been found +# EGL_INCLUDE_DIR +# The include directory of EGL +# EGL_LIBRARY +# EGL library list + +find_path(EGL_INCLUDE_DIR EGL/egl.h) +find_library(EGL_LIBRARY NAMES EGL) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR) + +mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR) diff --git a/cmake/FindWayland.cmake b/cmake/FindWayland.cmake new file mode 100644 index 000000000..17d200da6 --- /dev/null +++ b/cmake/FindWayland.cmake @@ -0,0 +1,52 @@ +# - Find Wayland +# Find the Wayland includes and libraries +# +# Following variables are provided: +# WAYLAND_FOUND +# True if Wayland has been found +# WAYLAND_INCLUDE_DIRS +# The include directories of Wayland +# WAYLAND_LIBRARIES +# Wayland library list + +find_path(WAYLAND_CLIENT_INCLUDE_DIR wayland-client.h) +find_path(WAYLAND_CURSOR_INCLUDE_DIR wayland-cursor.h) +find_path(WAYLAND_EGL_INCLUDE_DIR wayland-egl.h) +find_path(XKBCOMMON_INCLUDE_DIR xkbcommon/xkbcommon.h) + +find_library(WAYLAND_CLIENT_LIBRARY NAMES wayland-client) +find_library(WAYLAND_CURSOR_LIBRARY NAMES wayland-cursor) +find_library(WAYLAND_EGL_LIBRARY NAMES wayland-egl) +find_library(XKBCOMMON_LIBRARY NAMES xkbcommon) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Wayland DEFAULT_MSG WAYLAND_CLIENT_LIBRARY + WAYLAND_CURSOR_LIBRARY + WAYLAND_EGL_LIBRARY + XKBCOMMON_LIBRARY + WAYLAND_CLIENT_INCLUDE_DIR + WAYLAND_CURSOR_INCLUDE_DIR + WAYLAND_EGL_INCLUDE_DIR + XKBCOMMON_INCLUDE_DIR) + +set(WAYLAND_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR} + ${WAYLAND_CURSOR_INCLUDE_DIR} + ${WAYLAND_EGL_INCLUDE_DIR} + ${XKBCOMMON_INCLUDE_DIR}) + +set(WAYLAND_LIBRARIES ${WAYLAND_CLIENT_LIBRARY} + ${WAYLAND_CURSOR_LIBRARY} + ${WAYLAND_EGL_LIBRARY} + ${XKBCOMMON_LIBRARY}) + +list(REMOVE_DUPLICATES WAYLAND_INCLUDE_DIRS) +list(REMOVE_DUPLICATES WAYLAND_LIBRARIES) + +mark_as_advanced(WAYLAND_CLIENT_LIBRARY + WAYLAND_CURSOR_LIBRARY + WAYLAND_EGL_LIBRARY + XKBCOMMON_LIBRARY + WAYLAND_CLIENT_INCLUDE_DIR + WAYLAND_CURSOR_INCLUDE_DIR + WAYLAND_EGL_INCLUDE_DIR + XKBCOMMON_INCLUDE_DIR) diff --git a/cmake/FindXrandr.cmake b/cmake/FindXrandr.cmake deleted file mode 100644 index 820f82be7..000000000 --- a/cmake/FindXrandr.cmake +++ /dev/null @@ -1,18 +0,0 @@ -find_path(XRANDR_INCLUDE_DIR NAMES X11/extensions/Xrandr.h - PATH_SUFFIXES X11/extensions - DOC "The XRANDR include directory" -) - -find_library(XRANDR_LIBRARY NAMES Xrandr - DOC "The XRANDR library" -) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(XRANDR DEFAULT_MSG XRANDR_LIBRARY XRANDR_INCLUDE_DIR) - -if(XRANDR_FOUND) - set( XRANDR_LIBRARIES ${XRANDR_LIBRARY} ) - set( XRANDR_INCLUDE_DIRS ${XRANDR_INCLUDE_DIR} ) -endif() - -mark_as_advanced(XRANDR_INCLUDE_DIR XRANDR_LIBRARY) diff --git a/cmake/Toolchain-mingw.cmake b/cmake/Toolchain-mingw.cmake index 141465228..052c984c0 100644 --- a/cmake/Toolchain-mingw.cmake +++ b/cmake/Toolchain-mingw.cmake @@ -10,7 +10,7 @@ SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix) SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) # figure out folder to look in -execute_process(COMMAND sh -c "ls /usr/lib/gcc/x86_64-w64-mingw32/ | grep posix | tr -d '\n'" OUTPUT_VARIABLE MINGW_DEPS_FOLDER) +execute_process(COMMAND sh -c "ls /usr/lib/gcc/i686-w64-mingw32/ | grep posix | tr -d '\n'" OUTPUT_VARIABLE MINGW_DEPS_FOLDER) # here is the target environment located SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /usr/lib/gcc/i686-w64-mingw32/${MINGW_DEPS_FOLDER}/ ${PROJECT_SOURCE_DIR}/dependencies) diff --git a/data/achievements.xml b/data/achievements.xml index b9f4b1d12..dfa196d5a 100644 --- a/data/achievements.xml +++ b/data/achievements.xml @@ -2,7 +2,7 @@ - + @@ -22,6 +22,7 @@ + diff --git a/data/challenges/city.challenge b/data/challenges/city.challenge index e75b552e7..0d61874e3 100644 --- a/data/challenges/city.challenge +++ b/data/challenges/city.challenge @@ -1,6 +1,6 @@ - + diff --git a/data/gfx/explosion.xml b/data/gfx/explosion.xml index 18538c256..b953e5599 100644 --- a/data/gfx/explosion.xml +++ b/data/gfx/explosion.xml @@ -18,8 +18,8 @@ max="1200" /> - diff --git a/data/gfx/explosion_bomb.xml b/data/gfx/explosion_bomb.xml index 18538c256..b953e5599 100644 --- a/data/gfx/explosion_bomb.xml +++ b/data/gfx/explosion_bomb.xml @@ -18,8 +18,8 @@ max="1200" /> - diff --git a/data/gfx/explosion_cake.xml b/data/gfx/explosion_cake.xml index 18538c256..b953e5599 100644 --- a/data/gfx/explosion_cake.xml +++ b/data/gfx/explosion_cake.xml @@ -18,8 +18,8 @@ max="1200" /> - diff --git a/data/gfx/fire.xml b/data/gfx/fire.xml index 4f69ec46c..3c4a0749e 100644 --- a/data/gfx/fire.xml +++ b/data/gfx/fire.xml @@ -18,8 +18,8 @@ max="500" /> - + diff --git a/data/graphical_restrictions.xml b/data/graphical_restrictions.xml index f9db1ec2f..999b5520a 100644 --- a/data/graphical_restrictions.xml +++ b/data/graphical_restrictions.xml @@ -39,4 +39,5 @@ + diff --git a/data/gui/License.txt b/data/gui/License.txt index 0b57b1285..6e3474c64 100644 --- a/data/gui/License.txt +++ b/data/gui/License.txt @@ -28,6 +28,10 @@ Gauge and bar by Totoplus62, released under CC-BY-SA 3 menu_story by tavariz91, released under CC-0 +mass.png by Auria, released under CC-0 + +power.png by Auria, based on https://openclipart.org/detail/193925/check-engine and https://openclipart.org/detail/144799/power-icon, released under CC-0 + ==== Glass Skin by Auria, under CC-BY-SA 3+ diff --git a/data/gui/custom_video_settings.stkgui b/data/gui/custom_video_settings.stkgui index be2b29448..06a677405 100644 --- a/data/gui/custom_video_settings.stkgui +++ b/data/gui/custom_video_settings.stkgui @@ -132,16 +132,6 @@ -
- - -
- - - - -
@@ -151,6 +141,14 @@ +
+
+ + +