#!/bin/bash # A simple script using SED to make map configs # compatible with the new layout. # HELP file: if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "" ]; then echo "Usage: "$0" MAP_CONFIG_FILE(S)" echo "This script will make a backup of specified map CFG files (into their existing" echo "directory), then using SED it will modify the original map CFG file to be" echo "compatible with the new packaging layout for AssaultCube." echo "" echo "It is suggested not to use this script twice on a file, as it may duplicate the" echo "changes which could cause many errors." echo "" echo "This script can accept multiple map CFG files at once, as well as wild cards, as" echo "well as files in different directories. For example:" echo " sh "$0" ../packages/maps/yourmap.cfg ../../mapfolder/*.cfg" echo "" echo "Options (must be placed before the CFG filenames):" echo "-h, --help This help message." echo "-r, --revert Revert specified config file(s) to the current \".BAK\" file." echo "-s, --strip Strips all files of cruft. This converts newlines to UNIX" echo " format and removes comments, trailing spaces, trailing tabs" echo " and blank lines." echo "-os, --onlystrip Same as above, but no compatibility conversion takes place." exit # REVERT command: elif [ "$1" = "-r" ] || [ "$1" = "--revert" ]; then for file in $*; do if [ "$file" = "-r" ] || [ "$file" = "--revert" ]; then continue elif [[ -w "$file" && "$file" = *.cfg && -r "$file".BAK ]]; then mv -fv "$file".BAK "$file" else echo -e "\a\E[31m\033[1mERROR:\E[0m "$file" was unwriteable (or not a \".CFG\"), or "$file".BAK file was unreadable." exit fi done exit fi # Alias to define if anything failed (but the script continued). CONTFAILED="0" for file in $*; do if [[ -r "$file" && -w "$file" && "$file" = *.cfg ]] || [ "$file" = "-s" ] || [ "$file" = "--strip" ] || [ "$file" = "-os" ] || [ "$file" = "--onlystrip" ]; then if [ "$file" = "-s" ] || [ "$file" = "--strip" ] || [ "$file" = "-os" ] || [ "$file" = "--onlystrip" ]; then continue else # Backup files first: cp "$file" "$file".BAK if [ -r "$file".BAK ]; then echo "A successful backup of "$file" has been made to "$file".BAK" # Option to strip file of cruft. if [ "$1" = "-s" ] || [ "$1" = "--strip" ] || [ "$1" = "-os" ] || [ "$1" = "--onlystrip" ]; then echo "Now stripping "$file" of cruft..." # 1) Convert to UNIX new-line format. # 2) Remove comments. # 3) Remove trailing spaces/tabs. # 4) Remove blank lines. gawk '{sub(/\r$/,"")};1' $file.BAK | \ gawk -F'//' '{print $1}' | \ gawk '{sub(/[ \t]+$/, "")};1' | \ gawk NF > $file fi if [ "$1" = "-os" ] || [ "$1" = "--onlystrip" ]; then echo -e "As requested, "$file" has been stripped of cruft and no conversion was made.\n" continue fi else echo -e "\a\E[31m\033[1mERROR:\E[0m Backup of "$file" failed. Please check files can be written in the \"`dirname $file`\" directory." echo -e "Please note, because backing up of "$file" failed, it was NOT converted and/or stripped.\n" CONTFAILED="1" continue fi fi # Check if this file has been converted before, if not, add a comment. If so, ask the user to be careful. CHECKIFDONE=`grep "// This config file was converted by" "$file" | awk '{print $2,$3,$4}'` if [ "$CHECKIFDONE" = "This config file" ]; then echo -e "\n\aChecks indicate that this file has been converted before." echo "Continuing any further may cause this script to re-convert already converted parts of the map config." echo "This would cause many errors. Are you sure you wish to continue (Y/N)?" read ANSR if [ "$ANSR" = "n" ] || [ "$ANSR" = "N" ] || [ "$ANSR" = "" ]; then CONTFAILED="1" echo -e "\a\E[31m\033[1mERROR:\E[0m You've selected not to convert "$file", as it has already been converted." continue fi else echo "// This config file was converted by "$0" on `date +%c`." >> $file fi echo "Now converting "$file" to a compatible map config file..." echo "Converting mapmodels..." sed -i '/^mapmodel/s/\/jcdpc\/laptop/1' $file sed -i '/^mapmodel/s/\/jcdpc\/cardboardbox/1' $file sed -i '/^mapmodel/s/\/jcdpc\/cardboardbox/1' $file sed -i '/^mapmodel/s/\/jcdpc\/hanginglamp/1' $file sed -i '/^mapmodel/s/\/jcdpc\/ventflap/1' $file sed -i '/^mapmodel/s/\/ratboy\/toca_milkcrate_blue/1' $file sed -i '/^mapmodel/s/\/ratboy\/toca_milkcrate_red/1' $file sed -i '/^mapmodel/s/\/makke\/aardapple_enginebox/1' $file sed -i '/toxic/!s/\/makke\/barrel/1' $file sed -i '/^mapmodel/s/\/makke\/barrel_fallen/1' $file sed -i '/^mapmodel/s/\/makke\/barrel_toxic/1' $file sed -i '/^mapmodel/s/\/makke\/barrel_newsteel/1' $file sed -i '/^mapmodel/s/\/makke\/barrel_newsteel_fallen/1' $file sed -i '/^mapmodel/s/\/makke\/bench_seat/1' $file sed -i '/^mapmodel/s/\/makke\/platform/1' $file sed -i '/^mapmodel/s/\/makke\/platform_shine/1' $file sed -i '/^mapmodel/s/\/makke\/lightbulb/1' $file sed -i '/^mapmodel/s/\/makke\/coke_can/1' $file sed -i '/^mapmodel/s/\/makke\/coke_can_fallen/1' $file sed -i '/^mapmodel/s/\/makke\/office_chair/1' $file sed -i '/^mapmodel/s/\/makke\/coffee_mug/1' $file sed -i '/^mapmodel/s/\/makke\/platform_bridge/1' $file sed -i '/^mapmodel/s/\/makke\/drainpipe/1' $file sed -i '/^mapmodel/s/\/makke\/dumpster/1' $file sed -i '/^mapmodel/s/\/makke\/electric_meter/1' $file sed -i '/^mapmodel/s/\/makke\/pallet/1' $file sed -i '/^mapmodel/s/\/makke\/cigarette/1' $file sed -i '/^mapmodel/s/\/makke\/fence_chainlink/1' $file sed -i '/^mapmodel/s/\/makke\/fence_chainlink_closed_gate/1' $file sed -i '/^mapmodel/s/\/makke\/fence_chainlink_no_gate/1' $file sed -i '/^mapmodel/s/\/makke\/fence_chainlink_post/1' $file sed -i '/^mapmodel/s/\/makke\/flyer_propaganda/1' $file sed -i '/^mapmodel/s/\/makke\/flyer_environmental/1' $file sed -i '/^mapmodel/s/\/makke\/fuel_tank/1' $file sed -i '/^mapmodel/s/\/makke\/icicle/1' $file sed -i '/^mapmodel/s/\/makke\/hook/1' $file sed -i '/^mapmodel/s/\/makke\/locker/1' $file sed -i '/^mapmodel/s/\/makke\/fluorescent_lamp/1' $file sed -i '/^mapmodel/s/\/makke\/broken_wood/1' $file sed -i '/^mapmodel/s/\/makke\/wrench/1' $file sed -i '/^mapmodel/s/\/makke\/wall_spotlight/1' $file sed -i '/floppy/!s/\/makke\/street_light/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_1x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_7x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_8x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_10x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_11x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_15x/1' $file sed -i '/^mapmodel/s/\/makke\/ladder_15x_offset/1' $file sed -i '/^mapmodel/s/\/makke\/grate_hor/1' $file sed -i '/^mapmodel/s/\/makke\/grate_vert/1' $file sed -i '/^mapmodel/s/\/makke\/mine-shaft_elevator/1' $file sed -i '/^mapmodel/s/\/makke\/bolt_nut/1' $file sed -i '/^mapmodel/s/\/makke\/sail/1' $file sed -i '/^mapmodel/s/\/makke\/sail_snow/1' $file sed -i '/^mapmodel/s/\/makke\/wires\/2x8/1' $file sed -i '/^mapmodel/s/\/makke\/wires\/3x8/1' $file sed -i '/^mapmodel/s/\/makke\/wires\/4x8/1' $file sed -i '/^mapmodel/s/\/makke\/wires\/4x8a/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/wanted/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/arab/1' $file sed -i '/toca/!s/\/makke\/signs\/biohazard/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/caution_voltage/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/caution_maintainence/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/flammable/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/speed/1' $file sed -i '/^mapmodel/s/\/makke\/signs\/no_camping/1' $file sed -i '/^mapmodel/s/\/makke\/roadblock/1' $file sed -i '/^mapmodel/s/\/makke\/roadblock_graffiti/1' $file sed -i '/^mapmodel/s/\/makke\/nothing_clip/1' $file sed -i '/^mapmodel/s/\/makke\/picture/1' $file sed -i '/^mapmodel/s/\/makke\/plant_leafy/1' $file sed -i '/^mapmodel/s/\/makke\/plant_leafy_dry/1' $file sed -i '/^mapmodel/s/\/makke\/plant_leafy_snow/1' $file sed -i '/^mapmodel/s/\/makke\/grass_short/1' $file sed -i '/^mapmodel/s/\/makke\/grass_short_dry/1' $file sed -i '/^mapmodel/s/\/makke\/grass_short_snow/1' $file sed -i '/^mapmodel/s/\/makke\/grass_long/1' $file sed -i '/^mapmodel/s/\/makke\/grass_long_dry/1' $file sed -i '/^mapmodel/s/\/makke\/grass_long_snow/1' $file echo "Converting textures..." sed -i '/^texture/s/\/..\/models\/mapmodels\/wotwot\/makke_drainpipe_gritty\/skin.jpg/1' $file sed -i '/^texture/s/\/..\/models\/mapmodels\/wotwot\/toca_commrack_dull\/skin.jpg/1' $file sed -i '/^texture/s/\/..\/models\/mapmodels\/wotwot\/toca_monitor_dull\/skin.jpg/1' $file sed -i '/^texture/s/\/..\/models\/mapmodels\/wotwot\/toca_milkcarton_dull\/skin.jpg/1' $file sed -i '/^texture/s/\/..\/models\/mapmodels\/wotwot\/toca_guardrail2_dull\/skin.jpg/1' $file sed -i '/^texture/s/\/zastrow\/metal_overlaps.jpg/1' $file sed -i '/^texture/s/\/zastrow\/metal_plate_fill.jpg/1' $file sed -i '/^texture/s/\/zastrow\/metal_siding_kinksb.jpg/1' $file sed -i '/^texture/s/\/zastrow\/metal_siding_kinks.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_doors512A10.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_doors512A16.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_doors512B05.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_window31.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_window33.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_sand.jpg/1' $file sed -i '/^texture/s/\/zastrow\/brick_wall_08.jpg/1' $file sed -i '/^texture/s/\/zastrow\/brick_wall_09.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_window23.jpg/1' $file sed -i '/^texture/s/\/zastrow\/vent_cap.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_window38.jpg/1' $file sed -i '/^texture/s/\/zastrow\/sub_doors256nf_01.jpg/1' $file sed -i '/^texture/s/\/zastrow\/rb_box_07.jpg/1' $file sed -i '/^texture/s/\/golgotha\/elecpanelstwo.jpg/1' $file sed -i '/^texture/s/\/golgotha\/metal_bumps2.jpg/1' $file sed -i '/^texture/s/\/golgotha\/tunnel_ceiling.jpg/1' $file sed -i '/^texture/s/\/golgotha\/hhroofgray.jpg/1' $file sed -i '/^texture/s/\/golgotha\/metal_bumps3.jpg/1' $file sed -i '/^texture/s/\/golgotha\/tunnel_ceiling_b.jpg/1' $file sed -i '/^texture/s/\/golgotha\/5sqtunnelroad.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door07_a.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door07.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door10_a.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door10.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door12.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/door15.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/objects08.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/objects09_a.jpg/1' $file sed -i '/^texture/s/\/3dcafe\/stone18.jpg/1' $file sed -i '/^texture/s/\/grsites\/brick051.jpg/1' $file sed -i '/^texture/s/\/grsites\/brick065.jpg/1' $file sed -i '/^texture/s/\/grsites\/wood060.jpg/1' $file sed -i '/^texture/s/\/grsites\/metal020.jpg/1' $file sed -i '/^texture/s/\/grsites\/metal026.jpg/1' $file sed -i '/^texture/s/\/lemog\/036metal.jpg/1' $file sed -i '/^texture/s/\/lemog\/006metal.jpg/1' $file sed -i '/^texture/s/\/lemog\/063bois.jpg/1' $file sed -i '/^texture/s/\/lemog\/063bois_b.jpg/1' $file sed -i '/^texture/s/\/lemog\/027metal.jpg/1' $file sed -i '/^texture/s/\/golgotha\/windows.jpg/1' $file sed -i '/^texture/s/\/golgotha\/window.jpg/1' $file sed -i '/^texture/s/\/golgotha\/panel.jpg/1' $file sed -i '/^texture/s/\/golgotha\/door.jpg/1' $file sed -i '/^texture/s/\/golgotha\/smallsteelbox.jpg/1' $file sed -i '/^texture/s/\/golgotha\/klappe3.jpg/1' $file sed -i '/^texture/s/\/mayang\/bricks_2.jpg/1' $file sed -i '/^texture/s/\/mayang\/manhole1.jpg/1' $file sed -i '/^texture/s/\/mayang\/hatch1.jpg/1' $file sed -i '/^texture/s/\/mayang\/grill2_s.jpg/1' $file sed -i '/^texture/s/\/mayang\/door3.jpg/1' $file sed -i '/^texture/s/\/mayang\/airvent1.jpg/1' $file sed -i '/^texture/s/\/golgotha\/rb_trim_03.jpg/1' $file sed -i '/^texture/s/\/makke\/rb_window.jpg/1' $file sed -i '/^texture/s/\/makke\/rb_window2.jpg/1' $file sed -i '/^texture/s/\/noctua\/ground\/rb_trim_01.jpg/1' $file sed -i '/^texture/s/\/makke\/rb_trim_02.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_01.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_02.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_03.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_04.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_05.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_box_06.jpg/1' $file sed -i '/^texture/s/\/makke\/rattrap\/rb_concrete.jpg/1' $file sed -i '/^texture/s/\/mayang\/rb_bricks_01.jpg/1' $file sed -i '/^texture/s/\/mayang\/rb_bricks_02.jpg/1' $file sed -i '/^texture/s/\/mayang\/rb_bricks_03.jpg/1' $file sed -i '/^texture/s/\/noctua\/wood\/planks02_trim_vert.jpg/1' $file echo -e "Successfully finished converting: "$file"\n" else echo -e "\a\E[31m\033[1mERROR:\E[0m "$file" is an incorrect filename, path or option. Or it is not a \".cfg\" file, or it may be non-readable and/or non-writeable.\n" CONTFAILED="1" fi done if [ "$CONTFAILED" = "1" ]; then echo -e "\a\nConversion finished, HOWEVER, \E[31m\033[1msome files were NOT converted and/or stripped.\E[0m!" echo "Please check the output of this script for their errors!" echo "It is suggested to check your map config files carefully for any inconsistencies, using the \"diff\" command." else echo -e "\aConversion succeessfully completed with NO errors!" echo "It is suggested to check your map config files carefully for any inconsistencies, using the \"diff\" command." fi