mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 19:20:38 +00:00
More Build tools improvements:
- JFBuild ports: arttool, givedepth, and mkpalette - All viable tools are now built when 'make utils' is invoked, not just some - Revert "initprintf" hack of previous commit and replace it with "compat_tools.c" - Move Bstrtolower from baselayer.c to compat.c - Makefiles: Add start and finish messages for the tools - Makefiles: To prevent "-Wimplicit" from being passed to the C++ compiler, create $(*CONLYFLAGS) git-svn-id: https://svn.eduke32.com/eduke32@2458 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
d0e0738f4f
commit
c5519e3fe8
17 changed files with 1416 additions and 61 deletions
|
@ -39,6 +39,7 @@ OURCFLAGS=$(BASECFLAGS) \
|
||||||
-I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include
|
-I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include
|
||||||
|
|
||||||
OURCXXFLAGS=$(BASECXXFLAGS)
|
OURCXXFLAGS=$(BASECXXFLAGS)
|
||||||
|
OURCONLYFLAGS=$(BASECONLYFLAGS)
|
||||||
NASMFLAGS=$(BASEASFLAGS)
|
NASMFLAGS=$(BASEASFLAGS)
|
||||||
|
|
||||||
MISCLINKOPTS=
|
MISCLINKOPTS=
|
||||||
|
@ -250,7 +251,6 @@ endif
|
||||||
|
|
||||||
|
|
||||||
OURCFLAGS+= $(BUILDCFLAGS)
|
OURCFLAGS+= $(BUILDCFLAGS)
|
||||||
OURCXXFLAGS+= $(BUILDCFLAGS)
|
|
||||||
|
|
||||||
ifeq ($(PLATFORM),WINDOWS)
|
ifeq ($(PLATFORM),WINDOWS)
|
||||||
MISCLINKOPTS+= -Wl,--large-address-aware
|
MISCLINKOPTS+= -Wl,--large-address-aware
|
||||||
|
@ -285,7 +285,7 @@ notice:
|
||||||
|
|
||||||
eduke32$(EXESUFFIX): $(GAMEOBJS) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB) $(MISCGAMEDEPS)
|
eduke32$(EXESUFFIX): $(GAMEOBJS) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB) $(MISCGAMEDEPS)
|
||||||
$(LINK_STATUS)
|
$(LINK_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi
|
||||||
ifeq (1,$(RELEASE))
|
ifeq (1,$(RELEASE))
|
||||||
ifeq (0,$(DEBUGANYWAY))
|
ifeq (0,$(DEBUGANYWAY))
|
||||||
$(STRIP) eduke32$(EXESUFFIX)
|
$(STRIP) eduke32$(EXESUFFIX)
|
||||||
|
@ -299,7 +299,7 @@ endif
|
||||||
|
|
||||||
mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB)
|
mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB)
|
||||||
$(LINK_STATUS)
|
$(LINK_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi
|
||||||
ifeq (1,$(RELEASE))
|
ifeq (1,$(RELEASE))
|
||||||
ifeq (0,$(DEBUGANYWAY))
|
ifeq (0,$(DEBUGANYWAY))
|
||||||
$(STRIP) mapster32$(EXESUFFIX)
|
$(STRIP) mapster32$(EXESUFFIX)
|
||||||
|
@ -359,11 +359,11 @@ $(OBJ)/%.$o: $(SRC)/%.nasm
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.c
|
$(OBJ)/%.$o: $(SRC)/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/lunatic/%.c
|
$(OBJ)/%.$o: $(SRC)/lunatic/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(SRC)/lunatic/dynsymlist_osx: $(SRC)/lunatic/dynsymlist
|
$(SRC)/lunatic/dynsymlist_osx: $(SRC)/lunatic/dynsymlist
|
||||||
sed 's/[{};]//g;s/[A-Za-z_][A-Za-z_0-9]*/_&/g' $< > $@
|
sed 's/[{};]//g;s/[A-Za-z_][A-Za-z_0-9]*/_&/g' $< > $@
|
||||||
|
@ -377,15 +377,23 @@ $(SRC)/lunatic/eduke32.def: $(SRC)/lunatic/dynsymlist
|
||||||
|
|
||||||
$(OBJ)/%.$o: Apple/%.m
|
$(OBJ)/%.$o: Apple/%.m
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/%.cc
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.cpp
|
$(OBJ)/%.$o: $(SRC)/%.cpp
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/%.cxx
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/jmact/%.c
|
$(OBJ)/%.$o: $(SRC)/jmact/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/misc/%.rc
|
$(OBJ)/%.$o: $(SRC)/misc/%.rc
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
|
@ -393,19 +401,19 @@ $(OBJ)/%.$o: $(SRC)/misc/%.rc
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/util/%.c
|
$(OBJ)/%.$o: $(SRC)/util/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(RSRC)/%.c
|
$(OBJ)/%.$o: $(RSRC)/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/game_banner.$o: $(RSRC)/game_banner.c
|
$(OBJ)/game_banner.$o: $(RSRC)/game_banner.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c
|
$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(RSRC)/game_banner.c: $(RSRC)/game.bmp
|
$(RSRC)/game_banner.c: $(RSRC)/game.bmp
|
||||||
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
|
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
|
||||||
|
|
|
@ -147,7 +147,7 @@ else
|
||||||
W_NO_UNUSED_RESULT :=
|
W_NO_UNUSED_RESULT :=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BASECFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \
|
BASECFLAGS=$(debug) -W -Wall -Werror-implicit-function-declaration \
|
||||||
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -D_FORTIFY_SOURCE=2 \
|
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -D_FORTIFY_SOURCE=2 \
|
||||||
$(F_JUMP_TABLES) $(W_NO_UNUSED_RESULT) $(ARCH) \
|
$(F_JUMP_TABLES) $(W_NO_UNUSED_RESULT) $(ARCH) \
|
||||||
-Wextra #-Wwrite-strings -Waddress -Wlogical-op
|
-Wextra #-Wwrite-strings -Waddress -Wlogical-op
|
||||||
|
@ -174,6 +174,7 @@ ifneq (0,$(DMALLOC))
|
||||||
BASECFLAGS+= -DDMALLOC
|
BASECFLAGS+= -DDMALLOC
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
BASECONLYFLAGS=-Wimplicit
|
||||||
BASECXXFLAGS= -fno-exceptions -fno-rtti
|
BASECXXFLAGS= -fno-exceptions -fno-rtti
|
||||||
BASEASFLAGS=-s #-g
|
BASEASFLAGS=-s #-g
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ include ../Makefile.common
|
||||||
ifneq ($(DXROOT_OVERRIDE),)
|
ifneq ($(DXROOT_OVERRIDE),)
|
||||||
DXROOT=$(DXROOT_OVERRIDE)
|
DXROOT=$(DXROOT_OVERRIDE)
|
||||||
else
|
else
|
||||||
DXROOT=../sdk/dx
|
DXROOT=../../sdk/dx
|
||||||
#DXROOT=c:/sdks/directx/dx8
|
#DXROOT=c:/sdks/directx/dx8
|
||||||
endif
|
endif
|
||||||
FMODROOTWIN=c:/sdks/fmodapi374win/api
|
FMODROOTWIN=c:/sdks/fmodapi374win/api
|
||||||
|
@ -48,6 +48,7 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OURCFLAGS=$(BASECFLAGS) -Wno-char-subscripts -I$(INC) $(ARCH)
|
OURCFLAGS=$(BASECFLAGS) -Wno-char-subscripts -I$(INC) $(ARCH)
|
||||||
|
OURCONLYFLAGS=$(BASECONLYFLAGS)
|
||||||
OURCXXFLAGS=$(BASECXXFLAGS)
|
OURCXXFLAGS=$(BASECXXFLAGS)
|
||||||
ASFLAGS=$(BASEASFLAGS)
|
ASFLAGS=$(BASEASFLAGS)
|
||||||
|
|
||||||
|
@ -172,11 +173,20 @@ OURCFLAGS+= $(BUILDCFLAGS)
|
||||||
# TARGETS
|
# TARGETS
|
||||||
|
|
||||||
UTILOBJS=$(OBJ)/kextract.$o $(OBJ)/kgroup.$o $(OBJ)/transpal.$o $(OBJ)/wad2art.$o $(OBJ)/wad2map.$o $(OBJ)/md2tool.$o \
|
UTILOBJS=$(OBJ)/kextract.$o $(OBJ)/kgroup.$o $(OBJ)/transpal.$o $(OBJ)/wad2art.$o $(OBJ)/wad2map.$o $(OBJ)/md2tool.$o \
|
||||||
|
$(OBJ)/generateicon.$o $(OBJ)/cacheinfo.$o $(OBJ)/arttool.$o $(OBJ)/givedepth.$o $(OBJ)/mkpalette.$o \
|
||||||
$(OBJ)/compat.$o $(OBJ)/pragmas.$o
|
$(OBJ)/compat.$o $(OBJ)/pragmas.$o
|
||||||
UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX) md2tool$(EXESUFFIX)
|
UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX) md2tool$(EXESUFFIX) \
|
||||||
|
generateicon$(EXESUFFIX) cacheinfo$(EXESUFFIX) arttool$(EXESUFFIX) givedepth$(EXESUFFIX) mkpalette$(EXESUFFIX)
|
||||||
|
|
||||||
# all: $(OBJ)/$(ENGINELIB) $(OBJ)/$(EDITORLIB)
|
# all: $(OBJ)/$(ENGINELIB) $(OBJ)/$(EDITORLIB)
|
||||||
utils: $(UTILS)
|
utils: start $(UTILS) finish
|
||||||
|
|
||||||
|
start:
|
||||||
|
$(BUILD_STARTED)
|
||||||
|
|
||||||
|
finish:
|
||||||
|
$(BUILD_FINISHED)
|
||||||
|
@ls -l $(UTILS)
|
||||||
|
|
||||||
enginelib: $(OBJ)/$(ENGINELIB)
|
enginelib: $(OBJ)/$(ENGINELIB)
|
||||||
$(OBJ)/$(ENGINELIB): $(ENGINEOBJS)
|
$(OBJ)/$(ENGINELIB): $(ENGINEOBJS)
|
||||||
|
@ -195,34 +205,40 @@ $(OBJ)/$(EDITORLIB): $(EDITOROBJS)
|
||||||
#pragmacheck$(EXESUFFIX): $(OBJ)/pragmacheck.$o $(OBJ)/pragmas.$o
|
#pragmacheck$(EXESUFFIX): $(OBJ)/pragmacheck.$o $(OBJ)/pragmas.$o
|
||||||
# $(CC) $(subst -Dmain=app_main,,$(OURCFLAGS)) -o $@ $^
|
# $(CC) $(subst -Dmain=app_main,,$(OURCFLAGS)) -o $@ $^
|
||||||
|
|
||||||
kextract$(EXESUFFIX): $(OBJ)/kextract.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
kextract$(EXESUFFIX): $(OBJ)/kextract.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
kgroup$(EXESUFFIX): $(OBJ)/kgroup.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
kgroup$(EXESUFFIX): $(OBJ)/kgroup.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
transpal$(EXESUFFIX): $(OBJ)/transpal.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
transpal$(EXESUFFIX): $(OBJ)/transpal.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
wad2art$(EXESUFFIX): $(OBJ)/wad2art.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
wad2art$(EXESUFFIX): $(OBJ)/wad2art.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
wad2map$(EXESUFFIX): $(OBJ)/wad2map.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
wad2map$(EXESUFFIX): $(OBJ)/wad2map.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
md2tool$(EXESUFFIX): $(OBJ)/md2tool.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
md2tool$(EXESUFFIX): $(OBJ)/md2tool.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
generateicon$(EXESUFFIX): $(OBJ)/generateicon.$o $(OBJ)/kplib.$o
|
generateicon$(EXESUFFIX): $(OBJ)/generateicon.$o $(OBJ)/compat.$o $(OBJ)/pragmas.$o $(OBJ)/kplib.$o $(OBJ)/cache1d.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
cacheinfo$(EXESUFFIX): $(OBJ)/cacheinfo.$o $(OBJ)/compat.$o $(UTILADDOBJS)
|
cacheinfo$(EXESUFFIX): $(OBJ)/cacheinfo.$o $(OBJ)/compat.$o $(OBJ)/compat_tools.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
enumdisplay$(EXESUFFIX): src/misc/enumdisplay.c
|
enumdisplay$(EXESUFFIX): src/misc/enumdisplay.c
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -g -Os -o $@ $^ $(UTILLIBS) -I$(DXROOT)/include -lgdi32; then $(ONESTEP_OK); fi
|
if $(CC) -g -Os -o $@ $^ $(UTILLIBS) -I$(DXROOT)/include -lgdi32; then $(ONESTEP_OK); fi
|
||||||
mapdump$(EXESUFFIX): $(OBJ)/mapdump.$o
|
arttool$(EXESUFFIX): $(OBJ)/arttool.$o $(UTILADDOBJS)
|
||||||
|
$(ONESTEP_STATUS)
|
||||||
|
if $(CXX) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
|
givedepth$(EXESUFFIX): $(OBJ)/givedepth.$o $(UTILADDOBJS)
|
||||||
|
$(ONESTEP_STATUS)
|
||||||
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
|
mkpalette$(EXESUFFIX): $(OBJ)/mkpalette.$o $(UTILADDOBJS)
|
||||||
$(ONESTEP_STATUS)
|
$(ONESTEP_STATUS)
|
||||||
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
if $(CC) -o $@ $^ $(UTILLIBS); then $(ONESTEP_OK); fi
|
||||||
|
|
||||||
|
@ -236,18 +252,23 @@ $(OBJ)/%.$o: $(SRC)/%.nasm
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.c
|
$(OBJ)/%.$o: $(SRC)/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.m
|
$(OBJ)/%.$o: $(SRC)/%.m
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/%.cc
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.cpp
|
$(OBJ)/%.$o: $(SRC)/%.cpp
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/%.cxx
|
$(OBJ)/%.$o: $(SRC)/%.cxx
|
||||||
$(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/misc/%.rc
|
$(OBJ)/%.$o: $(SRC)/misc/%.rc
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
|
@ -255,11 +276,23 @@ $(OBJ)/%.$o: $(SRC)/misc/%.rc
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(SRC)/util/%.c
|
$(OBJ)/%.$o: $(SRC)/util/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/util/%.cc
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/util/%.cpp
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
|
$(OBJ)/%.$o: $(SRC)/util/%.cxx
|
||||||
|
$(COMPILE_STATUS)
|
||||||
|
if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/%.$o: $(RSRC)/%.c
|
$(OBJ)/%.$o: $(RSRC)/%.c
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c
|
$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c
|
||||||
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
|
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
|
||||||
|
|
|
@ -38,10 +38,15 @@ $(OBJ)/startgtk.editor.$o: $(SRC)/startgtk.editor.c $(INC)/baselayer.h $(INC)/bu
|
||||||
|
|
||||||
$(OBJ)/build_icon.$o: $(RSRC)/build_icon.c
|
$(OBJ)/build_icon.$o: $(RSRC)/build_icon.c
|
||||||
|
|
||||||
|
$(OBJ)/compat_tools.$o: $(SRC)/util/compat_tools.c
|
||||||
$(OBJ)/kextract.$o: $(SRC)/util/kextract.c $(INC)/compat.h
|
$(OBJ)/kextract.$o: $(SRC)/util/kextract.c $(INC)/compat.h
|
||||||
$(OBJ)/kgroup.$o: $(SRC)/util/kgroup.c $(INC)/compat.h
|
$(OBJ)/kgroup.$o: $(SRC)/util/kgroup.c $(INC)/compat.h
|
||||||
$(OBJ)/transpal.$o: $(SRC)/util/transpal.c $(INC)/compat.h $(INC)/pragmas.h
|
$(OBJ)/transpal.$o: $(SRC)/util/transpal.c $(INC)/compat.h $(INC)/pragmas.h
|
||||||
$(OBJ)/wad2art.$o: $(SRC)/util/wad2art.c $(INC)/compat.h $(INC)/pragmas.h
|
$(OBJ)/wad2art.$o: $(SRC)/util/wad2art.c $(INC)/compat.h $(INC)/pragmas.h
|
||||||
$(OBJ)/wad2map.$o: $(SRC)/util/wad2map.c $(INC)/compat.h $(INC)/pragmas.h
|
$(OBJ)/wad2map.$o: $(SRC)/util/wad2map.c $(INC)/compat.h $(INC)/pragmas.h
|
||||||
$(OBJ)/generateicon.$o: $(SRC)/util/generateicon.c
|
$(OBJ)/md2tool.$o: $(SRC)/util/md2tool.c $(INC)/compat.h $(INC)/build.h $(INC)/glbuild.h $(INC)/mdsprite.h
|
||||||
|
$(OBJ)/generateicon.$o: $(SRC)/util/generateicon.c $(INC)/kplib.h $(INC)/compat.h
|
||||||
$(OBJ)/cacheinfo.$o: $(SRC)/util/cacheinfo.c $(INC)/compat.h
|
$(OBJ)/cacheinfo.$o: $(SRC)/util/cacheinfo.c $(INC)/compat.h
|
||||||
|
$(OBJ)/arttool.$o: $(SRC)/util/arttool.cc
|
||||||
|
$(OBJ)/givedepth.$o: $(SRC)/util/givedepth.c
|
||||||
|
$(OBJ)/mkpalette.$o: $(SRC)/util/mkpalette.c
|
||||||
|
|
|
@ -231,8 +231,8 @@ ifneq (0,$(NEDMALLOC))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(PRETTY_OUTPUT),1)
|
ifeq ($(PRETTY_OUTPUT),1)
|
||||||
BUILD_STARTED = printf "\033[K\033[1;36mBuild started using \"$(CC) $(OURCFLAGS)\"\033[0m\n"
|
BUILD_STARTED = printf "\033[K\033[1;36mBuild started using \"$(CC) $(OURCFLAGS) $(OURCONLYFLAGS) $(OURCXXFLAGS)\"\033[0m\n"
|
||||||
BUILD_ECHOFLAGS = printf "\033[K\033[1;36mEnded compilation in this directory using \"$(CC) $(OURCFLAGS)\"\033[0m\n"
|
BUILD_ECHOFLAGS = printf "\033[K\033[1;36mEnded compilation in this directory using \"$(CC) $(OURCFLAGS) $(OURCONLYFLAGS) $(OURCXXFLAGS)\"\033[0m\n"
|
||||||
BUILD_FINISHED = printf "\033[K\033[1;36mBuild successful:\033[0m\n"
|
BUILD_FINISHED = printf "\033[K\033[1;36mBuild successful:\033[0m\n"
|
||||||
COMPILE_STATUS = printf "\033[K\033[0mBuilding object \033[1m$@\033[0m...\033[0m\r"
|
COMPILE_STATUS = printf "\033[K\033[0mBuilding object \033[1m$@\033[0m...\033[0m\r"
|
||||||
ONESTEP_STATUS = printf "\033[K\033[0mBuilding executable \033[1m$@\033[0m...\033[0m\r"
|
ONESTEP_STATUS = printf "\033[K\033[0mBuilding executable \033[1m$@\033[0m...\033[0m\r"
|
||||||
|
|
|
@ -121,7 +121,6 @@ void setmousepresscallback(void (*callback)(int32_t,int32_t));
|
||||||
void setjoypresscallback(void (*callback)(int32_t,int32_t));
|
void setjoypresscallback(void (*callback)(int32_t,int32_t));
|
||||||
const char *getkeyname(int32_t num);
|
const char *getkeyname(int32_t num);
|
||||||
const char *getjoyname(int32_t what, int32_t num); // what: 0=axis, 1=button, 2=hat
|
const char *getjoyname(int32_t what, int32_t num); // what: 0=axis, 1=button, 2=hat
|
||||||
char *Bstrtolower(char *str);
|
|
||||||
|
|
||||||
char bgetchar(void);
|
char bgetchar(void);
|
||||||
#define bkbhit() (keyasciififoplc != keyasciififoend)
|
#define bkbhit() (keyasciififoplc != keyasciififoend)
|
||||||
|
|
|
@ -592,6 +592,7 @@ int32_t Bcanonicalisefilename(char *filename, int32_t removefn);
|
||||||
char *Bgetsystemdrives(void);
|
char *Bgetsystemdrives(void);
|
||||||
int32_t Bfilelength(int32_t fd);
|
int32_t Bfilelength(int32_t fd);
|
||||||
char *Bstrtoken(char *s, const char *delim, char **ptrptr, int32_t chop);
|
char *Bstrtoken(char *s, const char *delim, char **ptrptr, int32_t chop);
|
||||||
|
char *Bstrtolower(char *str);
|
||||||
int32_t Bwildmatch (const char *i, const char *j);
|
int32_t Bwildmatch (const char *i, const char *j);
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
|
|
|
@ -139,26 +139,6 @@ struct glinfo_t glinfo =
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *Bstrtolower(char *str)
|
|
||||||
{
|
|
||||||
if (!str) return NULL;
|
|
||||||
|
|
||||||
{
|
|
||||||
int32_t i = 0, len = Bstrlen(str);
|
|
||||||
|
|
||||||
if (len <= 0) return str;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
*(str+i) = Btolower(*(str+i));
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
while (--len);
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t flushlogwindow = 1;
|
int32_t flushlogwindow = 1;
|
||||||
|
|
||||||
static void onvideomodechange(int32_t newmode) { UNREFERENCED_PARAMETER(newmode); }
|
static void onvideomodechange(int32_t newmode) { UNREFERENCED_PARAMETER(newmode); }
|
||||||
|
|
|
@ -736,6 +736,26 @@ char *Bstrtoken(char *s, const char *delim, char **ptrptr, int32_t chop)
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *Bstrtolower(char *str)
|
||||||
|
{
|
||||||
|
if (!str) return NULL;
|
||||||
|
|
||||||
|
{
|
||||||
|
int32_t i = 0, len = Bstrlen(str);
|
||||||
|
|
||||||
|
if (len <= 0) return str;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
*(str+i) = Btolower(*(str+i));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (--len);
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Brute-force case-insensitive, slash-insensitive, * and ? wildcard matcher
|
//Brute-force case-insensitive, slash-insensitive, * and ? wildcard matcher
|
||||||
//Given: string i and string j. string j can have wildcards
|
//Given: string i and string j. string j can have wildcards
|
||||||
|
@ -809,14 +829,12 @@ uint32_t Bgetsysmemsize(void)
|
||||||
if (aGlobalMemoryStatusEx(&memst))
|
if (aGlobalMemoryStatusEx(&memst))
|
||||||
siz = (uint32_t)min(UINT_MAX, memst.ullTotalPhys);
|
siz = (uint32_t)min(UINT_MAX, memst.ullTotalPhys);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Yeah, there's enough Win9x hatred here that a perfectly good workaround
|
// Yeah, there's enough Win9x hatred here that a perfectly good workaround
|
||||||
// has been replaced by an error message. Oh well, we don't support 9x anyway.
|
// has been replaced by an error message. Oh well, we don't support 9x anyway.
|
||||||
// initprintf("Bgetsysmemsize(): error determining system memory size!\n");
|
initprintf("Bgetsysmemsize(): error determining system memory size!\n");
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
FreeLibrary(lib);
|
FreeLibrary(lib);
|
||||||
}
|
}
|
||||||
|
|
930
polymer/eduke32/build/src/util/arttool.cc
Normal file
930
polymer/eduke32/build/src/util/arttool.cc
Normal file
|
@ -0,0 +1,930 @@
|
||||||
|
/**
|
||||||
|
* BUILD ART file editing tool
|
||||||
|
* @author Jonathon Fowler
|
||||||
|
* @license Artistic License 2.0 (http://www.perlfoundation.org/artistic_license_2_0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void usage()
|
||||||
|
{
|
||||||
|
cout << "BUILD ART file editing tool" << endl;
|
||||||
|
cout << "Copyright (C) 2008 Jonathon Fowler <jf@jonof.id.au>" << endl;
|
||||||
|
cout << "Released under the Artistic License 2.0" << endl;
|
||||||
|
cout << endl;
|
||||||
|
cout << " arttool create [options]" << endl;
|
||||||
|
cout << " -f <filenum> Selects which numbered ART file to create (default 0)" << endl;
|
||||||
|
cout << " -o <offset> Specifies the first tile in the file (default 0)" << endl;
|
||||||
|
cout << " -n <ntiles> The number of tiles for the art file (default 256)" << endl;
|
||||||
|
cout << " Creates an empty ART file named 'tilesXXX.art'" << endl;
|
||||||
|
cout << endl;
|
||||||
|
cout << " arttool addtile [options] <tilenum> <filename>" << endl;
|
||||||
|
cout << " -x <pixels> X-centre" << endl;
|
||||||
|
cout << " -y <pixels> Y-centre" << endl;
|
||||||
|
cout << " -ann <frames> Animation frame span" << endl;
|
||||||
|
cout << " -ant <type> Animation type (0=none, 1=oscillate, 2=forward, 3=reverse)" << endl;
|
||||||
|
cout << " -ans <speed> Animation speed" << endl;
|
||||||
|
cout << " Adds a tile to the 'tilesXXX.art' set from a TGA or PCX source" << endl;
|
||||||
|
cout << endl;
|
||||||
|
cout << " arttool rmtile <tilenum>" << endl;
|
||||||
|
cout << " Removes a tile from the 'tilesXXX.art' set" << endl;
|
||||||
|
cout << endl;
|
||||||
|
cout << " arttool tileprop [options] <tilenum>" << endl;
|
||||||
|
cout << " -x <pixels> X-centre" << endl;
|
||||||
|
cout << " -y <pixels> Y-centre" << endl;
|
||||||
|
cout << " -ann <frames> Animation frame span, may be -ve" << endl;
|
||||||
|
cout << " -ant <type> Animation type (0=none, 1=oscillate, 2=forward, 3=reverse)" << endl;
|
||||||
|
cout << " -ans <speed> Animation speed" << endl;
|
||||||
|
cout << " Changes tile properties" << endl;
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ARTFile {
|
||||||
|
private:
|
||||||
|
string filename_;
|
||||||
|
long localtilestart_;
|
||||||
|
long localtileend_;
|
||||||
|
short * tilesizx_;
|
||||||
|
short * tilesizy_;
|
||||||
|
long * picanm_;
|
||||||
|
|
||||||
|
// for removing or replacing tile data
|
||||||
|
int markprelength_, markskiplength_, markpostlength_;
|
||||||
|
char * insert_;
|
||||||
|
int insertlen_;
|
||||||
|
|
||||||
|
void writeShort(ofstream &ofs, short s)
|
||||||
|
{
|
||||||
|
char d[2] = { s&255, (s>>8)&255 };
|
||||||
|
ofs.write(d, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeLong(ofstream &ofs, long l)
|
||||||
|
{
|
||||||
|
char d[4] = { l&255, (l>>8)&255, (l>>16)&255, (l>>24)&255 };
|
||||||
|
ofs.write(d, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
short readShort(ifstream &ifs)
|
||||||
|
{
|
||||||
|
unsigned char d[2];
|
||||||
|
unsigned short s;
|
||||||
|
ifs.read((char *) d, 2);
|
||||||
|
s = (unsigned short)d[0];
|
||||||
|
s |= (unsigned short)d[1] << 8;
|
||||||
|
return (short)s;
|
||||||
|
}
|
||||||
|
|
||||||
|
long readLong(ifstream &ifs)
|
||||||
|
{
|
||||||
|
unsigned char d[4];
|
||||||
|
unsigned long l;
|
||||||
|
ifs.read((char *) d, 4);
|
||||||
|
l = (unsigned long)d[0];
|
||||||
|
l |= (unsigned long)d[1] << 8;
|
||||||
|
l |= (unsigned long)d[2] << 16;
|
||||||
|
l |= (unsigned long)d[3] << 24;
|
||||||
|
return (long)l;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispose()
|
||||||
|
{
|
||||||
|
if (tilesizx_) delete [] tilesizx_;
|
||||||
|
if (tilesizy_) delete [] tilesizy_;
|
||||||
|
if (picanm_) delete [] picanm_;
|
||||||
|
if (insert_) delete [] insert_;
|
||||||
|
|
||||||
|
insert_ = 0;
|
||||||
|
insertlen_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void load()
|
||||||
|
{
|
||||||
|
ifstream infile(filename_.c_str(), ios::in | ios::binary);
|
||||||
|
int i, ntiles;
|
||||||
|
|
||||||
|
if (infile.is_open()) {
|
||||||
|
do {
|
||||||
|
if (readLong(infile) != 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
readLong(infile); // skip the numtiles
|
||||||
|
dispose();
|
||||||
|
|
||||||
|
localtilestart_ = readLong(infile);
|
||||||
|
localtileend_ = readLong(infile);
|
||||||
|
ntiles = localtileend_ - localtilestart_ + 1;
|
||||||
|
|
||||||
|
tilesizx_ = new short[ntiles];
|
||||||
|
tilesizy_ = new short[ntiles];
|
||||||
|
picanm_ = new long[ntiles];
|
||||||
|
|
||||||
|
for (i = 0; i < ntiles; i++) {
|
||||||
|
tilesizx_[i] = readShort(infile);
|
||||||
|
}
|
||||||
|
for (i = 0; i < ntiles; i++) {
|
||||||
|
tilesizy_[i] = readShort(infile);
|
||||||
|
}
|
||||||
|
for (i = 0; i < ntiles; i++) {
|
||||||
|
picanm_[i] = readLong(infile);
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
infile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
ARTFile(string filename)
|
||||||
|
: filename_(filename), localtilestart_(0), localtileend_(-1),
|
||||||
|
tilesizx_(0), tilesizy_(0), picanm_(0),
|
||||||
|
markprelength_(0), markskiplength_(0), markpostlength_(0),
|
||||||
|
insert_(0), insertlen_(0)
|
||||||
|
{
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
|
||||||
|
~ARTFile()
|
||||||
|
{
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up for an empty file
|
||||||
|
* @param start the starting tile
|
||||||
|
* @param ntiles the number of tiles total
|
||||||
|
*/
|
||||||
|
void init(int start, int ntiles)
|
||||||
|
{
|
||||||
|
dispose();
|
||||||
|
|
||||||
|
localtilestart_ = start;
|
||||||
|
localtileend_ = start + ntiles - 1;
|
||||||
|
tilesizx_ = new short[ntiles];
|
||||||
|
tilesizy_ = new short[ntiles];
|
||||||
|
picanm_ = new long[ntiles];
|
||||||
|
|
||||||
|
memset(tilesizx_, 0, sizeof(short)*ntiles);
|
||||||
|
memset(tilesizy_, 0, sizeof(short)*ntiles);
|
||||||
|
memset(picanm_, 0, sizeof(long)*ntiles);
|
||||||
|
|
||||||
|
markprelength_ = 0;
|
||||||
|
markskiplength_ = 0;
|
||||||
|
markpostlength_ = 0;
|
||||||
|
insert_ = 0;
|
||||||
|
insertlen_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of tiles in the loaded file
|
||||||
|
* @return 0 means no file loaded
|
||||||
|
*/
|
||||||
|
int getNumTiles()
|
||||||
|
{
|
||||||
|
return (localtileend_ - localtilestart_ + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getFirstTile()
|
||||||
|
{
|
||||||
|
return localtilestart_;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getLastTile()
|
||||||
|
{
|
||||||
|
return localtileend_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeTile(int tile)
|
||||||
|
{
|
||||||
|
int i, end;
|
||||||
|
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
end = localtileend_ - tile;
|
||||||
|
tile -= localtilestart_;
|
||||||
|
|
||||||
|
markprelength_ = markpostlength_ = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < tile; i++) {
|
||||||
|
markprelength_ += tilesizx_[i] * tilesizy_[i];
|
||||||
|
}
|
||||||
|
markskiplength_ = tilesizx_[tile] * tilesizy_[tile];
|
||||||
|
for (i = tile + 1; i <= end; i++) {
|
||||||
|
markpostlength_ += tilesizx_[i] * tilesizy_[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
tilesizx_[tile] = tilesizy_[tile] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void replaceTile(int tile, char * replace, int replacelen)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeTile(tile);
|
||||||
|
|
||||||
|
insert_ = replace;
|
||||||
|
insertlen_ = replacelen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTileSize(int tile, int x, int y)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
tilesizx_[tile] = x;
|
||||||
|
tilesizy_[tile] = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setXOfs(int tile, int x)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
picanm_[tile] &= ~(255<<8);
|
||||||
|
picanm_[tile] |= ((long)((unsigned char)x) << 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setYOfs(int tile, int y)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
picanm_[tile] &= ~(255<<16);
|
||||||
|
picanm_[tile] |= ((long)((unsigned char)y) << 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAnimType(int tile, int type)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
picanm_[tile] &= ~(3<<6);
|
||||||
|
picanm_[tile] |= ((long)(type&3) << 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAnimFrames(int tile, int frames)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
picanm_[tile] &= ~(63);
|
||||||
|
picanm_[tile] |= ((long)(frames&63));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAnimSpeed(int tile, int speed)
|
||||||
|
{
|
||||||
|
if (tile < localtilestart_ || tile > localtileend_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tile -= localtilestart_;
|
||||||
|
picanm_[tile] &= ~(15<<24);
|
||||||
|
picanm_[tile] |= ((long)(speed&15) << 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
int write()
|
||||||
|
{
|
||||||
|
string tmpfilename(filename_ + ".arttooltmp");
|
||||||
|
ofstream outfile(tmpfilename.c_str(), ios::out | ios::trunc | ios::binary);
|
||||||
|
ifstream infile(filename_.c_str(), ios::in | ios::binary);
|
||||||
|
int i, left;
|
||||||
|
char blk[4096];
|
||||||
|
|
||||||
|
if (!infile.is_open() && (markprelength_ > 0 || markskiplength_ > 0 || markpostlength_ > 0)) {
|
||||||
|
return -1; // couldn't open the original file for copying
|
||||||
|
} else if (infile.is_open()) {
|
||||||
|
// skip to the start of the existing ART data
|
||||||
|
int ofs = 4+4+4+4+(2+2+4)*(localtileend_-localtilestart_+1);
|
||||||
|
infile.seekg(ofs, ios::cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
// write a header to the temporary file
|
||||||
|
writeLong(outfile, 1); // version
|
||||||
|
writeLong(outfile, 0); // numtiles
|
||||||
|
writeLong(outfile, localtilestart_);
|
||||||
|
writeLong(outfile, localtileend_);
|
||||||
|
for (int i = 0; i < localtileend_ - localtilestart_ + 1; i++) {
|
||||||
|
writeShort(outfile, tilesizx_[i]);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < localtileend_ - localtilestart_ + 1; i++) {
|
||||||
|
writeShort(outfile, tilesizy_[i]);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < localtileend_ - localtilestart_ + 1; i++) {
|
||||||
|
writeLong(outfile, picanm_[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy the existing leading tile data to be kept
|
||||||
|
left = markprelength_;
|
||||||
|
while (left > 0) {
|
||||||
|
i = left;
|
||||||
|
if (i > sizeof(blk)) {
|
||||||
|
i = sizeof(blk);
|
||||||
|
}
|
||||||
|
infile.read(blk, i);
|
||||||
|
outfile.write(blk, i);
|
||||||
|
left -= i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// insert the replacement data
|
||||||
|
if (insertlen_ > 0) {
|
||||||
|
outfile.write(insert_, insertlen_);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (markskiplength_ > 0) {
|
||||||
|
infile.seekg(markskiplength_, ios::cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy the existing trailing tile data to be kept
|
||||||
|
left = markpostlength_;
|
||||||
|
while (left > 0) {
|
||||||
|
i = left;
|
||||||
|
if (i > sizeof(blk)) {
|
||||||
|
i = sizeof(blk);
|
||||||
|
}
|
||||||
|
infile.read(blk, i);
|
||||||
|
outfile.write(blk, i);
|
||||||
|
left -= i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// close our files
|
||||||
|
if (infile.is_open()) {
|
||||||
|
infile.close();
|
||||||
|
}
|
||||||
|
outfile.close();
|
||||||
|
|
||||||
|
// replace it with the new one
|
||||||
|
unlink(filename_.c_str());
|
||||||
|
rename(tmpfilename.c_str(), filename_.c_str());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decodes a PCX file directly to BUILD's column-major pixel order
|
||||||
|
* @param data the raw file data
|
||||||
|
* @param datalen the length of the raw file data
|
||||||
|
* @param imgdata receives a pointer to the decoded image data
|
||||||
|
* @param imgdataw receives the decoded image width
|
||||||
|
* @param imgdatah receives the decoded image height
|
||||||
|
* @return 0 on success, 1 if the format is invalid
|
||||||
|
*/
|
||||||
|
int loadimage_pcx(unsigned char * data, int datalen, char ** imgdata, int& imgdataw, int& imgdatah)
|
||||||
|
{
|
||||||
|
if (data[0] != 10 ||
|
||||||
|
data[1] != 5 ||
|
||||||
|
data[2] != 1 ||
|
||||||
|
data[3] != 8 ||
|
||||||
|
data[64] != 0 ||
|
||||||
|
data[65] != 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bpl = data[66] + ((int)data[67] << 8);
|
||||||
|
int x, y, repeat, colour;
|
||||||
|
unsigned char *wptr, *rptr;
|
||||||
|
|
||||||
|
imgdataw = (data[8] + ((int)data[9] << 8)) - (data[4] + ((int)data[5] << 8)) + 1;
|
||||||
|
imgdatah = (data[10] + ((int)data[11] << 8)) - (data[6] + ((int)data[7] << 8)) + 1;
|
||||||
|
|
||||||
|
*imgdata = new char [imgdataw * imgdatah];
|
||||||
|
|
||||||
|
rptr = data + 128;
|
||||||
|
for (y = 0; y < imgdatah; y++) {
|
||||||
|
wptr = (unsigned char *) (*imgdata + y);
|
||||||
|
x = 0;
|
||||||
|
do {
|
||||||
|
repeat = *(rptr++);
|
||||||
|
if ((repeat & 192) == 192) {
|
||||||
|
colour = *(rptr++);
|
||||||
|
repeat = repeat & 63;
|
||||||
|
} else {
|
||||||
|
colour = repeat;
|
||||||
|
repeat = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; repeat > 0; repeat--, x++) {
|
||||||
|
if (x < imgdataw) {
|
||||||
|
*wptr = (unsigned char) colour;
|
||||||
|
wptr += imgdatah; // next column
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (x < bpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a tile from a picture file into memory
|
||||||
|
* @param filename the filename
|
||||||
|
* @param imgdata receives a pointer to the decoded image data
|
||||||
|
* @param imgdataw receives the decoded image width
|
||||||
|
* @param imgdatah receives the decoded image height
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
int loadimage(string filename, char ** imgdata, int& imgdataw, int& imgdatah)
|
||||||
|
{
|
||||||
|
ifstream infile(filename.c_str(), ios::in | ios::binary);
|
||||||
|
unsigned char * data = 0;
|
||||||
|
int datalen = 0, err = 0;
|
||||||
|
|
||||||
|
if (!infile.is_open()) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
infile.seekg(0, ios::end);
|
||||||
|
datalen = infile.tellg();
|
||||||
|
infile.seekg(0, ios::beg);
|
||||||
|
|
||||||
|
data = new unsigned char [datalen];
|
||||||
|
infile.read((char *) data, datalen);
|
||||||
|
infile.close();
|
||||||
|
|
||||||
|
err = loadimage_pcx(data, datalen, imgdata, imgdataw, imgdatah);
|
||||||
|
|
||||||
|
delete [] data;
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Operation {
|
||||||
|
protected:
|
||||||
|
string makefilename(int n)
|
||||||
|
{
|
||||||
|
string filename("tilesXXX.art");
|
||||||
|
filename[5] = '0' + (n / 100) % 10;
|
||||||
|
filename[6] = '0' + (n / 10) % 10;
|
||||||
|
filename[7] = '0' + (n / 1) % 10;
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef enum {
|
||||||
|
NO_ERROR = 0,
|
||||||
|
ERR_BAD_OPTION = 1,
|
||||||
|
ERR_BAD_VALUE = 2,
|
||||||
|
ERR_TOO_MANY_PARAMS = 3,
|
||||||
|
ERR_NO_ART_FILE = 4,
|
||||||
|
ERR_INVALID_IMAGE = 5,
|
||||||
|
} Result;
|
||||||
|
|
||||||
|
static char const * const translateResult(Result r)
|
||||||
|
{
|
||||||
|
switch (r) {
|
||||||
|
case NO_ERROR: return "no error";
|
||||||
|
case ERR_BAD_OPTION: return "bad option";
|
||||||
|
case ERR_BAD_VALUE: return "bad value";
|
||||||
|
case ERR_TOO_MANY_PARAMS: return "too many parameters given";
|
||||||
|
case ERR_NO_ART_FILE: return "no ART file was found";
|
||||||
|
case ERR_INVALID_IMAGE: return "a corrupt or unrecognised image was given";
|
||||||
|
default: return "unknown error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~Operation()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an option
|
||||||
|
* @param opt the option name
|
||||||
|
* @param value the option value
|
||||||
|
* @return a value from the Result enum
|
||||||
|
*/
|
||||||
|
virtual Result setOption(string opt, string value) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a parameter from the unnamed sequence
|
||||||
|
* @param number the parameter number
|
||||||
|
* @param value the parameter value
|
||||||
|
* @return a value from the Result enum
|
||||||
|
*/
|
||||||
|
virtual Result setParameter(int number, string value) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do the operation
|
||||||
|
* @return a value from the Result enum
|
||||||
|
*/
|
||||||
|
virtual Result perform() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CreateOp : public Operation {
|
||||||
|
private:
|
||||||
|
int filen_, offset_, ntiles_;
|
||||||
|
public:
|
||||||
|
CreateOp() : filen_(0), offset_(0), ntiles_(256) { }
|
||||||
|
|
||||||
|
virtual Result setOption(string opt, string value)
|
||||||
|
{
|
||||||
|
if (opt == "f") {
|
||||||
|
filen_ = atoi(value.c_str());
|
||||||
|
if (filen_ < 0 || filen_ > 999) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "o") {
|
||||||
|
offset_ = atoi(value.c_str());
|
||||||
|
if (offset_ < 0) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "n") {
|
||||||
|
ntiles_ = atoi(value.c_str());
|
||||||
|
if (ntiles_ < 1) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ERR_BAD_OPTION;
|
||||||
|
}
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result setParameter(int number, string value)
|
||||||
|
{
|
||||||
|
return ERR_TOO_MANY_PARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result perform()
|
||||||
|
{
|
||||||
|
ARTFile art(makefilename(filen_));
|
||||||
|
|
||||||
|
art.init(offset_, ntiles_);
|
||||||
|
art.write();
|
||||||
|
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class AddTileOp : public Operation {
|
||||||
|
private:
|
||||||
|
int xofs_, yofs_;
|
||||||
|
int animframes_, animtype_, animspeed_;
|
||||||
|
int tilenum_;
|
||||||
|
string filename_;
|
||||||
|
public:
|
||||||
|
AddTileOp()
|
||||||
|
: xofs_(0), yofs_(0),
|
||||||
|
animframes_(0), animtype_(0), animspeed_(0),
|
||||||
|
tilenum_(-1), filename_("")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual Result setOption(string opt, string value)
|
||||||
|
{
|
||||||
|
if (opt == "x") {
|
||||||
|
xofs_ = atoi(value.c_str());
|
||||||
|
} else if (opt == "y") {
|
||||||
|
yofs_ = atoi(value.c_str());
|
||||||
|
} else if (opt == "ann") {
|
||||||
|
animframes_ = atoi(value.c_str());
|
||||||
|
if (animframes_ < 0 || animframes_ > 63) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "ant") {
|
||||||
|
animtype_ = atoi(value.c_str());
|
||||||
|
if (animtype_ < 0 || animtype_ > 3) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "ans") {
|
||||||
|
animspeed_ = atoi(value.c_str());
|
||||||
|
if (animspeed_ < 0 || animspeed_ > 15) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ERR_BAD_OPTION;
|
||||||
|
}
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result setParameter(int number, string value)
|
||||||
|
{
|
||||||
|
switch (number) {
|
||||||
|
case 0:
|
||||||
|
tilenum_ = atoi(value.c_str());
|
||||||
|
return NO_ERROR;
|
||||||
|
case 1:
|
||||||
|
filename_ = value;
|
||||||
|
return NO_ERROR;
|
||||||
|
default:
|
||||||
|
return ERR_TOO_MANY_PARAMS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result perform()
|
||||||
|
{
|
||||||
|
int tilesperfile = 0, nextstart = 0;
|
||||||
|
int filenum = 0;
|
||||||
|
char * imgdata = 0;
|
||||||
|
int imgdatalen = 0, imgdataw = 0, imgdatah = 0;
|
||||||
|
|
||||||
|
// open the first art file to get the file size used by default
|
||||||
|
{
|
||||||
|
ARTFile art(makefilename(0));
|
||||||
|
tilesperfile = art.getNumTiles();
|
||||||
|
if (tilesperfile == 0) {
|
||||||
|
return ERR_NO_ART_FILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// load the tile image into memory
|
||||||
|
switch (loadimage(filename_, &imgdata, imgdataw, imgdatah)) {
|
||||||
|
case 0: break; // win
|
||||||
|
default: return ERR_INVALID_IMAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// open art files until we find one that encompasses the range we need
|
||||||
|
// and when we find it, make the change
|
||||||
|
for (filenum = 0; filenum < 1000; filenum++) {
|
||||||
|
ARTFile art(makefilename(filenum));
|
||||||
|
bool dirty = false, done = false;
|
||||||
|
|
||||||
|
if (art.getNumTiles() == 0) {
|
||||||
|
// no file exists, so we treat it as though it does
|
||||||
|
art.init(nextstart, tilesperfile);
|
||||||
|
dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tilenum_ >= art.getFirstTile() && tilenum_ <= art.getLastTile()) {
|
||||||
|
art.replaceTile(tilenum_, imgdata, imgdataw * imgdatah);
|
||||||
|
art.setTileSize(tilenum_, imgdataw, imgdatah);
|
||||||
|
art.setXOfs(tilenum_, xofs_);
|
||||||
|
art.setYOfs(tilenum_, yofs_);
|
||||||
|
art.setAnimFrames(tilenum_, animframes_);
|
||||||
|
art.setAnimSpeed(tilenum_, animspeed_);
|
||||||
|
art.setAnimType(tilenum_, animtype_);
|
||||||
|
done = true;
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
|
imgdata = 0; // ARTFile.replaceTile took ownership of the pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
nextstart += art.getNumTiles();
|
||||||
|
|
||||||
|
if (dirty) {
|
||||||
|
art.write();
|
||||||
|
}
|
||||||
|
if (done) {
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (imgdata) {
|
||||||
|
delete [] imgdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_NO_ART_FILE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class RmTileOp : public Operation {
|
||||||
|
private:
|
||||||
|
int tilenum_;
|
||||||
|
public:
|
||||||
|
RmTileOp() : tilenum_(-1) { }
|
||||||
|
|
||||||
|
virtual Result setOption(string opt, string value)
|
||||||
|
{
|
||||||
|
return ERR_BAD_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result setParameter(int number, string value)
|
||||||
|
{
|
||||||
|
switch (number) {
|
||||||
|
case 0:
|
||||||
|
tilenum_ = atoi(value.c_str());
|
||||||
|
return NO_ERROR;
|
||||||
|
default:
|
||||||
|
return ERR_TOO_MANY_PARAMS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result perform()
|
||||||
|
{
|
||||||
|
int filenum = 0;
|
||||||
|
|
||||||
|
// open art files until we find one that encompasses the range we need
|
||||||
|
// and when we find it, remove the tile
|
||||||
|
for (filenum = 0; filenum < 1000; filenum++) {
|
||||||
|
ARTFile art(makefilename(filenum));
|
||||||
|
|
||||||
|
if (art.getNumTiles() == 0) {
|
||||||
|
// no file exists, so give up
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tilenum_ >= art.getFirstTile() && tilenum_ <= art.getLastTile()) {
|
||||||
|
art.removeTile(tilenum_);
|
||||||
|
art.write();
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_NO_ART_FILE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TilePropOp : public Operation {
|
||||||
|
private:
|
||||||
|
int xofs_, yofs_;
|
||||||
|
int animframes_, animtype_, animspeed_;
|
||||||
|
int tilenum_;
|
||||||
|
|
||||||
|
int settings_;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SET_XOFS = 1,
|
||||||
|
SET_YOFS = 2,
|
||||||
|
SET_ANIMFRAMES = 4,
|
||||||
|
SET_ANIMTYPE = 8,
|
||||||
|
SET_ANIMSPEED = 16,
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
TilePropOp()
|
||||||
|
: xofs_(0), yofs_(0),
|
||||||
|
animframes_(0), animtype_(0), animspeed_(0),
|
||||||
|
tilenum_(-1), settings_(0)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual Result setOption(string opt, string value)
|
||||||
|
{
|
||||||
|
if (opt == "x") {
|
||||||
|
xofs_ = atoi(value.c_str());
|
||||||
|
settings_ |= SET_XOFS;
|
||||||
|
} else if (opt == "y") {
|
||||||
|
yofs_ = atoi(value.c_str());
|
||||||
|
settings_ |= SET_YOFS;
|
||||||
|
} else if (opt == "ann") {
|
||||||
|
animframes_ = atoi(value.c_str());
|
||||||
|
settings_ |= SET_ANIMFRAMES;
|
||||||
|
if (animframes_ < 0 || animframes_ > 63) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "ant") {
|
||||||
|
animtype_ = atoi(value.c_str());
|
||||||
|
settings_ |= SET_ANIMTYPE;
|
||||||
|
if (animtype_ < 0 || animtype_ > 3) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else if (opt == "ans") {
|
||||||
|
animspeed_ = atoi(value.c_str());
|
||||||
|
settings_ |= SET_ANIMSPEED;
|
||||||
|
if (animspeed_ < 0 || animspeed_ > 15) {
|
||||||
|
return ERR_BAD_VALUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ERR_BAD_OPTION;
|
||||||
|
}
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result setParameter(int number, string value)
|
||||||
|
{
|
||||||
|
switch (number) {
|
||||||
|
case 0:
|
||||||
|
tilenum_ = atoi(value.c_str());
|
||||||
|
return NO_ERROR;
|
||||||
|
default:
|
||||||
|
return ERR_TOO_MANY_PARAMS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual Result perform()
|
||||||
|
{
|
||||||
|
int filenum = 0;
|
||||||
|
|
||||||
|
if (settings_ == 0) {
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// open art files until we find one that encompasses the range we need
|
||||||
|
// and when we find it, make the change
|
||||||
|
for (filenum = 0; filenum < 1000; filenum++) {
|
||||||
|
ARTFile art(makefilename(filenum));
|
||||||
|
|
||||||
|
if (art.getNumTiles() == 0) {
|
||||||
|
// no file exists, so give up
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tilenum_ >= art.getFirstTile() && tilenum_ <= art.getLastTile()) {
|
||||||
|
if (settings_ & SET_XOFS) {
|
||||||
|
art.setXOfs(tilenum_, xofs_);
|
||||||
|
}
|
||||||
|
if (settings_ & SET_YOFS) {
|
||||||
|
art.setYOfs(tilenum_, yofs_);
|
||||||
|
}
|
||||||
|
if (settings_ & SET_ANIMFRAMES) {
|
||||||
|
art.setAnimFrames(tilenum_, animframes_);
|
||||||
|
}
|
||||||
|
if (settings_ & SET_ANIMSPEED) {
|
||||||
|
art.setAnimSpeed(tilenum_, animspeed_);
|
||||||
|
}
|
||||||
|
if (settings_ & SET_ANIMTYPE) {
|
||||||
|
art.setAnimType(tilenum_, animtype_);
|
||||||
|
}
|
||||||
|
art.write();
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_NO_ART_FILE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char ** argv)
|
||||||
|
{
|
||||||
|
int showusage = 0;
|
||||||
|
Operation * oper = 0;
|
||||||
|
Operation::Result err;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
showusage = 1;
|
||||||
|
} else {
|
||||||
|
string opt(argv[1]);
|
||||||
|
string value;
|
||||||
|
|
||||||
|
// create the option handler object according to the first param
|
||||||
|
if (opt == "create") {
|
||||||
|
oper = new CreateOp;
|
||||||
|
} else if (opt == "addtile") {
|
||||||
|
oper = new AddTileOp;
|
||||||
|
} else if (opt == "rmtile") {
|
||||||
|
oper = new RmTileOp;
|
||||||
|
} else if (opt == "tileprop") {
|
||||||
|
oper = new TilePropOp;
|
||||||
|
} else {
|
||||||
|
showusage = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply the command line options given
|
||||||
|
if (oper) {
|
||||||
|
int unnamedParm = 0;
|
||||||
|
for (int i = 2; i < argc && !showusage; i++) {
|
||||||
|
if (argv[i][0] == '-') {
|
||||||
|
opt = string(argv[i]).substr(1);
|
||||||
|
if (i+1 >= argc) {
|
||||||
|
showusage = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
value = string(argv[i+1]);
|
||||||
|
i++;
|
||||||
|
|
||||||
|
switch (err = oper->setOption(opt, value)) {
|
||||||
|
case Operation::NO_ERROR: break;
|
||||||
|
default:
|
||||||
|
cerr << "error: " << Operation::translateResult(err) << endl;
|
||||||
|
showusage = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
value = string(argv[i]);
|
||||||
|
switch (oper->setParameter(unnamedParm, value)) {
|
||||||
|
case Operation::NO_ERROR: break;
|
||||||
|
default:
|
||||||
|
cerr << "error: " << Operation::translateResult(err) << endl;
|
||||||
|
showusage = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
unnamedParm++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (showusage) {
|
||||||
|
usage();
|
||||||
|
if (oper) delete oper;
|
||||||
|
return (showusage - 1);
|
||||||
|
} else if (oper) {
|
||||||
|
err = oper->perform();
|
||||||
|
delete oper;
|
||||||
|
|
||||||
|
switch (err) {
|
||||||
|
case Operation::NO_ERROR: return 0;
|
||||||
|
default:
|
||||||
|
cerr << "error: " << Operation::translateResult(err) << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -22,7 +22,7 @@ char source[MAXPATH], output[MAXPATH], bytesize;
|
||||||
int PathAddExt(char *path, char *ext);
|
int PathAddExt(char *path, char *ext);
|
||||||
|
|
||||||
|
|
||||||
void main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
printf("BIN2C - Binary to C data converter\n"
|
printf("BIN2C - Binary to C data converter\n"
|
||||||
"Copyright (c) 1999 Jonathon Fowler\n\n");
|
"Copyright (c) 1999 Jonathon Fowler\n\n");
|
||||||
|
@ -133,6 +133,8 @@ void main(int argc, char *argv[])
|
||||||
|
|
||||||
fclose(out);
|
fclose(out);
|
||||||
fclose(in);
|
fclose(in);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
16
polymer/eduke32/build/src/util/compat_tools.c
Normal file
16
polymer/eduke32/build/src/util/compat_tools.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// Compatibility declarations for the tools to avoid linking to the entire engine.
|
||||||
|
|
||||||
|
#include "compat.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// initprintf() -- prints a string
|
||||||
|
//
|
||||||
|
void initprintf(const char *f, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
char buf[2048];
|
||||||
|
|
||||||
|
va_start(va, f);
|
||||||
|
Bvsnprintf(buf, sizeof(buf), f, va);
|
||||||
|
va_end(va);
|
||||||
|
}
|
103
polymer/eduke32/build/src/util/givedepth.c
Normal file
103
polymer/eduke32/build/src/util/givedepth.c
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#define MAXNUMTILES 256
|
||||||
|
|
||||||
|
int artversion, numtiles;
|
||||||
|
int localtilestart, localtileend;
|
||||||
|
short tilesizx[MAXNUMTILES], tilesizy[MAXNUMTILES];
|
||||||
|
int picanm[MAXNUMTILES];
|
||||||
|
|
||||||
|
FILE * openartfile(char *fn)
|
||||||
|
{
|
||||||
|
FILE *fh;
|
||||||
|
|
||||||
|
fh = fopen(fn,"rb");
|
||||||
|
if (!fh) return NULL;
|
||||||
|
|
||||||
|
fread(&artversion,4,1,fh); if (artversion != 1) { puts("Bad art version"); goto fail; }
|
||||||
|
fread(&numtiles,4,1,fh);
|
||||||
|
fread(&localtilestart,4,1,fh);
|
||||||
|
fread(&localtileend,4,1,fh);
|
||||||
|
numtiles = localtileend-localtilestart+1;
|
||||||
|
if (numtiles > MAXNUMTILES) { puts("Too many tiles"); goto fail; }
|
||||||
|
fread(tilesizx,2,numtiles,fh);
|
||||||
|
fread(tilesizy,2,numtiles,fh);
|
||||||
|
fread(picanm,4,numtiles,fh);
|
||||||
|
|
||||||
|
return fh;
|
||||||
|
fail:
|
||||||
|
fclose(fh);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char *palfile = "palette.dat", *voxfile = "output.vox";
|
||||||
|
int tilenum;
|
||||||
|
int depth;
|
||||||
|
FILE *artfh, *voxfh, *palfh;
|
||||||
|
int tilesz;
|
||||||
|
unsigned char palette[768];
|
||||||
|
unsigned char *tiledata;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (argc < 4) {
|
||||||
|
puts("givedepth <artfile.art> <tilenum> <depth> [palette.dat] [output.vox]");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tilenum = atoi(argv[2]);
|
||||||
|
depth = atoi(argv[3]);
|
||||||
|
if (argc >= 4) palfile = argv[4];
|
||||||
|
if (argc >= 5) voxfile = argv[5];
|
||||||
|
|
||||||
|
palfh = fopen(palfile,"rb");
|
||||||
|
if (!palfh) {
|
||||||
|
puts("Failure opening palette file");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fread(palette,768,1,palfh);
|
||||||
|
fclose(palfh);
|
||||||
|
|
||||||
|
artfh = openartfile(argv[1]);
|
||||||
|
if (!artfh) {
|
||||||
|
puts("Failure opening art file");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tilenum < 0 || tilenum > numtiles) {
|
||||||
|
puts("Tilenum out of range in art file");
|
||||||
|
fclose(artfh);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for (i=0; i<tilenum; i++) fseek(artfh, tilesizx[i] * tilesizy[i], SEEK_CUR);
|
||||||
|
|
||||||
|
tilesz = tilesizx[tilenum]*tilesizy[tilenum];
|
||||||
|
tiledata = (unsigned char *)malloc(tilesz);
|
||||||
|
if (!tiledata) {
|
||||||
|
puts("Could not allocate memory for tile");
|
||||||
|
fclose(artfh);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread(tiledata, tilesz, 1, artfh);
|
||||||
|
fclose(artfh);
|
||||||
|
|
||||||
|
voxfh = fopen(voxfile,"wb");
|
||||||
|
if (!voxfh) {
|
||||||
|
puts("Could not create output file");
|
||||||
|
free(tiledata);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fwrite(&depth,4,1,voxfh);
|
||||||
|
fwrite(&tilesizx[tilenum],4,1,voxfh);
|
||||||
|
fwrite(&tilesizy[tilenum],4,1,voxfh);
|
||||||
|
for (i=0; i<depth; i++) {
|
||||||
|
fwrite(tiledata,tilesz,1,voxfh);
|
||||||
|
}
|
||||||
|
fwrite(palette,768,1,voxfh);
|
||||||
|
|
||||||
|
free(tiledata);
|
||||||
|
}
|
253
polymer/eduke32/build/src/util/mkpalette.c
Normal file
253
polymer/eduke32/build/src/util/mkpalette.c
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
struct hsv {
|
||||||
|
float h, s, v;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct rgb {
|
||||||
|
float r, g, b;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct gradient {
|
||||||
|
int start, len, chompends;
|
||||||
|
struct hsv startcolour, endcolour;
|
||||||
|
};
|
||||||
|
|
||||||
|
float min2(float x, float y);
|
||||||
|
float max2(float x, float y);
|
||||||
|
void convertHSVtoRGB(struct hsv *hsv, struct rgb *rgb);
|
||||||
|
int showusage(void);
|
||||||
|
int readscript(char *fn);
|
||||||
|
|
||||||
|
struct gradient ramps[256];
|
||||||
|
int nramps = 0;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct hsv palette[256], lerpstep, lerped;
|
||||||
|
struct rgb rgbidx;
|
||||||
|
unsigned char rgbout[3];
|
||||||
|
int idx, step, rampnum;
|
||||||
|
FILE* fh;
|
||||||
|
char *outfile = "palette.dat";
|
||||||
|
|
||||||
|
memset(palette,0,sizeof(palette));
|
||||||
|
|
||||||
|
if (argc < 2) return showusage();
|
||||||
|
if (readscript(argv[1])) return 1;
|
||||||
|
if (argc >= 3) outfile = argv[2];
|
||||||
|
|
||||||
|
for (rampnum = 0; rampnum < nramps; rampnum++) {
|
||||||
|
idx = ramps[rampnum].start;
|
||||||
|
step = ramps[rampnum].len;
|
||||||
|
if (ramps[rampnum].chompends & 1) step++;
|
||||||
|
if (ramps[rampnum].chompends & 2) step++;
|
||||||
|
lerpstep.h = (ramps[rampnum].endcolour.h - ramps[rampnum].startcolour.h) / (float)step;
|
||||||
|
lerpstep.s = (ramps[rampnum].endcolour.s - ramps[rampnum].startcolour.s) / (float)step;
|
||||||
|
lerpstep.v = (ramps[rampnum].endcolour.v - ramps[rampnum].startcolour.v) / (float)step;
|
||||||
|
lerped = ramps[rampnum].startcolour;
|
||||||
|
if (ramps[rampnum].chompends & 1) {
|
||||||
|
step--;
|
||||||
|
lerped.h += lerpstep.h;
|
||||||
|
lerped.s += lerpstep.s;
|
||||||
|
lerped.v += lerpstep.v;
|
||||||
|
}
|
||||||
|
if (ramps[rampnum].chompends & 2) step--;
|
||||||
|
|
||||||
|
for (; step > 0; step--,idx++) {
|
||||||
|
palette[idx].h = lerped.h;
|
||||||
|
palette[idx].s = lerped.s;
|
||||||
|
palette[idx].v = lerped.v;
|
||||||
|
lerped.h += lerpstep.h;
|
||||||
|
lerped.s += lerpstep.s;
|
||||||
|
lerped.v += lerpstep.v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fh = fopen(outfile,"wb");
|
||||||
|
if (!fh) return 1;
|
||||||
|
|
||||||
|
for (idx=0; idx<256; idx++) {
|
||||||
|
convertHSVtoRGB(&palette[idx], &rgbidx);
|
||||||
|
//printf("Index %d: r=%g g=%g b=%g\n",idx,rgbidx.r,rgbidx.g,rgbidx.b);
|
||||||
|
rgbout[0] = (unsigned char)min2(255,max2(0,(int)(rgbidx.r * 255.0))) >> 2;
|
||||||
|
rgbout[1] = (unsigned char)min2(255,max2(0,(int)(rgbidx.g * 255.0))) >> 2;
|
||||||
|
rgbout[2] = (unsigned char)min2(255,max2(0,(int)(rgbidx.b * 255.0))) >> 2;
|
||||||
|
fwrite(rgbout,3,1,fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fh);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float min2(float x, float y)
|
||||||
|
{
|
||||||
|
return x < y ? x : y;
|
||||||
|
}
|
||||||
|
|
||||||
|
float max2(float x, float y)
|
||||||
|
{
|
||||||
|
return x > y ? x : y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://www.cs.rit.edu/~ncs/color/t_convert.html
|
||||||
|
void convertHSVtoRGB(struct hsv *hsv, struct rgb *rgb)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
float f, p, q, t;
|
||||||
|
if( hsv->s == 0 ) {
|
||||||
|
// achromatic (grey)
|
||||||
|
rgb->r = rgb->g = rgb->b = hsv->v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
hsv->h /= 60; // sector 0 to 5
|
||||||
|
i = floor( hsv->h );
|
||||||
|
f = hsv->h - i; // factorial part of h
|
||||||
|
p = hsv->v * ( 1 - hsv->s );
|
||||||
|
q = hsv->v * ( 1 - hsv->s * f );
|
||||||
|
t = hsv->v * ( 1 - hsv->s * ( 1 - f ) );
|
||||||
|
switch( i ) {
|
||||||
|
case 0:
|
||||||
|
rgb->r = hsv->v;
|
||||||
|
rgb->g = t;
|
||||||
|
rgb->b = p;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
rgb->r = q;
|
||||||
|
rgb->g = hsv->v;
|
||||||
|
rgb->b = p;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
rgb->r = p;
|
||||||
|
rgb->g = hsv->v;
|
||||||
|
rgb->b = t;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
rgb->r = p;
|
||||||
|
rgb->g = q;
|
||||||
|
rgb->b = hsv->v;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
rgb->r = t;
|
||||||
|
rgb->g = p;
|
||||||
|
rgb->b = hsv->v;
|
||||||
|
break;
|
||||||
|
default: // case 5:
|
||||||
|
rgb->r = hsv->v;
|
||||||
|
rgb->g = p;
|
||||||
|
rgb->b = q;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int showusage(void)
|
||||||
|
{
|
||||||
|
puts("mkpalette <palettescript.txt> [outputfile]");
|
||||||
|
puts("If outputfile is not given, palette.dat is assumed");
|
||||||
|
|
||||||
|
puts("\nPalette script format:\n"
|
||||||
|
" A line beginning with # is a comment, otherwise each line contains none\n"
|
||||||
|
"values separated by spaces defining the gradient:\n"
|
||||||
|
"\n"
|
||||||
|
" startindex rangesize skip starthue startsat startval endhue endsat endval\n"
|
||||||
|
"\n"
|
||||||
|
"Any text after the end of a gradient description is ignored, so may use it\n"
|
||||||
|
"to describe the colour.\n"
|
||||||
|
"\n"
|
||||||
|
"* 'startindex' specifies the first palette index to write to\n"
|
||||||
|
"* 'rangesize' specifies the length of the gradient\n"
|
||||||
|
"* 'skip' specifies whether the first and/or last elements of the range should\n"
|
||||||
|
" be ignored and with 'rangesize' elements interpolated between. This is so\n"
|
||||||
|
" you can have a gradient starting at (potentially) pure black and ending at\n"
|
||||||
|
" (potentially) pure white but without wasting a palette index on those colours\n"
|
||||||
|
" if they already exist, eg. in a grey ramp.\n"
|
||||||
|
" Legal values are 0 (no skipping), 1 (skip start), 2 (skip end),\n"
|
||||||
|
" or 3 (skip start and end).\n"
|
||||||
|
"* 'starthue', 'startsat', 'startval' are integers specifying the beginning\n"
|
||||||
|
" colour in Hue-Saturation-Value format.\n"
|
||||||
|
" 'starthue' should be in the range 0-360 indicating a degrees value\n"
|
||||||
|
" 'startsat' should be in the range 0-100 indicating a saturation percentage\n"
|
||||||
|
" 'startval' should be in the range 0-100 indicating an intensity percentage\n"
|
||||||
|
"* 'endhue', 'endsat', 'endval' specify the ending colour."
|
||||||
|
);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int readscript(char *fn)
|
||||||
|
{
|
||||||
|
int start, len, skip, shue, ssat, sval, ehue, esat, eval;
|
||||||
|
FILE *fp;
|
||||||
|
char line[1024];
|
||||||
|
|
||||||
|
fp = fopen(fn,"rt");
|
||||||
|
if (!fp) {
|
||||||
|
puts("Error opening palette script");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fgets(line,sizeof(line),fp)) {
|
||||||
|
{
|
||||||
|
// test for comment
|
||||||
|
char *p = line;
|
||||||
|
while (*p && (*p == ' ' || *p == '\t')) p++;
|
||||||
|
if (*p == '#') continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line, "%d %d %d %d %d %d %d %d %d", &start,&len,&skip,&shue,&ssat,&sval,&ehue,&esat,&eval) < 9)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (start < 0 || start > 255) {
|
||||||
|
printf("start index of %d is out of range 0-255\n", start);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (len < 1 || len > 255) {
|
||||||
|
printf("length %d is out of range 1-255\n", len);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (skip != (skip&3)) {
|
||||||
|
printf("skip value of %d is out of range 0-3\n", skip);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shue < 0 || shue > 360) {
|
||||||
|
printf("start hue %d is out of range 0-360\n", shue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ssat < 0 || ssat > 100) {
|
||||||
|
printf("start saturation %d is out of range 0-100\n", ssat);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sval < 0 || sval > 100) {
|
||||||
|
printf("start value %d is out of range 0-100\n", sval);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ehue < 0 || ehue > 360) {
|
||||||
|
printf("end hue %d is out of range 0-360\n", shue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (esat < 0 || esat > 100) {
|
||||||
|
printf("end saturation %d is out of range 0-100\n", ssat);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (eval < 0 || eval > 100) {
|
||||||
|
printf("end value %d is out of range 0-100\n", sval);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ramps[nramps].start = start;
|
||||||
|
ramps[nramps].len = len;
|
||||||
|
ramps[nramps].chompends = skip;
|
||||||
|
ramps[nramps].startcolour.h = (float)shue;
|
||||||
|
ramps[nramps].startcolour.s = (float)ssat / 100.0;
|
||||||
|
ramps[nramps].startcolour.v = (float)sval / 100.0;
|
||||||
|
ramps[nramps].endcolour.h = (float)ehue;
|
||||||
|
ramps[nramps].endcolour.s = (float)esat / 100.0;
|
||||||
|
ramps[nramps].endcolour.v = (float)eval / 100.0;
|
||||||
|
nramps++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int font, width, height, numchars;
|
int font, width, height, numchars;
|
||||||
struct REGPACK r;
|
struct REGPACK r;
|
||||||
|
@ -136,4 +136,5 @@ void main(void)
|
||||||
}
|
}
|
||||||
} while (font != 6);
|
} while (font != 6);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ INC=include
|
||||||
CFLAGS=$(BASECFLAGS) $(BUILDCFLAGS) $(F_NO_STACK_PROTECTOR)
|
CFLAGS=$(BASECFLAGS) $(BUILDCFLAGS) $(F_NO_STACK_PROTECTOR)
|
||||||
# for BUILD_ECHOFLAGS:
|
# for BUILD_ECHOFLAGS:
|
||||||
OURCFLAGS=$(CFLAGS)
|
OURCFLAGS=$(CFLAGS)
|
||||||
|
OURCONLYFLAGS=$(BASECONLYFLAGS)
|
||||||
|
OURCXXFLAGS=$(BASECXXFLAGS)
|
||||||
CPPFLAGS=-I$(INC) -I$(SRC) -I../../$(EROOT)/include
|
CPPFLAGS=-I$(INC) -I$(SRC) -I../../$(EROOT)/include
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +40,7 @@ $(OBJNAME): $(OBJECTS)
|
||||||
$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c $(INC)/enet/*.h
|
$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c $(INC)/enet/*.h
|
||||||
-mkdir -p $(OBJ)
|
-mkdir -p $(OBJ)
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CPPFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
ifeq ($(PRETTY_OUTPUT),1)
|
ifeq ($(PRETTY_OUTPUT),1)
|
||||||
.SILENT:
|
.SILENT:
|
||||||
|
|
|
@ -10,12 +10,15 @@ INC=include
|
||||||
ifneq ($(DXROOT_OVERRIDE),)
|
ifneq ($(DXROOT_OVERRIDE),)
|
||||||
DXROOT ?= $(DXROOT_OVERRIDE)
|
DXROOT ?= $(DXROOT_OVERRIDE)
|
||||||
else
|
else
|
||||||
DXROOT ?= c:/sdks/directx/dx8
|
DXROOT=../../../sdk/dx
|
||||||
|
#DXROOT ?= c:/sdks/directx/dx8
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS=$(BASECFLAGS) $(BUILDCFLAGS) $(F_NO_STACK_PROTECTOR)
|
CFLAGS=$(BASECFLAGS) $(BUILDCFLAGS) $(F_NO_STACK_PROTECTOR)
|
||||||
# for BUILD_ECHOFLAGS:
|
# for BUILD_ECHOFLAGS:
|
||||||
OURCFLAGS=$(CFLAGS)
|
OURCFLAGS=$(CFLAGS)
|
||||||
|
OURCONLYFLAGS=$(BASECONLYFLAGS)
|
||||||
|
OURCXXFLAGS=$(BASECXXFLAGS)
|
||||||
CPPFLAGS=-I$(INC) -I$(SRC) -DHAVE_VORBIS
|
CPPFLAGS=-I$(INC) -I$(SRC) -DHAVE_VORBIS
|
||||||
|
|
||||||
ifeq ($(PLATFORM),DARWIN)
|
ifeq ($(PLATFORM),DARWIN)
|
||||||
|
@ -59,7 +62,7 @@ $(OBJNAME): $(OBJECTS)
|
||||||
$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c
|
$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c
|
||||||
-mkdir -p $(OBJ)
|
-mkdir -p $(OBJ)
|
||||||
$(COMPILE_STATUS)
|
$(COMPILE_STATUS)
|
||||||
if $(CC) $(CPPFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
if $(CC) $(CPPFLAGS) $(OURCONLYFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||||
|
|
||||||
ifeq ($(PRETTY_OUTPUT),1)
|
ifeq ($(PRETTY_OUTPUT),1)
|
||||||
.SILENT:
|
.SILENT:
|
||||||
|
|
Loading…
Reference in a new issue