Subversion Repositories duke3d_hrp

Rev

Rev 320 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 320 Rev 324
1
#!/bin/sh
1
#!/bin/sh
2
 
2
 
3
# Duke Nukem 3D High Resolution Pack Extractor  v0.1  2012-03-14
3
# Duke Nukem 3D High Resolution Pack Extractor  v0.2  2012-03-17
4
#
4
#
5
# Author: LeoD
5
# Author: LeoD
6
# License: ISC license : http://opensource.org/licenses/isc-license.txt
6
# License: ISC license : http://opensource.org/licenses/isc-license.txt
7
#
7
#
8
# This script extracts a PolyMER or PolyMOST only HRP from your working copy of
8
# This script extracts a PolyMER or PolyMOST only HRP from your working copy of
9
# the Duke Nukem 3D High Resolution Pack's Subversion repository.
9
# the Duke Nukem 3D High Resolution Pack's Subversion repository.
10
# Note : "//" and "/* */"-like comments in DEF files are currently ingnored and
-
 
11
# may lead to false warning messages or copying of actually unused files.
-
 
12
# On Windows you need MSYS' zip to create package files.
10
# On Windows you need MSYS' zip to create package files.
13
# ("mingw-get install msys-zip")
11
# ("mingw-get install msys-zip")
14
# MinGW/MSYS performance is horrible, better go Linux. Even my virtual Debian
12
# MinGW/MSYS performance is horrible, better go Linux. Even my virtual Debian
15
# machine accessing the Windows drive is 5 to 10 times faster.
13
# machine accessing the Windows drive is 5 to 10 times faster.
16
# But it still sucks. This needs to become a Perl script one day.
14
# But it still sucks. This needs to become a Perl script one day.
-
 
15
# Or maybe MSYS bash gets finally updated to 4.* and I'll use its regex engine.
-
 
16
 
-
 
17
SET_VERSION=YES # [YES|NO]
-
 
18
EXTRACT_COMMENTED_FILES=NO # [YES|NO]
-
 
19
DUKEPLUS_POLYMOST_COMPATIBILTY_APPROACH=none # [none|polymost|polymer|mixed]
17
 
20
 
18
ask()
21
ask()
19
{
22
{
20
  echo -n "$@" '[y/N] ' ; read ans
23
  echo -n "$@" '[y/N] ' ; read ans
21
  case "$ans" in
24
  case "$ans" in
22
    y*|Y*) return 0 ;;
25
    y*|Y*) return 0 ;;
23
    *)     return 1 ;;
26
    *)     return 1 ;;
24
  esac
27
  esac
25
} # ask
28
} # ask
26
 
29
 
27
 
30
 
28
copy_folders()
31
copy_folders()
29
{
32
{
30
  mkdir ${EXTRACTDIR}
33
  mkdir ${EXTRACTDIR}
31
  for HRPDIR in . ; do
34
  for HRPDIR in . ; do
32
    if [ -d "${HRPDIR}" ] ; then
35
    if [ -d "${HRPDIR}" ] ; then
33
      DIRLIST=./HRP_DIRECTORIES.lst
36
      DIRLIST=./HRP_DIRECTORIES.lst
34
      find "${HRPDIR}" -type d > ${DIRLIST}
37
      find "${HRPDIR}" -type d > ${DIRLIST}
35
      cat ${DIRLIST} | while read DIR; do
38
      cat ${DIRLIST} | while read DIR; do
36
        if [ ! -d "${EXTRACTDIR}/${DIR}" ] ; then
39
        if [ ! -d "${EXTRACTDIR}/${DIR}" ] ; then
37
          mkdir "${EXTRACTDIR}/${DIR}"
40
          mkdir "${EXTRACTDIR}/${DIR}"
38
        fi
41
        fi
39
      done
42
      done
40
      rm     ${DIRLIST}
43
      rm     ${DIRLIST}
41
    else
44
    else
42
      echo "${HRPDIR} : no HRP."
45
      echo "${HRPDIR} : no HRP."
43
    fi
46
    fi
44
  done
47
  done
45
} # copy_folders()
48
} # copy_folders()
46
 
49
 
47
 
50
 
-
 
51
copy_set_version()
-
 
52
{
-
 
53
  VER_FILE="$1"
-
 
54
  TARGET_FILE="$2"
-
 
55
  V_DATE=`date +%F`
-
 
56
  if [ "${VERSION}" = "" ] ; then
-
 
57
    if [ -f VERSION ] ; then
-
 
58
      VERSION=`grep -owE "[0-9\\.]*" VERSION`
-
 
59
    fi
-
 
60
  fi
-
 
61
 
-
 
62
  echo "copy_set_version ${VER_FILE} -> ${TARGET_FILE}"
-
 
63
 
-
 
64
  case "${VER_FILE}" in
-
 
65
    hrp_readme.txt)
-
 
66
      cat "${VER_FILE}" | sed -r --posix \
-
 
67
        s/\(Version\ *\)\([0-9\.]*\)\(.*\)\(\\\)\)\(.*\)/\\1${VERSION}\ \(${V_DATE}\)\ \ \\5/ \
-
 
68
        >> "${TARGET_FILE}"
-
 
69
      ;;
-
 
70
    duke3d_hrp.def)
-
 
71
      cat "${VER_FILE}" | sed -r --posix \
-
 
72
        s/\(Version\ *\)\([0-9\.]*\)\(.*\)/\\1${VERSION}\\3/ \
-
 
73
        >> "${TARGET_FILE}"
-
 
74
      ;;
-
 
75
    duke3d_hrp_polymost.def)
-
 
76
      if [ "${HRPTYPE}" = "polymost_override" ] ; then
-
 
77
        cat "${VER_FILE}" | sed -r --posix \
-
 
