387 lines
14 KiB
Makefile
387 lines
14 KiB
Makefile
#
|
|
# 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 <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# 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
|
|
|