diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dec09db --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*.bsp +*.dat +*.def +*.lmp +*.lno +*.mdl +*.pal +*.prt +*.lux +*.lit +*.wad +Tools/base_entities.def +conhistory.txt +fteqcc +fteqw +imgtool +installed.lst +iqmtool +pal2colormap +pal2pal +qbsp +qfiles +qlight +qvis +radiant +tga2lmp +tga2pal diff --git a/Makefile b/Makefile index 7f8c4ad..144f51c 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,32 @@ GAME=id1 ENGINE_CLBUILD=m-dbg EDITOR=radiant ENGINE_URL=https://www.github.com/fte-team/fteqw -NAME=`./Tools/get-name.sh $(GAME)` NUCLIDE_DIR=`pwd` QCC_DIR=$(NUCLIDE_DIR) BUILD_DIR=$(NUCLIDE_DIR)/build +NAME=idtech2-$(GAME) + +RADIANT_GAME="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/games/$(GAME).game" +RADIANT_XLINK="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/game/game.xlink" +RADIANT_SYNAPSE="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/game/synapse.config" +RADIANT_PROJECT="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/scripts/default_project.proj" +RADIANT_TEXTURES="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/textures" +ENTITY_DEF="$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/scripts/entities.def" + +EDITOR_QBSP="$(ARGSTR)TEMPLATEenginepath/qbsp" +EDITOR_QVIS="$(ARGSTR)TEMPLATEenginepath/qvis" +EDITOR_QRAD="$(ARGSTR)TEMPLATEenginepath/qrad" +EDITOR_ENGINEPATH="$(ARGSTR)TEMPLATEenginepath" +EDITOR_BASEPATH="$(ARGSTR)TEMPLATEbasedir" +EDITOR_HOMEPATH="$(ARGSTR)TEMPLATEuserhomepath" + +define CMDSTR +# +endef + +define ARGSTR +\$ +endef help: @printf "Available targets:\n" @@ -43,6 +65,9 @@ $(GAME)/maps/%.bsp: qbsp qlight qvis models: iqmtool palette ./Tools/build_models.sh $(GAME) +edef: + Tools/make_mapdef.sh $(GAME) + gfx: imgtool palette cd $(GAME)/gfxsrc/ && ls | grep -v palette\.lmp | grep \.xcf | xargs ../../imgtool --rgb8 --ext png cd $(GAME)/gfxsrc/ && ls | grep -v palette\.png | grep \.png | xargs mogrify -type TrueColor -compress None -flip -format tga @@ -79,8 +104,6 @@ palette: pal2colormap pal2pal tga2pal mv $(GAME)/gfxsrc/colormap.lmp $(GAME)/gfx/colormap.lmp mv $(GAME)/gfxsrc/palette.pal $(GAME)/gfx/palette.pal -mkdir -p $(GAME)/gfxsrc - -mkdir -p $(GAME)/textures # needed by gtkradiant - cp $(GAME)/gfx/palette.lmp $(GAME)/textures/palette.lmp rm $(GAME)/gfxsrc/palette.tga # fteqw repo @@ -118,3 +141,70 @@ radiant: update if [ ! -d ThirdParty/gtkradiant ];then git clone https://github.com/TTimo/gtkradiant ThirdParty/gtkradiant;fi cd ThirdParty/gtkradiant && scons Tools/make_launcher.sh ./ThirdParty/gtkradiant/install/ ./radiant.bin radiant + +radiant-game: radiant edef + echo "" > "$(RADIANT_GAME)" + echo "> "$(RADIANT_GAME)" + echo " name=\"$(NAME)\"" >> "$(RADIANT_GAME)" + echo " enginepath_linux=\"$(NUCLIDE_DIR)\"" >> "$(RADIANT_GAME)" + echo " gametools_linux=\"$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/game\"" >> "$(RADIANT_GAME)" + echo " prefix=\".$(GAME)\"" >> "$(RADIANT_GAME)" + echo " basegame=\"$(GAME)\"" >> "$(RADIANT_GAME)" + echo "/>" >> "$(RADIANT_GAME)" + mkdir -p "$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/game" + echo "" > "$(RADIANT_XLINK)" + echo "" >> "$(RADIANT_XLINK)" + echo "" >> "$(RADIANT_XLINK)" + echo "" >> "$(RADIANT_XLINK)" + echo "" >> "$(RADIANT_XLINK)" + echo "" >> "$(RADIANT_XLINK)" + echo "" > "$(RADIANT_SYNAPSE)" + echo "pcx tga mip" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "wad" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "maphl" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "def" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "wad" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "wad" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "idtech2" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + echo "wad" >> "$(RADIANT_SYNAPSE)" + echo "" >> "$(RADIANT_SYNAPSE)" + mkdir -p "$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/scripts" + cp "$(GAME)/scripts/entities.def" "$(ENTITY_DEF)" + echo "" > "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + echo "" >> "$(RADIANT_PROJECT)" + mkdir -p "$(RADIANT_TEXTURES)/." + cp "$(GAME)/gfx/palette.lmp" "$(RADIANT_TEXTURES)/palette.lmp" + mkdir -p "$(HOME)/.$(GAME)/$(GAME)/scripts" + rsync -rva "$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/." "$(HOME)/.$(GAME)/$(GAME)/." + rsync -rva "$(NUCLIDE_DIR)/ThirdParty/gtkradiant/install/installs/$(NAME)Pack/install/$(GAME)/." "./$(GAME)/." diff --git a/Tools/make_launcher.sh b/Tools/make_launcher.sh new file mode 100755 index 0000000..a3968dd --- /dev/null +++ b/Tools/make_launcher.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ $# -lt 3 ]; then + printf "make_launcher.sh DIR COMMAND DESTINATION\n" + exit +fi + + +DIR="$1" +COMMAND="$2" +DEST="$3" + +printf "#/bin/sh\ncd \"$DIR\"\n$COMMAND\n" > "$DEST" +chmod +x "$DEST" \ No newline at end of file diff --git a/Tools/make_mapdef.sh b/Tools/make_mapdef.sh new file mode 100755 index 0000000..8f25a20 --- /dev/null +++ b/Tools/make_mapdef.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +CWD="$(pwd)" + +ent_for_mod() +{ + # don't bother if we don't have sources + if ! [ -f "$CWD/$1/src/progs.src" ]; then + exit + fi + + mkdir -p "$CWD/$1/scripts" + ENT_OUTFILE="$CWD/$1/scripts/entities.def" + echo '' > "$ENT_OUTFILE" + + echo "Scanning for definitions inside the game directory." + find "$CWD/$1/src/" -type f \( -iname \*.qc \) | while read EDEF_N; do + echo "... $EDEF_N" + sed -n '/\/*!QUAKED/,/*\//p' $EDEF_N >> "$ENT_OUTFILE" + # fix doxygen markup + done; + + sed -i 's/*!QUAKED/*QUAKED/g' "$ENT_OUTFILE" + + cat "$CWD/Tools/base_entities.def" >> $ENT_OUTFILE +} + +# first dump all the general purpose entities +BASE_ENT="$CWD/Tools/base_entities.def" +echo '' > "$BASE_ENT" + +echo "Scanning for definitions inside the general entity codebase." +find "$CWD/src/entities/" -type f \( -iname \*.qc \) | while read EDEF_N; do + echo "... $EDEF_N" + sed -n '/\/*!QUAKED/,/*\//p' $EDEF_N >> "$BASE_ENT" + # fix doxygen markup +done; + +sed -i 's/*!QUAKED/*QUAKED/g' "$BASE_ENT" + +# each game gets its own ents + general purpose ents appended at the end +if [ $# -gt 0 ]; then + ent_for_mod $1 +fi