78
          s/\(Version\ *\)\([0-9\.]*\)\(\ Polymost\)/\\1${VERSION}\ Polymost\ Override/ \
-
 
79
          >> "${TARGET_FILE}"
-
 
80
      else
-
 
81
        cat "${VER_FILE}" | sed -r --posix \
-
 
82
          s/\(Version\ *\)\([0-9\.]*\)\(.*\)/\\1${VERSION}\\3/ \
-
 
83
          >> "${TARGET_FILE}"
-
 
84
      fi
-
 
85
      ;;
-
 
86
    *)
-
 
87
      echo "###ERROR: copy_set_version() - BAD FILE: ${VER_FILE}"
-
 
88
      exit 1
-
 
89
      ;;
-
 
90
  esac
-
 
91
}
-
 
92
 
48
copy_known_files()
93
copy_known_files()
49
{
94
{
-
 
95
  if [ "${SET_VERSION}" = "YES" ] ; then
-
 
96
    copy_set_version hrp_readme.txt "${EXTRACTDIR}/hrp_readme.txt"
-
 
97
  else
50
  cp -pv *.txt      "${EXTRACTDIR}"
98
    cp -pv hrp_readme.txt           "${EXTRACTDIR}"
-
 
99
  fi
-
 
100
  cp -pv hrp_art_license.txt        "${EXTRACTDIR}"
51
 
101
 
52
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "polymost_override" ] ; then
102
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "polymost_override" ] ; then
-
 
103
    if [ "${SET_VERSION}" = "YES" ] ; then
-
 
104
      copy_set_version duke3d_hrp_polymost.def "${EXTRACTDIR}/duke3d_hrp.def"
-
 
105
    else
53
    cp -pv duke3d_hrp_polymost.def "${EXTRACTDIR}/duke3d_hrp.def"
106
      cp -pv           duke3d_hrp_polymost.def "${EXTRACTDIR}/duke3d_hrp.def"
54
  fi
107
    fi
-
 
108
  fi
55
 
109
 
56
  if [ "${HRPTYPE}" = "polymost" ] ; then
110
  if [ "${HRPTYPE}" = "polymost" ] ; then
57
    cp -pv duke3d.def "${EXTRACTDIR}"
111
    cp -pv duke3d.def "${EXTRACTDIR}"
58
    #cp -pv duke3d_hrp_polymost.def               "${EXTRACTDIR}"
112
    #cp -pv duke3d_hrp_polymost.def               "${EXTRACTDIR}"
59
    #cp -pv highres/screen/menu/2492_polymost.png "${EXTRACTDIR}/highres/screen/menu"
113
    #cp -pv highres/screen/menu/2492_polymost.png "${EXTRACTDIR}/highres/screen/menu"
60
  fi
114
  fi
61
 
115
 
62
  if [ "${HRPTYPE}" = "full" ] ; then
116
  if [ "${HRPTYPE}" = "full" ] ; then
-
 
117
    if [ "${SET_VERSION}" = "YES" ] ; then
-
 
118
      copy_set_version duke3d_hrp_polymost.def "${EXTRACTDIR}/duke3d_hrp_polymost.def"
-
 
119
    else
63
    cp -pv duke3d_hrp_polymost.def "${EXTRACTDIR}"
120
      cp -pv           duke3d_hrp_polymost.def "${EXTRACTDIR}"
64
  fi
121
    fi
-
 
122
  fi
65
 
123
 
66
  if [ "${HRPTYPE}" = "polymost_override" ] || [ "${HRPTYPE}" = "full" ] ; then
124
  if [ "${HRPTYPE}" = "polymost_override" ] || [ "${HRPTYPE}" = "full" ] ; then
67
    cp -pv highres/screen/menu/2492_ver_polymost.png "${EXTRACTDIR}/highres/screen/menu"
125
    cp -pv highres/screen/menu/2492_ver_polymost.png "${EXTRACTDIR}/highres/screen/menu"
68
  fi
126
  fi
69
 
127
 
70
  if [ "${HRPTYPE}" = "polymer" ] || [ "${HRPTYPE}" = "full" ] ; then
128
  if [ "${HRPTYPE}" = "polymer" ] || [ "${HRPTYPE}" = "full" ] ; then
71
    cp -pv duke3d.def                   "${EXTRACTDIR}"
129
    cp -pv duke3d.def                   "${EXTRACTDIR}"
-
 
130
    if [ "${SET_VERSION}" = "YES" ] ; then
-
 
131
      copy_set_version duke3d_hrp.def "${EXTRACTDIR}/duke3d_hrp.def"
-
 
132
    else
72
    cp -pv duke3d_hrp.def               "${EXTRACTDIR}"
133
      cp -pv           duke3d_hrp.def "${EXTRACTDIR}"
-
 
134
    fi
73
    echo                  "\`*.mhk' -> \`${EXTRACTDIR}/*.mhk'"
135
    echo                  "\`*.mhk' -> \`${EXTRACTDIR}/*.mhk'"
74
    cp -p  *.mhk                        "${EXTRACTDIR}"
136
    cp -p  *.mhk                        "${EXTRACTDIR}"
75
    #cp -pv highres/screen/menu/2492.png "${EXTRACTDIR}/highres/screen/menu"
137
    #cp -pv highres/screen/menu/2492.png "${EXTRACTDIR}/highres/screen/menu"
76
 
138
 
77
    #cp -pv highres/common/black.png                       "${EXTRACTDIR}/highres/common"
139
    #cp -pv highres/common/black.png                          "${EXTRACTDIR}/highres/common"
78
    #cp -pv highres/screen/fonts/digital/digital_minus.png "${EXTRACTDIR}/highres/screen/fonts/digital"
140
    #cp -pv highres/screen/fonts/digital/digital_minus.png    "${EXTRACTDIR}/highres/screen/fonts/digital"
