From: Rudolf Polzer Date: Sat, 2 Oct 2010 19:25:02 +0000 (+0200) Subject: Merge branch 'master' into divVerent/crypto2 X-Git-Tag: xonotic-v0.1.0preview~125^2~23 X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=commitdiff_plain;h=87a39db1a58fe7f801c51b6721515fa8e4a55251;hp=f29b3346e03acc33131aee38ff7abeba6641ef5d Merge branch 'master' into divVerent/crypto2 Conflicts: all --- diff --git a/all b/all index 593e0b2e..a4d19548 100755 --- a/all +++ b/all @@ -119,7 +119,7 @@ div0-gittools | d0_blind_id | http://github.com/divVerent/d0_blind_id.git | master | data/xonotic-maps.pk3dir | | master | mediasource | | master | no -fteqcc | git://github.com/Blub/qclib.git | master | +fteqcc | http://github.com/Blub/qclib.git | master | " # todo: in darkplaces, change repobranch to div0-stable @@ -667,9 +667,7 @@ case "$cmd" in exit 1 fi fi - set -- "darkplaces/darkplaces$client" -nexuiz -customgamename Xonotic -customgamedirname1 data -customgamedirname2 "" -customgamescreenshotname xonotic -customgameuserdirname xonotic -mygames "$@" - # change this to: - #set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@" + set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@" # if pulseaudio is running: USE IT if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then @@ -680,10 +678,29 @@ case "$cmd" in fi fi + binary=$1 + if [ -n "$USE_GDB" ]; then set -- gdb --args "$@" + elif which gdb >/dev/null 2>&1; then + set -- gdb --batch -x savecore.gdb --args "$@" + elif which catchsegv >/dev/null 2>&1; then + set -- catchsegv "$@" + fi + rm -f xonotic.core + "$@" || true + if [ -f xonotic.core ]; then + if yesno "The program has CRASHED. Do you want to examine the core dump?"; then + gdb "$binary" xonotic.core + #elif yesno "You did not want to examine the core dump. Do you want to provide it - including your DarkPlaces checkout - to the Xonotic developers?"; then + # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h + # # somehow send it + # rm -f xonotic.core.tar.gz + else + echo "The core dump can be examined later by" + echo " gdb $binary xonotic.core" + fi fi - "$@" ;; each|foreach) keep_going=false @@ -847,7 +864,7 @@ case "$cmd" in GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref" reportdo4 cat "$t" reportecho4 "--> merge failed" - elif ! "$SELF" compile -n 2>&1 | tee "$t"; then + elif ! "$SELF" compile 2>&1 | tee "$t"; then git reset --hard "$org" GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref" reportdo4 cat "$t" @@ -964,6 +981,7 @@ case "$cmd" in if $gotomaster; then if $fetchupstream; then verbose git fetch origin + verbose git remote prune origin fi verbose git checkout -f "`repobranch "$d"`" verbose git reset --hard origin/"`repobranch "$d"`" @@ -975,6 +993,7 @@ case "$cmd" in upstream="$rem/${bra#refs/heads/}" if $fetchupstream; then verbose git fetch "$rem" + verbose git remote prune "$rem" fi if ! git rev-parse "$upstream" >/dev/null 2>&1; then upstream="origin/`repobranch "$d"`" @@ -1134,44 +1153,44 @@ case "$cmd" in ;; release-engine-win32) verbose "$SELF" release-compile win32 \ - 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \ + 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \ win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \ '' '' verbose "$SELF" release-compile win32 \ - 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \ + 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \ '' '' \ release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe' ;; release-engine-win64) verbose "$SELF" release-compile win64 \ - 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \ + 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \ win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \ 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe' verbose "$SELF" release-compile win64 \ - 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib" WINDRES="x86_64-w64-mingw32-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \ + 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="x86_64-w64-mingw32-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \ '' '' \ cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe' ;; release-engine-osx) # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed verbose "$SELF" release-compile osx \ - 'STRIP=: CC="gcc -g -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks"' \ + 'STRIP=: CC="gcc -g -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \ all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \ 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated' verbose "$SELF" release-compile osx \ - 'STRIP=: CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks"' \ + 'STRIP=: CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \ '' '' \ 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin' ;; release-engine-linux32) verbose "$SELF" release-compile linux32 \ - 'STRIP=: CC="gcc -m32 -g -I.deps/include -L.deps/lib" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \ + 'STRIP=: CC="gcc -m32 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \ all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \ release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated' ;; release-engine-linux64) verbose "$SELF" release-compile linux64 \ - 'STRIP=: CC="gcc -m64 -g -I.deps/include -L.deps/lib" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \ + 'STRIP=: CC="gcc -m64 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \ all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \ release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated' ;; diff --git a/data/font-nimbussansl.pk3dir/font-nimbussansl.cfg b/data/font-nimbussansl.pk3dir/font-nimbussansl.cfg index 4afab42f..0406392e 100644 --- a/data/font-nimbussansl.pk3dir/font-nimbussansl.cfg +++ b/data/font-nimbussansl.pk3dir/font-nimbussansl.cfg @@ -9,6 +9,6 @@ loadfont chat fonts/n019004l.pfb,gfx/vera-sans $con_chatsize loadfont centerprint fonts/unifont-5.1.20080907,gfx/vera-sans 9 loadfont infobar gfx/vera-sans 8 loadfont user0 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 9.6 12 12.8 16 -loadfont user1 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 4 5 6 7 8 9 10 12 $sbar_fontsize $scr_centersize // csqc font +loadfont user1 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 4 6 8 10 12 $hud_fontsize $scr_centersize // csqc font loadfont user2 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 10 12 14 16 20 24 28 32 // csqc bigfont scoreboard_columns_set diff --git a/misc/tools/shadescript/howto.txt b/misc/tools/shadescript/howto.txt new file mode 100644 index 00000000..891b114c --- /dev/null +++ b/misc/tools/shadescript/howto.txt @@ -0,0 +1,9 @@ +First make sure your textures are in the correct paths, eg +Correct: textures/yourset/wall/bricks.tga +Wrong: textures/yourset/bricks.tga + +Copy shade.vbs and template.shader to textures/yourset/ + +Edit the template.shader if you need non standard stuff + +Run the shade.vbs, copy textures/yourset/yourset.shader to scripts/yourset.shader, add yourset to scripts/shaderlist.txt \ No newline at end of file diff --git a/misc/tools/shadescript/shade.sh b/misc/tools/shadescript/shade.sh new file mode 100644 index 00000000..1f95c425 --- /dev/null +++ b/misc/tools/shadescript/shade.sh @@ -0,0 +1,120 @@ +#!/bin/sh + +case "$#" in + 2) + ;; + *) + echo "Usage: from xonotic-maps.pk3dir directory, copy and edit shader.template, then" + echo " $0 texturepackname myshader.template" + exit 1 + ;; +esac + +LF=" +" + +exec 3>"scripts/$1.shader" +template=`cat "$2"` + +find "textures/$1" -type f -path "textures/*/*/*.*" -not -name '*_norm.*' -not -name '*_glow.*' -not -name '*_gloss.*' -not -name '*_reflect.*' -not -name '*.xcf' | while IFS= read -r F; do + F=${F%.*} + + noLightmap=false + isLiquid=false + isTransparent=false + bounceScale=1.00 + shaderString="$template" + shaderHead= + shaderTail= + shaderQUI= + shaderDiffuse= + diffuseExtra= + + case "$F" in + *decal*) + noLightmap=true + ;; + esac + + # material type + case "$F" in + *water*) + noLightmap=true + isLiquid=true + shaderHead="$shaderHead surfaceparm trans\n surfaceparm water\n qer_trans 20\n" + ;; + *slime*) + noLightmap=true + isLiquid=true + shaderHead="$shaderHead surfaceparm trans\n surfaceparm slime\n qer_trans 20\n" + ;; + *lava*) + noLightmap=true + isLiquid=true + shaderHead="$shaderHead surfaceparm trans\n surfaceparm lava\n qer_trans 20\n" + ;; + *glass*) + noLightmap=true + shaderHead="$shaderHead surfaceparm trans\n" + diffuseExtra="$diffuseExtra blendfunc add\n" + ;; + *metal*) + bounceScale=`echo "$bounceScale + 0.25" | bc -l` + shaderHead="$shaderHead surfaceparm metalsteps\n" + ;; + esac + + # what is it used for + case "$F" in + *grate*) + bounceScale=`echo "$bounceScale + 0.25" | bc -l` + shaderHead="$shaderHead surfaceparm trans\n" + diffuseExtra="$diffuseExtra blendfunc blend\n" + ;; + esac + + # further properties + case "$F" in + *shiny*) + bounceScale=`echo "$bounceScale + 0.25" | bc -l` + ;; + esac + case "$F" in + *dirt*|*terrain*|*old*) + bounceScale=`echo "$bounceScale - 0.25" | bc -l` + shaderHead="$shaderHead surfaceparm dust\n" + ;; + esac + + shaderDiffuse="$F" + if [ -f "$F""_gloss.tga" ] || [ -f "$F""_gloss.jpg" ] || [ -f "$F""_gloss.png" ]; then + bounceScale=`echo "$bounceScale + 0.25" | bc -l` + fi + + if [ -f "$F""_qei.tga" ] || [ -f "$F""_qei.jpg" ] || [ -f "$F""_qei.png" ]; then + shaderQUI="$F""_qei" + else + shaderQUI="$F" + fi + + if ! $noLightmap; then + shaderTail=" {\n map \$lightmap\n rgbGen identity\n tcGen lightmap\n blendfunc filter\n }" + fi + case "$bounceScale" in + 1|1.0|1.00) + ;; + *) + shaderHead="$shaderHead q3map_bouncescale $bounceScale\n" + ;; + esac + + shaderName="`echo "$F" | cut -d / -f 1-2`/`echo "$F" | cut -d / -f 3`-`echo "$F" | cut -d / -f 4`" + echo "$shaderString$LF$LF" | sed -e " + s,%shader_name%,$shaderName,g; + s,%qei_name%,$shaderQUI,g; + s,%shader_head%,$shaderHead,g; + s,%diffuse_map%,$shaderDiffuse,g; + s,%diffuse_map_extra%,$diffuseExtra,g; + s,%shader_tail%,$shaderTail,g; + " >&3 +done diff --git a/misc/tools/shadescript/shade.vbs b/misc/tools/shadescript/shade.vbs new file mode 100644 index 00000000..e5dc4bed --- /dev/null +++ b/misc/tools/shadescript/shade.vbs @@ -0,0 +1,172 @@ +option explicit + + +Const ForReading = 1 +Const ForWriting = 2 +Const ForAppending = 8 + +dim CRLF + +CRLF = Chr(13) & Chr(10) + +dim scriptFullName, scriptPath +scriptFullName = WScript.ScriptFullName +scriptPath = Left ( scriptFullName, InStrRev ( scriptFullName, WScript.ScriptName) - 1 ) + +dim objFSO, setfolder, re, shader, objShaderTemplate, shaderTemplate +Set objFSO = CreateObject("Scripting.FileSystemObject") +Set setfolder = objFSO.GetFolder(scriptPath) +Set re = New RegExp + +re.IgnoreCase = True +re.Global = True +re.Pattern = "" + +Set shader = objFSO.OpenTextFile (scriptPath & "\" & setfolder.name & ".shader", ForWriting, True) + +Set objShaderTemplate = objFSO.OpenTextFile(scriptPath & "\template.shader", ForReading) +shaderTemplate = objShaderTemplate.ReadAll() + +function filetitle(sfilename) + filetitle = Left(sfilename, len(sfilename) - 4) +end function + +dim noLightmap, isLiquid, isTransparent, bounceScale, shaderString +dim shaderHead, shaderTail, shaderQUI, shaderDiffuse, diffuseExtra +dim subfold, texfile, fn + +For Each subfold in setfolder.Subfolders + ' shader.write "Folder: " & subfold.Name & CRLF + For Each texfile In subfold.Files + 'Defaults + noLightmap = false + isLiquid = false + isTransparent = false + bounceScale = 1 + shaderString = shaderTemplate + + shaderHead = "" + shaderTail = "" + shaderQUI = "" + shaderDiffuse = "" + diffuseExtra = "" + + ' First ignore any extra map or Thumbs.db + re.Pattern = "_bump.|_gloss.|_norm.|_glow.|Thumbs.db" + if not re.test(texfile.name) then + re.pattern = "decal" + if re.test(texfile.name) then + noLightmap = true + end if + + re.pattern = "water" + if re.test(texfile.name) then + noLightmap = true + isLiquid = true + shaderHead = shaderHead & " surfaceparm trans" & CRLF + shaderHead = shaderHead & " surfaceparm water" & CRLF + shaderHead = shaderHead & " qer_trans 20" & CRLF + diffuseExtra = "blendfunc blend" + end if + + re.pattern = "slime" + if re.test(texfile.name) then + noLightmap = true + isLiquid = true + shaderHead = shaderHead & " surfaceparm trans" & CRLF + shaderHead = shaderHead & " surfaceparm slime" & CRLF + shaderHead = shaderHead & " qer_trans 20" & CRLF + end if + + re.pattern = "lava" + if re.test(texfile.name) then + noLightmap = true + isLiquid = true + shaderHead = shaderHead & " surfaceparm trans" & CRLF + shaderHead = shaderHead & " surfaceparm lava" & CRLF + shaderHead = shaderHead & " qer_trans 20" & CRLF + diffuseExtra = " blendfunc add" + end if + + re.pattern = "glass" + if re.test(texfile.name) then + noLightmap = true + shaderHead = shaderHead & " surfaceparm trans" & CRLF + diffuseExtra = " blendfunc add" + end if + + re.pattern = "metal" + if re.test(texfile.name) then + bounceScale = bounceScale + 0.25 + shaderHead = shaderHead & " surfaceparm metalsteps" & CRLF + end if + + re.pattern = "grate" + if re.test(texfile.name) then + bounceScale = bounceScale + 0.25 + shaderHead = shaderHead & " surfaceparm trans" & CRLF + diffuseExtra = " blendfunc blend" + end if + + re.pattern = "shiny" + if re.test(texfile.name) then + bounceScale = bounceScale + 0.25 + end if + + re.pattern = "dirt|terrain|old" + if re.test(texfile.name) then + bounceScale = bounceScale - 0.25 + shaderHead = shaderHead & " surfaceparm dust" & CRLF + end if + + shaderDiffuse = "textures/" & setfolder.name & "/" & subfold.name & "/" & texfile.name + + fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_gloss.tga" + if objFSO.FileExists(fn) Then + bounceScale = bounceScale + 0.25 + end if + + fn = scriptPath & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga" + if objFSO.FileExists(fn) Then + shaderQUI = "textures/" & setfolder.name & "/" & subfold.name & "/" & filetitle(texfile.name) & "_qei.tga" + else + shaderQUI = shaderDiffuse + end if + + if not noLightmap then + shaderTail = " {" & CRLF & " map $lightmap" & CRLF & " rgbGen identity" & CRLF & " tcGen lightmap" & CRLF & " blendfunc filter" & CRLF & " }" + end if + + if not bounceScale = 1 then + re.pattern = "," + shaderHead = shaderHead & " q3map_bounceScale " & re.Replace(bounceScale, ".") & CRLF + end if + + re.Pattern = "%shader_name%" + shaderString = re.Replace(shaderTemplate, "textures/" & setfolder.name & "/" & subfold.name & "-" & filetitle(texfile.name)) + + re.Pattern = "%qei_name%" + shaderString = re.Replace(shaderString, shaderQUI) + + re.Pattern = "%shader_head%" + shaderString = re.Replace(shaderString, shaderHead) + + re.Pattern = "%diffuse_map%" + shaderString = re.Replace(shaderString, shaderDiffuse) + + re.Pattern = "%diffuse_map_extra%" + shaderString = re.Replace(shaderString, diffuseExtra) + + re.Pattern = "%shader_tail%" + shaderString = re.Replace(shaderString, shaderTail) + + + + shader.write shaderString & CRLF & CRLF + end if + Next +Next +shader.Close + + + diff --git a/misc/tools/shadescript/template.shader b/misc/tools/shadescript/template.shader new file mode 100644 index 00000000..b9d47879 --- /dev/null +++ b/misc/tools/shadescript/template.shader @@ -0,0 +1,15 @@ +%shader_name% +{ + qer_editorimage %qei_name% + dpoffsetmapping - 2 + dpglossintensitymod 3 + dpglossexponentmod 4 +%shader_head% + + { + map %diffuse_map% + %diffuse_map_extra% + } + +%shader_tail% +} \ No newline at end of file diff --git a/misc/tools/xonotic-map-compiler-autobuild b/misc/tools/xonotic-map-compiler-autobuild index 90a01232..5c6db64d 100755 --- a/misc/tools/xonotic-map-compiler-autobuild +++ b/misc/tools/xonotic-map-compiler-autobuild @@ -3,10 +3,14 @@ set -e bspdir="$PWD/data" -url=http://beta.xonotic.org/autobuild-bsp/ +url_http=http://beta.xonotic.org/autobuild-bsp/ url_ssh=xonotic-beta:autobuild-bsp/ -cachedir="$HOME/xonotic-map-compiler.cache/" -override="-bsp_timeout 900 -vis_timeout 3600 -light_timeout 14400 -minimap_timeout 900 -scale_timeout 900" +build_cachedir="$HOME/xonotic-map-compiler.cache/" +screenshot_cachedir="$HOME/xonotic-map-screenshot.cache/" +build_override="-bsp_timeout 900 -vis_timeout 3600 -light_timeout 14400 -minimap_timeout 900 -scale_timeout 900" +screenshot_override="9 600 +g_ctf 1" + +getthemap_fail=false allmaps() { @@ -39,6 +43,32 @@ pre2spam() echo "[$branch $hash] starting map compile of $map" } +ss2spam() +{ + map=$1 + url=$2 + branch=$3 + hash=$4 + status=$5 + + branch=${branch##refs/heads/} + branch=${branch##refs/remotes/} + branch=${branch##origin/} + hash=`echo "$hash" | cut -c 1-7` + + s_error= + + if [ "$status" -ne 0 ]; then + s_error="exited with status $status" + fi + + if [ -n "$s_error" ]; then + echo "[$branch $hash] 4screenshots of $map could not be made: $s_error" + else + echo "[$branch $hash] screenshots of $map are available on $url" + fi +} + log2spam() { map=$1 @@ -127,7 +157,7 @@ buildthemap() t0=`date +%s` ( cd maps - ../../../misc/tools/xonotic-map-compiler "$M" `grep ^- "$M.map.options" | cut -d '#' -f 1` $override > "$M.log" + ../../../misc/tools/xonotic-map-compiler "$M" `grep ^- "$M.map.options" | cut -d '#' -f 1` $build_override > "$M.log" ) t1=`date +%s` dt=$(($t1 - $t0)) @@ -147,6 +177,45 @@ buildthemap() fi } +screenshotthemap() +{ + REFNAME=$1 + HASH=$2 + url=$3 + M=$4 + blobhash=$5 + if HEAD "$url$M-$blobhash/"; then + continue + fi + rm -rf ~/.xonotic + ( + cd ../.. + if [ -n "$DISPLAY" ]; then + misc/tools/xonotic-map-screenshot "$M" $screenshot_override +"scr_screenshot_name \"$M-\"" + else + startx "$PWD/misc/tools/xonotic-map-screenshot" "$M" $screenshot_override +"scr_screenshot_name \"$M-\"" -- :8 + fi + ) + if ! mv ~/.xonotic/data/screenshots "$M-$blobhash"; then + if [ -n "$IRCSPAM" ]; then + #ss2spam "$M" "$url$M-$blobhash/" "$REFNAME" "$HASH" 1 > "maps/$M.ircss" + ss2spam "$M" "$url?d" "$REFNAME" "$HASH" 1 > "maps/$M.ircss" + fi + return 1 + fi + if [ -n "$IRCSPAM" ]; then + #ss2spam "$M" "$url$M-$blobhash/" "$REFNAME" "$HASH" 0 > "maps/$M.ircss" + ss2spam "$M" "$url?d" "$REFNAME" "$HASH" 0 > "maps/$M.ircss" + fi + chmod 1777 "$M-$blobhash" + ln -snf "../$M-$blobhash" "$M" # from ALL branches, so beware! + rsync -vaSHP "$M-$blobhash" "$url_ssh" + rsync -vaSHP "$M" "$url_ssh""latest/" + if [ -n "$IRCSPAM" ]; then + $IRCSPAM < "maps/$M.ircss" + fi +} + getthemap() { url=$1 @@ -161,12 +230,14 @@ getthemap() if ! curl -o "$bspdir/$M-$blobhash.pk3" "$url$M-$blobhash.pk3"; then rm -f "$bspdir/$M-$blobhash.pk3" echo "WARNING: could not download $url$M-$blobhash.pk3, maybe not ready yet" + getthemap_fail=true return 0 fi fi if ! unzip -l "$bspdir/$M-$blobhash.pk3"; then rm -f "$bspdir/$M-$blobhash.pk3" echo "WARNING: could not download $url$M-$blobhash.pk3, invalid zip file" + getthemap_fail=true return 0 fi } @@ -175,14 +246,51 @@ case "$1" in build) cd data/xonotic-maps.pk3dir git for-each-ref 'refs/remotes' | while read -r HASH TYPE REFNAME; do - if [ -f "$cachedir/$HASH" ]; then + case "$REFNAME" in + */archived/*) + continue + ;; + esac + if [ -f "$build_cachedir/$HASH" ]; then continue fi git reset --hard git clean -xfd git checkout -f "$HASH" - allmaps buildthemap "$REFNAME" "$HASH" "$url" - touch "$cachedir/$HASH" + allmaps buildthemap "$REFNAME" "$HASH" "$url_http" + touch "$build_cachedir/$HASH" + done + git checkout -f master + ;; + screenshot) + cd data/xonotic-maps.pk3dir + git for-each-ref 'refs/remotes' | while read -r HASH TYPE REFNAME; do + case "$REFNAME" in + */archived/*) + continue + ;; + esac + if [ -f "$screenshot_cachedir/$HASH" ]; then + continue + fi + git reset --hard + git clean -xfd + git checkout -f "$HASH" + + cd ../.. + mkdir -p "$bspdir" "$bspdir.old" + for b in "$bspdir"/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do + if [ -e "$b" ]; then + mv "$b" "$bspdir.old"/ + fi + done + cd data/xonotic-maps.pk3dir + allmaps getthemap "$url_http" "$bspdir.old" "$bspdir" + + if ! $getthemap_fail; then + allmaps screenshotthemap "$REFNAME" "$HASH" "$url_http" + touch "$screenshot_cachedir/$HASH" + fi done git checkout -f master ;; @@ -194,7 +302,7 @@ case "$1" in fi done cd data/xonotic-maps.pk3dir - allmaps getthemap "$url" "$bspdir.old" "$bspdir" + allmaps getthemap "$url_http" "$bspdir.old" "$bspdir" echo "List of maps that got deleted (if any) and currently are in $bspdir.old:" ls -l "$bspdir.old" ;; @@ -202,7 +310,7 @@ case "$1" in mkdir -p "$bspdir" cd "$bspdir" rm -f *-????????????????????????????????????????-????????????????????????????????????????.pk3 - wget -r -l1 -A "*.pk3" -N --no-parent --no-directories "$url""latest" + wget -r -l1 -A "*.pk3" -N --no-parent --no-directories "$url_http""latest" ;; log2spam-test) log2spam "mapname" "http://mapurl" "branch" "commit" "0" diff --git a/misc/tools/xonotic-map-screenshot b/misc/tools/xonotic-map-screenshot new file mode 100755 index 00000000..0d3127e5 --- /dev/null +++ b/misc/tools/xonotic-map-screenshot @@ -0,0 +1,28 @@ +#!/bin/sh + +map=$1; shift +count=$1; shift +watchdog=$1; shift + +# convert count to unary +count=`yes x | head -n "$count" | tr -cd x` + +./all run \ + -nosound \ + +'vid_fullscreen 0' \ + +'exec effects-ultimate.cfg' \ + "$@" \ + +'r_motionblur 0' \ + +'r_damageblur 0' \ + +'r_letterbox -1' \ + +'r_drawviewmodel 0' \ + +'crosshair 0' \ + +'sv_cheats 2' \ + +'set catchme "catchme_"' \ + +"alias catchme_$count \"quit\"" \ + +'alias "autoscreenshot" "$catchme; set catchme \"${catchme}x\"; impulse 911; defer 2 \"screenshot; autoscreenshot\""' \ + +'alias cl_hook_gamestart_all "cmd join; defer 1 god; defer 2 noclip; defer 3 autoscreenshot"' \ + +"defer \"$watchdog\" quit" \ + +"map \"$map\"" \ + +'timelimit 0' \ + +'fraglimit 0' diff --git a/savecore.gdb b/savecore.gdb new file mode 100644 index 00000000..33c4b40f --- /dev/null +++ b/savecore.gdb @@ -0,0 +1,9 @@ +handle SIGHUP nostop print pass +handle SIGINT nostop print pass +handle SIGCONT nostop print pass +handle SIGTSTP nostop print pass +run +set pagination off +echo \n\nIf the following commands show errors, that can be ignored:\n +bt full +generate-core-file xonotic.core