doom-random-map.sh 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/bin/sh
  2. # exit when any command fails
  3. #set -e
  4. ### Configuration
  5. GAME_DIR=~/games/doom
  6. IWADS_DIR=$GAME_DIR/wads/original
  7. USAGE_MESSAGE="Usage: doom-random-map.sh <doom|doom2|tnt|plutonia> <chocolate-doom|crispy-doom|prboom-plus|gzdoom> <vanilla|limit_removing|boom|zdoom>(Optional)"
  8. if [[ $1 == "--help" || $1 == "-h" ]]; then
  9. echo $USAGE_MESSAGE
  10. exit 1
  11. fi
  12. if [[ -z $1 ]]; then
  13. echo $USAGE_MESSAGE
  14. exit 1
  15. else
  16. IWAD=$1
  17. fi
  18. if [[ -z $2 ]]; then
  19. echo $USAGE_MESSAGE
  20. exit 1
  21. else
  22. ENGINE=$2
  23. fi
  24. if [[ ! -z $3 ]]; then
  25. echo $PWAD_DIR
  26. fi
  27. ### Script
  28. get_map_file() {
  29. if [[ ! -z $PWAD_DIR ]]; then
  30. pwadfile=$(find $GAME_DIR/wads/$IWAD/$PWAD_DIR/*/*.wad ! -name *tex*.* ! -name *res*.* ! -name *fix.* ! -name *demo*.* -type f 2>/dev/null | shuf -n 1)
  31. elif [[ $ENGINE == "chocolate-doom" ]]; then
  32. pwadfile=$(find $GAME_DIR/wads/$IWAD/vanilla/*/*.wad ! -name *tex*.* ! -name *res*.* ! -name *fix.* ! -name *demo*.* -type f 2>/dev/null | shuf -n 1)
  33. elif [[ $ENGINE == "crispy-doom" ]]; then
  34. pwadfile=$(find $GAME_DIR/wads/$IWAD/{vanilla,limit_removing}/*/*.wad ! -name *tex*.* ! -name *res*.* ! -name *fix.* ! -name *demo*.* -type f 2>/dev/null | shuf -n 1)
  35. elif [[ $ENGINE == "prboom-plus" ]]; then
  36. pwadfile=$(find $GAME_DIR/wads/$IWAD/{vanilla,limit_removing,boom}/*/*.wad ! -name *tex*.* ! -name *res*.* ! -name *fix.* ! -name *demo*.* -type f 2>/dev/null | shuf -n 1)
  37. elif [[ $ENGINE == "gzdoom" ]]; then
  38. pwadfile=$(find $GAME_DIR/wads/$IWAD/{vanilla,limit_removing,boom,zdoom}/*/{*.wad,*.pk3} ! -name *tex*.* ! -name *res*.* ! -name *fix.* ! -name *demo*.* -type f 2>/dev/null | shuf -n 1)
  39. fi
  40. # Check pwad found
  41. if [[ -z $pwadfile ]]; then
  42. echo "No pwad file found"
  43. echo "### Random game settings"
  44. echo "IWAD : $IWAD"
  45. echo "ENGINE : $ENGINE"
  46. echo "PWAD file : $pwadfile"
  47. exit 1
  48. else
  49. echo "PWAD file: $pwadfile"
  50. fi
  51. # Check maps in file
  52. pwadfilename=$(awk -F/ '{print $10}' <<< ${pwadfile})
  53. pwadfilename=$(basename -- "${pwadfilename%.*}")
  54. echo "PWAD name: $pwadfilename"
  55. # Get maps from pwad
  56. gzdoom -iwad $IWADS_DIR/$IWAD.wad -file $pwadfile -norun -hashfiles > /dev/null
  57. if [[ $IWAD == "doom2" ]]; then
  58. pwadmap=$(cat fileinfo.txt | grep $pwadfilename | grep " MAP" | awk '{print $4}' | sed -e "s/^MAP//" -e 's/,//g' | shuf -n 1)
  59. if [[ -z $pwadmap ]]; then
  60. pwadmap=$(cat fileinfo.txt | grep $pwadfilename | grep " maps/" | awk '{print $4}' | sed -e "s/^maps\/map//" -e 's/.wad,//g' | shuf -n 1)
  61. fi
  62. echo "PWAD map number: $pwadmap"
  63. mapnumbercheck=$(echo "$pwadmap" | awk '$0 ~/[^0-9]/ { print "NOT_NUMBER" }')
  64. elif [[ $IWAD == "doom" ]]; then
  65. pwadmap=$(cat fileinfo.txt | grep $pwadfilename | grep -E " E[1-5]M" | awk '{print $4}' | shuf -n 1 | sed -r 's/[EM]+/ /g' | sed -e "s/^0//" -e 's/,//g')
  66. echo "PWAD map number: $pwadmap"
  67. fi
  68. # Remove temporary file
  69. rm fileinfo.txt
  70. }
  71. ###
  72. # Doom random map script
  73. ###
  74. get_map_file
  75. #while [[ -z $pwadfile || $pwadfile == *"/b_"* || $pwadfile == *"_obj_"* || $pwadfile == *"_brk"* || $pwadfile == *"/m_"* || $pwadfile == *"bmodels"* ]]
  76. while [[ -z $pwadmap || $pwadmap == "INFO" || $mapnumbercheck == "NOT_NUMBER" ]]
  77. do
  78. echo "Incorrect map \"$pwadmap\" getting another map..."
  79. unset pwadmap
  80. get_map_file
  81. done
  82. # You can have separate mods "sets" for the source ports
  83. if [[ $ENGINE == "gzdoom" ]]; then
  84. MODS="$GAME_DIR/mods/vanilla/pk_doom_sfx/pk_doom_sfx_20120224.wad $GAME_DIR/mods/vanilla/jovian_palette/JovPal.wad $GAME_DIR/mods/vanilla/smoothed/smoothed.wad $GAME_DIR/mods/zdoom/vanilla_essence/vanilla_essence_4_3.pk3"
  85. elif [[ $ENGINE == "chocolate-doom" ]]; then
  86. MODS="$GAME_DIR/mods/vanilla/pk_doom_sfx/pk_doom_sfx_20120224.wad $GAME_DIR/mods/vanilla/jovian_palette/JovPal.wad"
  87. else
  88. MODS="$GAME_DIR/mods/vanilla/pk_doom_sfx/pk_doom_sfx_20120224.wad $GAME_DIR/mods/vanilla/jovian_palette/JovPal.wad $GAME_DIR/mods/vanilla/smoothed/smoothed.wad"
  89. fi
  90. if [[ $ENGINE == "chocolate-doom" ]]; then
  91. commandline="chocolate-doom -fullscreen -iwad $IWADS_DIR/$IWAD.wad -merge $pwadfile $MODS -savedir $GAME_DIR/savegames/$IWAD/ -skill 3 -warp $pwadmap"
  92. elif [[ $ENGINE == "crispy-doom" ]]; then
  93. commandline="crispy-doom -fullscreen -iwad $IWADS_DIR/$IWAD.wad -file $pwadfile $MODS -savedir $GAME_DIR/savegames/$IWAD/ -skill 3 -warp $pwadmap"
  94. elif [[ $ENGINE == "prboom-plus" ]]; then
  95. commandline="prboom-plus -vidmode gl -complevel 17 -width 1920 -height 1080 -fullscreen -geom 640x360f -aspect 16:9 -iwad $IWADS_DIR/$IWAD.wad -file $pwadfile $MODS -save $GAME_DIR/savegames/$IWAD/ -skill 3 -warp $pwadmap"
  96. elif [[ $ENGINE == "gzdoom" ]]; then
  97. commandline="gzdoom -width 1920 -height 1080 -fullscreen -iwad $IWADS_DIR/$IWAD.wad -file $pwadfile $MODS -savedir $GAME_DIR/savegames/$IWAD/ -skill 3 -warp $pwadmap"
  98. fi
  99. # Run
  100. $commandline
  101. echo "### Random game settings"
  102. echo "IWAD : $IWAD"
  103. echo "ENGINE : $ENGINE"
  104. echo "PWAD file : $pwadfile"
  105. echo "PWAD map number : $pwadmap"
  106. echo "MOD files : $MODS"
  107. echo "Full command line : $commandline"