79
    #cp -pv highres/screen/menu/2493_old.png               "${EXTRACTDIR}/highres/screen/menu"
141
    #cp -pv highres/screen/menu/2493_old.png                  "${EXTRACTDIR}/highres/screen/menu"
-
 
142
    #cp -pv highres/screen/menu/widescreen/*_wide.png         "${EXTRACTDIR}/highres/screen/menu"
-
 
143
    #cp -pv highres/sprites/characters/1357_terminarm.md3     "${EXTRACTDIR}/highres/sprites/characters"
-
 
144
    #cp -pv highres/sprites/firstperson/2510_devastator_n.png "${EXTRACTDIR}/highres/sprites/firstperson"
80
    #cp -pv highres/sprites/monsters/1960_reconcar_s.png   "${EXTRACTDIR}/highres/sprites/monsters"
145
    #cp -pv highres/sprites/monsters/1960_reconcar_s.png      "${EXTRACTDIR}/highres/sprites/monsters"
81
    #cp -pv highres/sprites/props/4387.png                 "${EXTRACTDIR}/highres/sprites/props"
146
    #cp -pv highres/sprites/props/4387.png                    "${EXTRACTDIR}/highres/sprites/props"
82
    #cp -pv highres/sprites/signs/4378.png                 "${EXTRACTDIR}/highres/sprites/signs"
147
    #cp -pv highres/sprites/signs/4378.png                    "${EXTRACTDIR}/highres/sprites/signs"
83
    #cp -pv highres/sprites/signs/4379.png                 "${EXTRACTDIR}/highres/sprites/signs"
148
    #cp -pv highres/sprites/signs/4379.png                    "${EXTRACTDIR}/highres/sprites/signs"
84
    #cp -pv highres/sprites/signs/4381.png                 "${EXTRACTDIR}/highres/sprites/signs"
149
    #cp -pv highres/sprites/signs/4381-85.png                 "${EXTRACTDIR}/highres/sprites/signs"
85
    #cp -pv highres/sprites/signs/4382.png                 "${EXTRACTDIR}/highres/sprites/signs"
-
 
86
    #cp -pv highres/sprites/signs/4383.png                 "${EXTRACTDIR}/highres/sprites/signs"
-
 
87
    #cp -pv highres/sprites/signs/4384.png                 "${EXTRACTDIR}/highres/sprites/signs"
-
 
88
    #cp -pv highres/sprites/signs/4385.png                 "${EXTRACTDIR}/highres/sprites/signs"
-
 
89
  fi
150
  fi
90
 
151
 
91
} # copy_known_files()
152
} # copy_known_files()
92
 
153
 
93
 
154
 
94
polymost_mhk_patch()
155
polymost_mhk_patch()
95
{
156
{
96
  MHKFILE="$1"
157
  MHKFILE="$1"
97
  MHK_LINE="$2"
158
  MHK_LINE="$2"
98
 
159
 
99
  case "${MHKFILE}" in
160
  case "${MHKFILE}" in
100
    "E3L1.mhk")
161
    "E3L1.mhk")
101
      echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
162
      echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
102
      MHK_INSERT=`echo "${MHK_LINE}" | grep -oE "sprite\ 575\ pitch\ 1"`
163
      MHK_INSERT=`echo "${MHK_LINE}" | grep -oE "sprite\ 575\ pitch\ 1"`
103
      if [ ! "${MHK_INSERT}" = "" ] ; then
164
      if [ ! "${MHK_INSERT}" = "" ] ; then
104
        echo "sprite 591 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
165
        echo "sprite 591 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
105
             >> "${EXTRACTDIR}/${MHKFILE}"
166
             >> "${EXTRACTDIR}/${MHKFILE}"
106
        echo "sprite 591 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
167
        echo "sprite 591 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
107
        echo "sprite 592 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
168
        echo "sprite 592 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
108
             >> "${EXTRACTDIR}/${MHKFILE}"
169
             >> "${EXTRACTDIR}/${MHKFILE}"
109
        echo "sprite 592 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
170
        echo "sprite 592 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
110
        echo "sprite 593 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
171
        echo "sprite 593 mdxoff 425000 // underwater slimebabe (Polymost HRP)\r" \
111
             >> "${EXTRACTDIR}/${MHKFILE}"
172
             >> "${EXTRACTDIR}/${MHKFILE}"
112
        echo "sprite 593 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
173
        echo "sprite 593 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
113
      fi
174
      fi
114
      ;;
175
      ;;
115
    "E3L3.mhk")
176
    "E3L3.mhk")
116
      MHK_REPLACE=`echo "${MHK_LINE}" | grep -oE "sprite\ 105\ angoff -128"`
177
      MHK_REPLACE=`echo "${MHK_LINE}" | grep -oE "sprite\ 105\ angoff -128"`
117
      if [ ! "${MHK_REPLACE}" = "" ] ; then
178
      if [ ! "${MHK_REPLACE}" = "" ] ; then
118
        echo "sprite 105 angoff 768 // (Polymost HRP)\r" >> "${EXTRACTDIR}/${MHKFILE}"
179
        echo "sprite 105 angoff 768 // (Polymost HRP)\r" >> "${EXTRACTDIR}/${MHKFILE}"
119
      else
180
      else
120
        echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
181
        echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
121
        MHK_INSERT=`echo "${MHK_LINE}" | grep -oE "sprite\ 96\ pitch\ 1"`
182
        MHK_INSERT=`echo "${MHK_LINE}" | grep -oE "sprite\ 96\ pitch\ 1"`
122
        if [ ! "${MHK_INSERT}" = "" ] ; then
183
        if [ ! "${MHK_INSERT}" = "" ] ; then
123
          echo "sprite 105 mdxoff 450000 // underwater slime babe (Polymost HRP)\r" \
