# # Command & Conquer Red Alert(tm) # Copyright 2025 Electronic Arts Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Size of the program shape buffer (passed to MAKESHPS.EXE) SHAPEBUFFSIZE = 20000 # Default paths to use ROOTCD = v:\projects\c&c0\cstrike2\cd\\ ROOTDIR = ..\\ MAPDIR = ..\\ ROOTCODEDIR = .\\ ABSROOT = ..\\ WAVDIR = f:\projects\c&c0\audio\amingame\\ SCOREDIR = f:\projects\c&c0\audio\amingame\scores\\ VQADIR = f:\projects\c&c0\art\movies\\ LANGDIR = INGAMEDIR = ingame TEMPDIR = s: # Override paths !if $d(GERMAN) ROOTCD = v:\projects\c&c0\cstrike2\cdger\\ ROOTDIR = ..\\ MAPDIR = ..\ger ROOTCODEDIR = .\\ ABSROOT = ..\\ WAVDIR = f:\projects\c&c0\audio\amingame\\ LANGDIR = \german INGAMEDIR = ingamegr #VQADIR = s:t\\ VQADIR = t:movies\\ TEMPDIR = s: !endif !if $d(FRENCH) ROOTCD = v:\projects\c&c0\cstrike2\cdfre\\ ROOTDIR = ..\\ MAPDIR = ..\fre ROOTCODEDIR = .\\ ABSROOT = ..\\ WAVDIR = f:\projects\c&c0\audio\amingame\ LANGDIR = \french INGAMEDIR=ingamefr VQADIR = t:movies\\ TEMPDIR = s: !endif # Directory where temporary mixfiles can be stored. !if $d(TEMP_MIX_DIR) TEMP_MIX_DIR = $(TEMP_MIX_DIR) !else TEMP_MIX_DIR = $(TEMPDIR)t\m !endif !if $d(CPS) TEMP_CPS_DIR = $(CPS) !else TEMP_CPS_DIR = $(TEMPDIR)t !endif #.path.a6a = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a6j = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a8 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a80 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a81 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a82 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a83 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a84 = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a8a = $(TEMP_CPS_DIR)\\ # Game formatted audio data #.path.a8j = $(TEMP_CPS_DIR)\\ # Game formatted audio data .path.a6 = $(TEMP_CPS_DIR)\\ # Game formatted audio data .path.anm = $(ROOTDIR)art\$(INGAMEDIR)\\ # Raw animation file .path.ash = .\\ # Autogenerated assembly header file .path.asm = .\\ # Raw assembly file .path.aud = $(TEMP_CPS_DIR)\\ # Game formatted audio data .path.c = .\\ # Raw C file .path.cd1 = $(ROOTCD)CD4\\ # CD #1 (Allies) .path.cd2 = $(ROOTCD)CD2\\ # CD #1 (Soviet) .path.cpp = .\\ # Raw C++ file .path.cps = $(TEMP_CPS_DIR)\\ # Compressed art .path.dat = $(TEMP_CPS_DIR)\\ # Generic data .path.des = $(TEMP_CPS_DIR)\\ # Desert icons .path.dip = $(TEMP_CPS_DIR)\\ # Generic compressed text (obsolete) .path.eng = $(TEMP_CPS_DIR)\\ # English compressed text .path.exe = $(ROOTDIR)run\\ # Executable (relative path from OBJ directory) .path.fin = $(ROOTDIR)art\ingame\fin\\ # Finale source animation .path.fnt = $(TEMP_CPS_DIR)\\ # Font (compressed) .path.foc = $(ROOTDIR)audio\french\\ # French digitized voices .path.fre = $(TEMP_CPS_DIR)\\ # French compressed text .path.gdi = $(TEMP_CPS_DIR)\\ # Good guy compressed files .path.ger = $(TEMP_CPS_DIR)\\ # German compressed text .path.goc = $(ROOTDIR)audio\german\\ # German digitized voices .path.h = .\\ # C header file .path.hi = $(TEMP_CPS_DIR)\\ # Shape file (processed) .path.hnt = $(TEMP_CPS_DIR)\\ # Font (compressed) .path.i = .\\ # Assembly header .path.icn = $(TEMP_CPS_DIR)\\ # Icon file (compressed) .path.ini = $(MAPDIR)maps\\ # INI control files .path.int = $(TEMP_CPS_DIR)\\ # Interior icons .path.j6 = $(TEMP_CPS_DIR)\\ # Game formatted audio data .path.jp = $(TEMP_CPS_DIR)\\ # Dinosaur compressed files .path.jun = $(TEMP_CPS_DIR)\\ # Jungle icons .path.juv = $(TEMP_CPS_DIR)\\ # Juvenile sound effects. .path.lbm = $(ROOTDIR)art\ingame\\ # Source art (uncompressed) .path.lnt = $(TEMP_CPS_DIR)\\ # Font (compressed) .path.low = $(TEMP_CPS_DIR)\\ # Shape file (processed) .path.lut = $(TEMP_CPS_DIR)\\ # Look up tables .path.mak = .\\ # Shape making control file .path.map = $(TEMP_CPS_DIR)\\ # Icon map data file .path.mid = $(ROOTDIR)audio\mid\\ # Midi file .path.mix = $(TEMP_MIX_DIR)\\ # Mix-file location. .path.mpr = $(MAPDIR)maps\\ # Multiplayer scenario files .path.mrf = $(TEMP_CPS_DIR)\\ # Palette morph data files .path.nod = $(TEMP_CPS_DIR)\\ # Bad guy compressed files .path.o = obj\\ # Overlay object file .path.obj = obj\\ # Object file .path.out = .\\ # Temporary parser file. .path.pak = $(ROOTDIR)run\\ # Packed file .path.pal = $(TEMP_CPS_DIR)\\ # Palette file (processed) .path.pcx = $(TEMP_CPS_DIR)\\ #.pcx files .path.pkt = $(MAPDIR)maps\\ # Scenario grouping control files .path.r00 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.r01 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.r02 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.r03 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.shp = $(TEMP_CPS_DIR)\\ # Shape file (processed) .path.sno = $(TEMP_CPS_DIR)\\ # Snow icons .path.sym = .\\ # Precompiled header symbol file. .path.tbl = $(TEMP_CPS_DIR)\\ # Remap table file. .path.tem = $(TEMP_CPS_DIR)\\ # Temperate icons .path.txt = $(ROOTDIR)code\eng\\ # Default location for text files. .path.v00 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.v01 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.v02 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.v03 = $(TEMP_CPS_DIR)\\ # Infantry response. .path.v16 = $(TEMP_CPS_DIR)\\ # Game formatted audio data .path.vqa = $(VQADIR)vq$(LANGDIR)\\ # VQA movie files location. .path.vqp = $(VQADIR)vq$(LANGDIR)\\ # VQA Movie Interpolated palette files !if $d(FRENCH) .path.vqa = $(VQADIR)vq\french\\ # VQA movie files location. .path.vqp = $(VQADIR)vq\french\\ # VQA Movie Interpolated palette files !endif .path.wav = $(WAVDIR) # Digitized sample file (generic) .path.win = $(TEMP_CPS_DIR)\\ # Winter icons .path.wsa = $(TEMP_CPS_DIR)\\ # Processed animation file .path.wv = $(ROOTDIR)audio\wv\\ # Digitized sample file (generic) .path.xmi = $(ROOTDIR)audio\xmi\\ # MT-32 midi scores ########################################################################## # Rules # # Rule for converting anim files. # .anm.wsa: utils\animate $*.anm $(.path.anm)$&.lbm $(.path.wsa)$&.wsa -l -f -p # # Rule for converting art files. # .lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps -ex -i # # Rule for converting outtake first frame art files. # {$(.path.lbm)outtake}.lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps -ex {$(.path.anm)outtake}.anm.wsa: utils\animate $*.anm $(.path.anm)outtake\$&.lbm $(.path.wsa)$&.wsa -l -f -p {$(.path.anm)score}.anm.wsa: utils\animate $*.anm $(.path.wsa)$&.wsa -p ######################################################### # Rule for creating palette files. # {$(.path.lbm)palettes}.lbm.pal: utils\wwcomp $*.lbm -ppal copy $&.pal $(.path.pal)$&.pal del $&.pal {$(.path.lbm)score}.lbm.pal: utils\wwcomp $*.lbm -ppal copy $&.pal $(.path.pal)$&.pal del $&.pal ######################################################### # Rule for creating vehicles. {$(.path.anm)units}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l ######################################################### # Rule for creating buildings. {$(.path.anm)building}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l ######################################################### # Rule for creating misc shape animations. {$(.path.anm)anim}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l ######################################################### # Rule for converting font files. {$(.path.lbm)fonts}.lbm.fnt: echo Creating font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.fnt)$&.fnt {$(.path.lbm)hires}.lbm.hnt: echo Creating hi-res font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.hnt)$&.hnt {$(.path.lbm)hires}.lbm.fnt: echo Creating lo-res font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.hnt)$&.fnt {$(.path.lbm)lores}.lbm.lnt: echo Creating lo-res font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.lnt)$&.lnt {$(.path.lbm)lores}.lbm.fnt: echo Creating lo-res font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.lnt)$&.fnt ######################################################### # Rules for creating overlay files. {$(.path.lbm)overlay}.lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps {$(.path.anm)overlay}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l ######################################################### # Rules for creating temperate files. {$(.path.lbm)temperat}.lbm.tem: utils\iconmap -r -w3 -o$(.path.tem)$&.tem $*.lbm {$(.path.anm)temperat}.anm.tem: utils\keyframe $*.anm $(.path.tem)$&.tem -l ######################################################### # Rules for creating interior files. {$(.path.lbm)interior}.lbm.int: utils\iconmap -r -w3 -o$(.path.int)$&.int $*.lbm {$(.path.anm)interior}.anm.int: utils\keyframe $*.anm $(.path.int)$&.int -l ######################################################### # Rules for creating winter files. {$(.path.lbm)snow}.lbm.sno: utils\iconmap -r -w3 -o$(.path.sno)$&.sno $*.lbm {$(.path.anm)snow}.anm.sno: utils\keyframe $*.anm $(.path.sno)$&.sno -l ######################################################### # Rules for creating desert files. {$(.path.lbm)desert}.lbm.des: utils\iconmap -r -w3 -o$(.path.des)$&.des $*.lbm {$(.path.anm)desert}.anm.des: utils\keyframe $*.anm $(.path.des)$&.des -l ######################################################### # Generic icon file creation. .lbm.icn: utils\iconmap -r -w3 -o$(.path.icn)$&.icn $*.lbm ######################################################### # Text files. {eng}.txt.eng: utils\textmake $*.txt $(.path.eng)$&.eng $&.h {ger}.txt.ger: utils\textmake $*.txt $(.path.ger)$&.ger $&.h {fre}.txt.fre: utils\textmake $*.txt $(.path.fre)$&.fre $&.h ######################################################### # Score/mapsel files. {$(.path.anm)score}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l {$(.path.lbm)score}.lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps -ex -i ######################################################### # Generic shape files. #.lbm.shp: # utils\makeshps -q $*.lbm $&.mak $(.path.cps)$&.shp $(SHAPEBUFFSIZE) {$(.path.anm)generic}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l .c.lob: utils\LINT -ml -si2 -sl4 +v $(WWLIB)WWLIB.LNT $*.c >$&.err # Generic shape file creation. {$(.path.anm)}.anm.shp: utils\keyframe $*.anm $(.path.shp)$&.shp -l {$(.path.lbm)units}.lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps -ex -i ########################################################## # Hi-res data files # {$(.path.anm)hires}.anm.hi: utils\keyframe $*.anm $(.path.hi)$&.hi -l # Hi-res font files {$(.path.lbm)hires}.lbm.fnt: echo Creating font file "$&.fnt". utils\fontmake $*.lbm -o$(.path.fnt)$&.fnt ######################################################### # Rule for creating low res data files. {$(.path.anm)lores}.anm.low: utils\keyframe $*.anm $(.path.low)$&.low -l {$(.path.lbm)lores}.lbm.cps: utils\wwcomp $*.lbm $(.path.cps)$&.cps -ex -i ####################################### # Rules to convert 16 bit audio files. {$(SCOREDIR)}.wav.aud: utils\audiomak $(SCOREDIR)$&.wav $(.path.aud)$&.aud {$(.path.wav)speech$(LANGDIR)}.wav.aud: utils\audiomak $(.path.wav)speech$(LANGDIR)\$&.wav $(.path.aud)$&.aud {$(.path.wav)sfx\tanya$(LANGDIR)}.wav.aud: utils\audiomak $(.path.wav)sfx\tanya$(LANGDIR)\$&.wav $(.path.aud)$&.aud {$(.path.wav)sfx$(LANGDIR)}.wav.aud: utils\audiomak $(.path.wav)sfx$(LANGDIR)\$&.wav $(.path.aud)$&.aud {$(.path.wav)sfx\v00$(LANGDIR)}.wav.v00: utils\audiomak $(.path.wav)sfx\v00$(LANGDIR)\$&.wav $(.path.aud)$&.v00 {$(.path.wav)sfx\v01$(LANGDIR)}.wav.v01: utils\audiomak $(.path.wav)sfx\v01$(LANGDIR)\$&.wav $(.path.aud)$&.v01 {$(.path.wav)sfx\v02$(LANGDIR)}.wav.v02: utils\audiomak $(.path.wav)sfx\v02$(LANGDIR)\$&.wav $(.path.aud)$&.v02 {$(.path.wav)sfx\v03$(LANGDIR)}.wav.v03: utils\audiomak $(.path.wav)sfx\v03$(LANGDIR)\$&.wav $(.path.aud)$&.v03 {$(.path.wav)sfx\r00$(LANGDIR)}.wav.r00: utils\audiomak $(.path.wav)sfx\r00$(LANGDIR)\$&.wav $(.path.aud)$&.r00 {$(.path.wav)sfx\r01$(LANGDIR)}.wav.r01: utils\audiomak $(.path.wav)sfx\r01$(LANGDIR)\$&.wav $(.path.aud)$&.r01 {$(.path.wav)sfx\r02$(LANGDIR)}.wav.r02: utils\audiomak $(.path.wav)sfx\r02$(LANGDIR)\$&.wav $(.path.aud)$&.r02 {$(.path.wav)sfx\r03$(LANGDIR)}.wav.r03: utils\audiomak $(.path.wav)sfx\r03$(LANGDIR)\$&.wav $(.path.aud)$&.r03