184
          echo "sprite 105 mdxoff 450000 // underwater slime babe (Polymost HRP)\r" \
124
               >> "${EXTRACTDIR}/${MHKFILE}"
185
                                      >> "${EXTRACTDIR}/${MHKFILE}"
125
          echo "sprite 105 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
186
          echo "sprite 105 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
126
          echo "sprite 447 mdxoff 462000 // underwater slime babe (Polymost HRP)\r" \
187
          echo "sprite 447 mdxoff 462000 // underwater slime babe (Polymost HRP)\r" \
127
               >> "${EXTRACTDIR}/${MHKFILE}"
188
                                      >> "${EXTRACTDIR}/${MHKFILE}"
128
          echo "sprite 447 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
189
          echo "sprite 447 pitch 1\r" >> "${EXTRACTDIR}/${MHKFILE}"
129
        fi
190
        fi
130
      fi
191
      fi
131
      ;;
192
      ;;
132
    "E3L6.mhk")
193
    "E3L6.mhk")
133
      MHK_REPLACE1=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ angoff -210"`
194
      MHK_REPLACE1=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ angoff -210"`
134
      MHK_REPLACE2=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ mdxoff -125000 \\/\\/\ flipped hanging babe"`
195
      MHK_REPLACE2=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ mdxoff -125000 \\/\\/\ flipped hanging babe"`
135
      MHK_REPLACE3=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ mdzoff -11000"`
196
      MHK_REPLACE3=`echo "${MHK_LINE}" | grep -oE "sprite\ 307\ mdzoff -11000"`
136
      if [ ! "${MHK_REPLACE1}" = "" ] ; then
197
      if   [ ! "${MHK_REPLACE1}" = "" ] ; then
137
        echo "sprite 307 angoff 200 // (Polymost HRP)\r" >> "${EXTRACTDIR}/${MHKFILE}"
198
        echo "sprite 307 angoff 200 // (Polymost HRP)\r" >> "${EXTRACTDIR}/${MHKFILE}"
138
      elif [ ! "${MHK_REPLACE2}" = "" ] ; then
199
      elif [ ! "${MHK_REPLACE2}" = "" ] ; then
139
        echo "sprite 307 mdxoff 750000 // flipped hanging babe (Polymost HRP)\r" \
200
        echo "sprite 307 mdxoff 750000 // flipped hanging babe (Polymost HRP)\r" \
140
        >> "${EXTRACTDIR}/${MHKFILE}"
201
             >> "${EXTRACTDIR}/${MHKFILE}"
141
      elif [ ! "${MHK_REPLACE3}" = "" ] ; then
202
      elif [ ! "${MHK_REPLACE3}" = "" ] ; then
142
        echo "sprite 307 mdzoff 625000 // flipped hanging babe (Polymost HRP)\r" \
203
        echo "sprite 307 mdzoff 625000 // flipped hanging babe (Polymost HRP)\r" \
143
        >> "${EXTRACTDIR}/${MHKFILE}"
204
             >> "${EXTRACTDIR}/${MHKFILE}"
144
      else
205
      else
145
        echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
206
        echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
146
      fi
207
      fi
147
      ;;
208
      ;;
148
    *)
209
    *)
149
      echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
210
      echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
150
      ;;
211
      ;;
151
  esac
212
  esac
152
} # polymost_mhk_patch()
213
} # polymost_mhk_patch()
153
 
214
 
154
 
215
 
155
create_polymost_mhk()
216
create_polymost_mhk()
156
{
217
{
157
  for MHKFILE in *.mhk ; do
218
  for MHKFILE in *.mhk ; do
158
    MHKSTOP="0"
219
    MHKSTOP="0"
159
    cat   ${MHKFILE} | while read MHK_LINE; do
220
    cat   ${MHKFILE} | while read MHK_LINE; do
160
      if [ "${MHKSTOP}" = "0" ] ; then
221
      if [ "${MHKSTOP}" = "0" ] ; then
161
 
222
 
162
        if [ "${MHKFILE}" = "E3L1.mhk" ] || [ "${MHKFILE}" = "E3L3.mhk" ] || \
223
        if [ "${MHKFILE}" = "E3L1.mhk" ] || [ "${MHKFILE}" = "E3L3.mhk" ] || \
163
           [ "${MHKFILE}" = "E3L6.mhk" ] ; then
224
           [ "${MHKFILE}" = "E3L6.mhk" ] ; then
164
          polymost_mhk_patch ${MHKFILE} "${MHK_LINE}"
225
          polymost_mhk_patch ${MHKFILE} "${MHK_LINE}"
165
        else
226
        else
166
          echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
227
          echo "${MHK_LINE}" >> "${EXTRACTDIR}/${MHKFILE}"
167
        fi
228
        fi
168
 
229
 
169
        MHK_TERM=`echo "${MHK_LINE}" | grep -owE "\\/\\/\\ LIGHTS"`
230
        MHK_TERM=`echo "${MHK_LINE}" | grep -owE "\\/\\/\\ LIGHTS"`
170
        if [ "${MHK_TERM}" = "// LIGHTS" ] ; then
231
        if [ "${MHK_TERM}" = "// LIGHTS" ] ; then
171
          MHKSTOP="1"
232
          MHKSTOP="1"
172
        fi
233
        fi
173
      fi
234
      fi
174
    done
235
    done
175
  done
236
  done
176
  # Some people prefer unusual setups ...
237
  # Some people prefer unusual setups ...
177
  zip -rq9 ${EXTRACTDIR}/polymost_hrp_update_polymer_maphacks.zip *.mhk
238
  zip -rq9 ${EXTRACTDIR}/polymost_hrp_update_polymer_maphacks.zip *.mhk
178
} # create_polymost_mhk()
239
} # create_polymost_mhk()
179
 
240
 
180
 
241
 
-
 
242
# I really don't know yet if this will become necessary, or if it doesn't make
-
 
243
# sense at all, but at least the files involved are listed.
181
duke_plus_compatibility()
244
dukeplus_polymost_compatibility()
182
{
245
{
-
 
246
  # dukeplus.def expects some files to be present in the HRP
-
 
247
  #
-
 
248
  # model "highres/sprites/characters/1405_duke.md3" { // all OK, no action required
-
 
249
  #    skin { pal 0 surface 0 file "highres/sprites/pickups/0057_jetpack.png" }
-
 
250
  #    skin { pal 0 surface 1 file "highres/sprites/characters/1405_duke.png" }
-
 
251
  #    skin { pal 10 surface 1 file "highres/sprites/characters/1405_duke_10.png" }
-
 
252
  #    skin { pal 11 surface 1 file "highres/sprites/characters/1405_duke_11.png" }
-
 
253
  #    skin { pal 12 surface 1 file "highres/sprites/characters/1405_duke_12.png" }
-
 
254
  #    skin { pal 13 surface 1 file "highres/sprites/characters/1405_duke_13.png" }
-
 
255
  #    skin { pal 14 surface 1 file "highres/sprites/characters/1405_duke_14.png" }
-
 
256
  #    skin { pal 15 surface 1 file "highres/sprites/characters/1405_duke_15.png" }
-
 
257
  #    skin { pal 16 surface 1 file "highres/sprites/characters/1405_duke_16.png" }
-
 
258
  #    skin { pal 21 surface 1 file "highres/sprites/characters/1405_duke_21.png" }
-
 
259
  #    skin { pal 23 surface 1 file "highres/sprites/characters/1405_duke_23.png" }
-
 
260
  #    skin { pal 0 surface 2 file "highres/sprites/pickups/0023_rpg.png" }
-
 
261
  #
-
 
262
  # model "highres/sprites/firstperson/2510_devastator.md3" { // since Imperium, not Eternity
-
 
263
  #    skin { pal 0 file "highres/sprites/firstperson/2510_devastator.png" specfactor 0.5 specpower 35 }
-
 
264
  #    specular { file "highres/sprites/firstperson/2510_devastator_s.png" }
-
 
265
  #    glow { file "highres/sprites/firstperson/2510_devastator_g.png" }
-
 
266
  #
-
 
267
  # model "highres/sprites/firstperson/2524_pistol.md3" {    // most/mer : same MD3 + same skin til r295     
-
 
268
  #    skin { pal 0 file "highres/sprites/firstperson/2524_pistol.png" } // up to DP2.30 DNE/IMP only
-
 
269
  #    glow { file "highres/sprites/firstperson/2524_pistol_g.png" }     // up to DP2.30 DNE/IMP only
-
 
270
  # model "highres/sprites/firstperson/2530_clip.md3" {                  // most/mer : diff MD3, same skin
-
 
271
  #    skin { pal 0 file "highres/sprites/pickups/0040_pistolammo.jpg" }
-
 
272
  # model "highres/sprites/firstperson/2532_cliphand.md3" {  // most/mer : same MD3 + same skin til r295
-
 
273
  #    skin { pal 0 file "highres/sprites/firstperson/2532_cliphand.png" } // til r295, then duke_hand_*
-
 
274
  #
-
 
275
 
-
 
276
  SPR="highres/sprites"
-
 
277
  SPRE="${EXTRACTDIR}/highres/sprites"
-
 
278
  PATCHTYPE=$1
-
 
279
 
-
 
280
  case "$PATCHTYPE" in
-
 
281
    polymer)
-
 
282
      echo "  # Using \"Polymer approach\")"
-
 
283
      cp -pi $SPR/firstperson/2510_devastator.md3            "$SPRE/firstperson"
-
 
284
      cp -pi $SPR/firstperson/2510_devastator.png            "$SPRE/firstperson"
-
 
285
      cp -pi $SPR/firstperson/2510_devastator_s.png          "$SPRE/firstperson"
-
 
286
      cp -pi $SPR/firstperson/2510_devastator_g.png          "$SPRE/firstperson"
-
 
287
      cp -pi $SPR/firstperson/2524_pistol.md3                "$SPRE/firstperson"
-
 
288
      cp -pi $SPR/firstperson_polymost/2524_pistol.png       "$SPRE/firstperson"
-
 
289
      cp -pi $SPR/firstperson_polymost/2524_pistol_g.png     "$SPRE/firstperson"
-
 
290
      cp -pi $SPR/firstperson/2530_clip.md3                  "$SPRE/firstperson"
-
 
291
      cp -pi $SPR/pickups/0040_pistolammo.jpg                "$SPRE/pickups"
-
 
292
      cp -pi $SPR/firstperson/2532_cliphand.md3              "$SPRE/firstperson"
-
 
293
      cp -pi $SPR/firstperson/2532_cliphand.png              "$SPRE/firstperson"
-
 
294
      cp -pi $SPR/firstperson/duke_hand_d.png                "$SPRE/firstperson"
-
 
295
      cp -pi $SPR/firstperson/duke_hand_n.png                "$SPRE/firstperson"
-
 
296
      cp -pi $SPR/firstperson/duke_hand_s.png                "$SPRE/firstperson"
-
 
297
      ;;
-
 
298
    polymost)
-
 
299
      echo "  # Using (\"Polymost approach\")"
-
 
300
      cp -pi $SPR/firstperson_polymost/2510_devastator.md3   "$SPRE/firstperson"
-
 
301
      cp -pi $SPR/firstperson_polymost/2510_devastator.png   "$SPRE/firstperson"
-
 
302
      #cp -pi $SPR/firstperson/2510_devastator_s.png          "$SPRE/firstperson"
-
 
303
      cp -pi $SPR/firstperson_polymost/2510_devastator_g.png "$SPRE/firstperson"
-
 
304
      cp -pi $SPR/firstperson_polymost/2524_pistol.md3       "$SPRE/firstperson"
-
 
305
      cp -pi $SPR/firstperson_polymost/2524_pistol.png       "$SPRE/firstperson"
-
 
306
      cp -pi $SPR/firstperson_polymost/2524_pistol_g.png     "$SPRE/firstperson"
-
 
307
      cp -pi $SPR/firstperson_polymost/2530_clip.md3         "$SPRE/firstperson"
-
 
308
      cp -pi $SPR/pickups/0040_pistolammo.jpg                "$SPRE/pickups"
-
 
309
      cp -pi $SPR/firstperson_polymost/2532_cliphand.md3     "$SPRE/firstperson"
-
 
310
      cp -pi $SPR/firstperson/2532_cliphand.png              "$SPRE/firstperson"
-
 
311
      cp -pi $SPR/firstperson/duke_hand_d.png                "$SPRE/firstperson"
-
 
312
      cp -pi $SPR/firstperson/duke_hand_n.png                "$SPRE/firstperson"
-
 
313
      cp -pi $SPR/firstperson/duke_hand_s.png                "$SPRE/firstperson"
-
 
314
      ;;
-
 
315
    mixed)
-
 
316
      echo "  # Using (\"Mixed approach\")"
183
  echo "DukePlus compatibility patch for Polymost HRP export is not yet implemented."
317
      echo "    # Not applied / Not yet implemented"
-
 
318
      ;;
-
 
319
    none)
-
 
320
      #echo "  Not applied"
-
 
321
      echo "  # Not yet implemented"
-
 
322
      ;;
-
 
323
    *)
-
 
324
      echo "  # Bad parameter"
-
 
325
      ;;
-
 
326
  esac
-
 
327
 
184
} # duke_plus_compatibility()
328
} # dukeplus_polymost_compatibility()
185
 
329
 
186
 
330
 
187
parse_defs()
331
parse_defs()
188
{
332
{
189
  echo "$1"
333
  echo "$1"
-
 
334
  BLOCK_COMMENT="OFF"
190
  cat $1 | while read DEF_LINE; do
335
  cat $1 | while read DEF_LINE; do
191
 
336
 
192
    #DOS only: DEF_FILE=`echo "${DEF_LINE}" | grep -wE "^include" | sed s/include\ //`
337
    #DOS only: DEF_FILE=`echo "${DEF_LINE}" | grep -wE "^include" | sed s/include\ //`
193
    DEF_FILE=`echo "${DEF_LINE}" | grep -wE "^include" | sed s/include\ // | sed s/\\\r//`
338
    DEF_FILE=`echo "${DEF_LINE}" | grep -wE "^include" | sed s/include\ // | sed s/\\\r//`
194
    if [ "${DEF_FILE}" != "" ] ; then
339
    if [ "${DEF_FILE}" != "" ] ; then
195
      cp -p      "${DEF_FILE}" "${EXTRACTDIR}/${DEF_FILE}"
340
      cp -p      "${DEF_FILE}" "${EXTRACTDIR}/${DEF_FILE}"
196
      parse_defs "${DEF_FILE}"
341
      parse_defs "${DEF_FILE}"
197
    fi
342
    fi
198
 
343
 
199
    HRP_TERM=`echo "${DEF_LINE}" | grep -owE "file|model|front|right|back|left|top|down"`
344
    HRP_TERM=`echo "${DEF_LINE}" | grep -owE "file|model|front|right|back|left|top|down"`
200
 
345
 
-
 
346
    if [ ! "$EXTRACT_COMMENTED_FILES" = "YES" ] ; then
-
 
347
 
-
 
348
      COMMENT_TERM=`echo "${DEF_LINE}" | grep -oE "\\/\\*|\\*\\/"`
-
 
349
      if [ "$COMMENT_TERM"  = "/*" ] ; then BLOCK_COMMENT="ON" ; fi
-
 
350
 
-
 
351
      if [ "$BLOCK_COMMENT" = "ON" ] ; then HRP_TERM="" ; fi
-
 
352
 
-
 
353
      if [ "$COMMENT_TERM"  = "*/" ] ; then BLOCK_COMMENT="OFF" ; fi
-
 
354
 
-
 
355
      if [ ! "$HRP_TERM" = "" ] ; then
-
 
356
        HRP_COMMENT=`echo "${DEF_LINE}" | grep -E "//.*$HRP_TERM"`
-
 
357
        if [ ! "$HRP_COMMENT" = "" ] ; then
-
 
358
          HRP_TERM=""
-
 
359
        fi
-
 
360
      fi
-
 
361
 
-
 
362
    fi
-
 
363
 
201
    case "$HRP_TERM" in
364
    case "$HRP_TERM" in
202
      file)
365
      file)
203
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r s/^.*file\ *\"//g | sed s/\".*//`
366
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r s/^.*file\ *\"//g | sed s/\".*//`
204
        # Mastering the backslash :-) ... hm, no big performance gain ... :
367
        # Mastering the backslash :-) ... hm, no big performance gain ... :
205
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*file\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
368
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*file\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
206
        # Ignore comments WIP:
369
        # Ignore comments WIP:
207
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*file\\ *\\)\\(\\"\\(.*\\)\\"\\)\\(.*\\)/\\\3/`
370
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*file\\ *\\)\\(\\"\\(.*\\)\\"\\)\\(.*\\)/\\\3/`
208
        ;;
371
        ;;
209
      model)
372
      model)
210
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*model\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
373
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*model\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
211
        ;;
374
        ;;
212
      front|right|back|left|top|down)
375
      front|right|back|left|top|down)
213
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r s/^.*${HRP_TERM}\ *\"//g | sed s/\".*//`
376
        #HRP_FILE=`echo "${DEF_LINE}" | sed -r s/^.*${HRP_TERM}\ *\"//g | sed s/\".*//`
214
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*${HRP_TERM}\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
377
        HRP_FILE=`echo "${DEF_LINE}" | sed -r --posix s/\\(^.*${HRP_TERM}\\ *\"\\)\\([^\"]*\\)\\(.*\\)/\\\2/`
215
        ;;
378
        ;;
216
      *)
379
      *)
217
        HRP_FILE=""
380
        HRP_FILE=""
218
        ;;
381
        ;;
219
    esac
382
    esac
220
 
383
 
221
    if [  !   "${HRP_FILE}" = "" ] ; then
384
    if [  !   "${HRP_FILE}" = "" ] ; then
222
      if [ -f "${HRP_FILE}" ] ; then
385
      if [ -f "${HRP_FILE}" ] ; then
223
        cp -p "${HRP_FILE}" "${EXTRACTDIR}/${HRP_FILE}"
386
        cp -p "${HRP_FILE}" "${EXTRACTDIR}/${HRP_FILE}"
224
      else
387
      else
225
        echo  "WARNING : ${HRP_FILE} is missing!"
388
        echo  "WARNING : ${HRP_FILE} is missing!"
226
      fi
389
      fi
227
    fi
390
    fi
228
 
391
 
229
  done
392
  done
230
} # parse_defs()
393
} # parse_defs()
231
 
394
 
232
 
395
 
233
delete_empty_folders()
396
delete_empty_folders()
234
{
397
{
235
    if [ -d "${EXTRACTDIR}" ] ; then
398
    if [ -d "${EXTRACTDIR}" ] ; then
236
      rm -rf ${EXTRACTDIR}/.svn
399
      rm -rf ${EXTRACTDIR}/.svn
237
      rm -rf ${EXTRACTDIR}/installer
400
      rm -rf ${EXTRACTDIR}/installer
238
      DIRLIST=./EXTRACT_DIRECTORIES.lst
401
      DIRLIST=./EXTRACT_DIRECTORIES.lst
239
      du "${EXTRACTDIR}" > ${DIRLIST}
402
      du "${EXTRACTDIR}" > ${DIRLIST}
240
      cat ${DIRLIST} | while read DIR ; do
403
      cat ${DIRLIST} | while read DIR ; do
241
        if [ "0" = "`echo \"${DIR}\" | grep -owE \"0\"`" ] ; then
404
        if [ "0" = "`echo \"${DIR}\" | grep -owE \"0\"`" ] ; then
242
          EMPTYDIR="`echo \"${DIR}\" | sed -r --posix s/0//`"
405
          EMPTYDIR="`echo \"${DIR}\" | sed -r --posix s/0//`"
243
          if [ -d ${EMPTYDIR} ] ; then
406
          if [ -d ${EMPTYDIR} ] ; then
244
            rmdir ${EMPTYDIR}
407
            rmdir ${EMPTYDIR}
245
          fi
408
          fi
246
        fi
409
        fi
247
      done
410
      done
248
      rm ${DIRLIST}
411
      rm ${DIRLIST}
249
    else
412
    else
250
      echo "No ${EXTRACTDIR}."
413
      echo "No ${EXTRACTDIR}."
251
    fi
414
    fi
252
} # delete_empty_folders()
415
} # delete_empty_folders()
253
 
416
 
254
 
417
 
255
main()
418
main()
256
{
419
{
257
  EXTRACTDIR=../hrp_${HRPTYPE}_extract
420
  EXTRACTDIR=../hrp_${HRPTYPE}_extract
258
  echo  "EXTRACT :" ${HRPROOT}/${EXTRACTDIR}
421
  echo  "EXTRACT :" ${HRPROOT}/${EXTRACTDIR}
259
 
422
 
260
  if [ $FORCE = 0 ] ; then
423
  if [ $FORCE = 0 ] ; then
261
    if ask "Proceed?"
424
    if ask "Proceed?"
262
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
425
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
263
      else exit 0
426
      else exit 0
264
    fi
427
    fi
265
  fi
428
  fi
266
 
429
 
267
  date +%F" "%H:%M:%S
430
  date +%F" "%H:%M:%S
268
 
431
 
269
  echo "### Deleting ${EXTRACTDIR} ... ###"
432
  echo "### Deleting ${EXTRACTDIR} ... ###"
270
  rm -rf ${EXTRACTDIR}
433
  rm -rf ${EXTRACTDIR}
271
 
434
 
272
  echo "### Copying directory tree ... ###"
435
  echo "### Copying directory tree ... ###"
273
  copy_folders
436
  copy_folders
274
 
437
 
275
  echo "### Copying 'known' files ... ###"
438
  echo "### Copying 'known' files ... ###"
276
  copy_known_files
439
  copy_known_files
277
 
440
 
278
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "polymost_override" ] ; then
441
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "polymost_override" ] ; then
279
    echo "### Creating Polymost maphacks ... ###"
442
    echo "### Creating Polymost maphacks ... ###"
280
    create_polymost_mhk
443
    create_polymost_mhk
281
 
444
 
282
    #echo "### Duke Plus compatibility patch ... ###"
445
    #echo "### DukePlus<>Polymost HRP compatibility patch ... ###"
283
    #duke_plus_compatibility
446
    #dukeplus_polymost_compatibility $DUKEPLUS_POLYMOST_COMPATIBILTY_APPROACH
284
  fi
447
  fi
285
 
448
 
286
  echo "### Parsing DEF file hierarchy ... ###"
449
  echo "### Parsing DEF file hierarchy ... ###"
-
 
450
  if [ "$EXTRACT_COMMENTED_FILES" = "YES" ] ; then
-
 
451
    echo "  # Extract commented textures and models: $EXTRACT_COMMENTED_FILES"
-
 
452
  else
-
 
453
    echo "  # Extract commented textures and models: NO"
-
 
454
  fi
287
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "full" ] ; then
455
  if [ "${HRPTYPE}" = "polymost" ] || [ "${HRPTYPE}" = "full" ] ; then
288
    parse_defs duke3d_hrp_polymost.def
456
    parse_defs duke3d_hrp_polymost.def
289
  fi
457
  fi
290
  if [ "${HRPTYPE}" = "polymer" ] || [ "${HRPTYPE}" = "full" ] ; then
458
  if [ "${HRPTYPE}" = "polymer" ] || [ "${HRPTYPE}" = "full" ] ; then
291
    parse_defs duke3d_hrp.def
459
    parse_defs duke3d_hrp.def
292
  fi
460
  fi
293
 
461
 
294
  echo "### Deleting empty directories in ${EXTRACTDIR} ... ###"
462
  echo "### Deleting empty directories in ${EXTRACTDIR} ... ###"
295
  delete_empty_folders
463
  delete_empty_folders
296
 
464
 
297
  date +%F" "%H:%M:%S
465
  date +%F" "%H:%M:%S
298
 
466
 
299
  echo "Command line example for creating a ZIP package:"
467
  echo "Command line example for creating a ZIP package:"
300
  echo "sh -c \"cd ${EXTRACTDIR} ; zip -rqn .zip:.jpg:.png ${EXTRACTDIR}.zip *\""
468
  echo "sh -c \"cd ${EXTRACTDIR} ; zip -rqn .zip:.jpg:.png ${EXTRACTDIR}.zip *\""
301
} # main()
469
} # main()
302
 
470
 
303
 
471
 
304
 
472
 
305
PRGPATH=$0
473
PRGPATH=$0
306
HRPTYPE=$1
474
HRPTYPE=$1
307
if [ "$2" = "y" ] ; then FORCE=1 ; else FORCE=0 ; fi
475
if [ "$2" = "y" ] ; then FORCE=1 ; else FORCE=0 ; fi
-
 
476
if [ "$2" = "v" ] && [ ! "$3" = "" ] ; then VERSION="$3" ; fi
308
HRPROOT=.
477
HRPROOT=.
309
 
478
 
310
cd               "${HRPROOT}"
479
cd               "${HRPROOT}"
311
echo  "PWD     :" `pwd`
480
echo  "PWD     :" `pwd`
312
echo  "HRPROOT :" ${HRPROOT}
481
echo  "HRPROOT :" ${HRPROOT}
313
 
482
 
314
if [ ! -f "./duke3d.def" ] ; then
483
if [ ! -f "./duke3d.def" ] ; then
315
  echo "ERROR : ./duke3d.def not found. This is no HRP root directory. Exit."
484
  echo "ERROR : ./duke3d.def not found. This is no HRP root directory. Exit."
316
  exit 1
485
  exit 1
317
fi
486
fi
318
 
487
 
319
case "$HRPTYPE" in
488
case "$HRPTYPE" in
320
  polymer|polymost_override|polymost)
489
  polymer|polymost_override|polymost)
321
    main $HRPTYPE
490
    main $HRPTYPE
322
    ;;
491
    ;;
323
  full)
492
  full)
324
    if [ $FORCE = 0 ] ; then if ask "Extract full HRP (+ Override Pack)?"
493
    if [ $FORCE = 0 ] ; then if ask "Extract full HRP (+ Override Pack)?"
325
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
494
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
326
      else exit 0
495
      else exit 0
327
    fi ; fi
496
    fi ; fi
328
    ${PRGPATH} polymost_override y
497
    ${PRGPATH} polymost_override y
329
    main $HRPTYPE
498
    main $HRPTYPE
330
    ;;
499
    ;;
331
  both)
500
  both)
332
    if [ $FORCE = 0 ] ; then if ask "Extract both pure HRP?"
501
    if [ $FORCE = 0 ] ; then if ask "Extract both pure HRP?"
333
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
502
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
334
      else exit 0
503
      else exit 0
335
    fi ; fi
504
    fi ; fi
336
    ${PRGPATH} polymer  y
505
    ${PRGPATH} polymer  y
337
    ${PRGPATH} polymost y
506
    ${PRGPATH} polymost y
338
    ;;
507
    ;;
339
  all)
508
  all)
340
    if [ $FORCE = 0 ] ; then if ask "Extract all packs from the repository?"
509
    if [ $FORCE = 0 ] ; then if ask "Extract all packs from the repository?"
341
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
510
      then echo "Extracting ${HRPTYPE} from \"${HRPROOT}\" "
342
      else exit 0
511
      else exit 0
343
    fi ; fi
512
    fi ; fi
344
    ${PRGPATH} both y
513
    ${PRGPATH} both y
345
    ${PRGPATH} full y
514
    ${PRGPATH} full y
346
    ;;
515
    ;;
347
  unused)
516
  unused)
348
    echo "Option \"$1\" not yet implemented."
517
    echo "Option \"$1\" not yet implemented."
349
    ##(cd ${1}; tar cf - . ) | (cd ${2}; tar xf -)
518
    ##(cd ${1}; tar cf - . ) | (cd ${2}; tar xf -)
350
    ;;
519
    ;;
351
  debug)
520
  debug)
352
    echo "Nothing to debug."
521
    echo "Nothing to debug."
353
    ;;
522
    ;;
354
  *)
523
  *)
355
    echo "Usage: ${0} {full|polymer|polymost_override|polymost|both|all}"
524
    echo "Usage: ${0} {full|polymer|polymost_override|polymost|both|all} [v VERSION]"
356
    exit 1
525
    exit 1
357
    ;;
526
    ;;
358
esac
527
esac
359
 
528
 
360
exit 0
529
exit 0
361
 
530