From: bones_was_here Date: Mon, 4 Jul 2022 12:02:21 +0000 (+0000) Subject: Merge branch 'bones_was_here/all_no_glx' into 'master' X-Git-Tag: xonotic-v0.8.6~30 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=commitdiff_plain;h=65c24c8e4a21022893f7cb7e8029472303793975;hp=e62003cbc45174fdef55606d15a66dfad80bfde1 Merge branch 'bones_was_here/all_no_glx' into 'master' Remove GLX client support in developer builds (./all compile) See merge request xonotic/xonotic!95 --- diff --git a/Docs/faq.md b/Docs/faq.md index 567f3c5d..5c2a3ce8 100644 --- a/Docs/faq.md +++ b/Docs/faq.md @@ -1,4 +1,15 @@ +--- +author: Antibody +date: 2010-05-30 14:50:21+00:00 +type: faq +title: FAQ +aliases: +- /the-game/faq +--- + # Xonotic FAQs + + ## How do I install Xonotic? **There is no need to install Xonotic!** The zip file you downloaded from the homepage has everything. All binaries to run the game on Linux, Windows and macOS are inside of it. Just unzip the archive and run the appropriate executable for your OS. @@ -7,7 +18,7 @@ For example, on Windows or macOS you can start the game by double-clicking the X ## Is there a Debian package available? -There is an unofficial package available on [playdeb.net](http://www.playdeb.net/updates/ubuntu/17.04/?q=xonotic). Unfortunately, Xonotic is not in the Debian repositories yet. You can check the status of the bug report [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646377). If you can help us expedite this process, please contact us! +Unfortunately, Xonotic is not in the Debian repositories yet. You can check the status of the bug report [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646377). If you can help us expedite this process, please contact us! ## How do you pronounce the name Xonotic? @@ -19,21 +30,21 @@ European people are more likely to pronounce it : _kso + notic_ ## How and why did you choose the logo? -The logo design process took about a week, with a handful of people contributing designs, and constantly adjusting those designs based on feedback. +The logo design process took about a week, with a handful of people contributing designs, and constantly adjusting those designs based on feedback. -The phoenix image of the logo obviously refers to the concept of "rising from the ashes". +The phoenix image of the logo obviously refers to the concept of "rising from the ashes". -Another aspect of the logo is the center ring, which has some similarities to the Quake logo; it has a fatter bottom edge and thinner top edge, though quake didn't use a complete ring shape. This is intended as a pay of respect to the Quake origins of the game, as the Darkplaces engine was originally based on the Quake 1 engine. +Another aspect of the logo is the center ring, which has some similarities to the Quake logo; it has a fatter bottom edge and thinner top edge, though quake didn't use a complete ring shape. This is intended as a pay of respect to the Quake origins of the game, as the Darkplaces engine was originally based on the Quake 1 engine. # Troubleshooting -## When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot +## I can't launch Xonotic on Linux -This is probably because you don't have the map that's running on the server or it didn't download correctly. Try clearing your _dlcache_ in your config folder and restarting Xonotic. +The most likely reason Xonotic won't start is that you've accidentally launched the dedicated server (e.g. `xonotic-linux64-dedicated`) which runs silently in the background. It shares a lockfile (`~/.xonotic/lock`) with the normal executable and prevents it from launching. Kill any processes which have xonotic in the name (you might also need to remove the lockfile manually) and try again. -For Linux users: you need to have libcurl installed, otherwise you won't be able to download any maps. libcurl should be available in any Linux distribution, just search for "libcurl" and install it in your distribution's package manager. +Use the executables with sdl or glx in their name to launch Xonotic. -## Can't launch Xonotic on macOS Sierra or later +## I can't launch Xonotic on macOS Sierra or later (Full error message: "You have reached this menu due to missing or unlocatable content/data. You may consider adding -basedir /path/to/game to your launch commandline.") @@ -41,9 +52,17 @@ In the Finder, control-click the app icon, then choose Open from the shortcut me This happens because Xonotic is not signed using an Apple developer key. +## When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot + +This is probably because you don't have the map that's running on the server or it didn't download correctly. Try clearing your _dlcache_ (in [\](#config)/data/dlcache) and restarting Xonotic. + +For Linux users: you need to have libcurl installed, otherwise you won't be able to download any maps. libcurl should be available in any Linux distribution, just search for "libcurl" and install it in your distribution's package manager. + ## When I start Xonotic all I see is a black screen or a black screen with some checkered squares This happens when the engine can't load the data*.pk3 file or has trouble to initialize OpenGL. The reasons could be: + + * You unpacked the zip file without folder names, see [How do I install Xonotic?]({{< relref "#how-do-i-install-xonotic" >}}) * On Linux: the current directory is not your Xonotic/ folder. * On Mac: you tried to extract and move the files from a Xonotic update and it deleted the old files. When using the mac GUI please be sure to move only the files not the folders as that will delete the old files or use the mv console command which will not delete the old files. * The engine could not initialize OpenGL. Please install the latest drivers for your graphic card. You will probably find one for your card there: [intel](http://intel.com), [AMD](http://amd.com), [nvidia](http://nvidia.com). @@ -54,7 +73,7 @@ This happens when the engine can't load the data*.pk3 file or has trouble to ini This happens when the engine has trouble initializing OpenGL. The reasons could be: * The engine could not initialize OpenGL. Please install the latest drivers for your graphic card. You will probably find one for your card there: [intel](http://intel.com), [AMD](http://amd.com), [nvidia](http://nvidia.com). - * You do not have permissions needed for 3d acceleration. Usually you need to add yourself to the group video, you can do that via console as root like this: _usermod -a -G video YOURUSERNAME_. You need to logoff/in afterwards. + * You do not have permissions needed for 3d acceleration. Usually you need to add yourself to the group video, you can do that via console as root like this: `usermod -a -G video YOURUSERNAME`. You need to logoff/in afterwards. ## When I start Xonotic my screen is flickering @@ -62,39 +81,41 @@ This is known to happen on Windows with Intel graphic chips and is a bug in the ## How can I speed up my frame rate? -You can choose predefined performance settings in the Settings / Video menu or you can enable/disable single features. The greatest performance boost can be achieved by turning off dynamic lights and shadows in the Settings / Effects menu. Bloom is also quite resource intensive. Other fps boots include disabling Deluxemapping and Coronas. On older graphics cards or on-board/notebook chips with little video ram you can try to lower the texture quality in the Settings / Video menu. Some graphic cards (mostly ATI or quite old cards) run A LOT faster if you disable the Vertex Buffer Objects in the Settings / Video menu. An other thing that can greatly help on such cards is to disable the OpenGL 2.0 Shaders. Having that option enabled is faster on most cards however, that is why both are active by default. +You can choose predefined performance settings in the Settings->Video menu or you can enable/disable single features. The greatest performance boost can be achieved by turning off dynamic lights and shadows in the Settings->Effects menu. Bloom is also quite resource intensive. Other fps boots include disabling Deluxemapping and Coronas. On older graphics cards or on-board/notebook chips with little video ram you can try to lower the texture quality in the Settings->Video menu. Some graphic cards (mostly ATI or quite old cards) run A LOT faster if you disable the Vertex Buffer Objects in the Settings->Video menu. An other thing that can greatly help on such cards is to disable the OpenGL 2.0 Shaders. Having that option enabled is faster on most cards however, that is why both are active by default. If none of that helps, you can try compiling Xonotic from [source](http://gitlab.com/xonotic/xonotic/wikis/Repository_Access). ## The sound is broken, it crackles and stutters -Try run xonotic-sdl.exe instead of xonotic.exe (on Windows). Adding the command line options -sndspeed 48000 and/or -sndstereo can also help on some systems (on Linux, Mac, Windows). +Try run xonotic-wgl.exe instead of xonotic.exe (on Windows). Adding the command line options -sndspeed 48000 and/or -sndstereo can also help on some systems (on Linux, Mac, Windows). ## Mouse is too slow and sensitivity is at top (on Mac / Linux) -Mac: The default mouse acceleration on Mac is very high and strange. The Xonotic defaults work fine with it but some mouse drivers seem to 'correct' the mouse acceleration and conflict with the Xonotic defaults. Try to **disable the option Turn off OS mouse acceleration** in the Settings / Input menu. Or the same via console: _apple_mouse_noaccel 0; vid_restart_ -Linux: A similar problem can arise on Linux. It's also Turn off OS mouse acceleration in the Settings / Input menu but the console command is different: _vid_dga 0; vid_restart; +Mac: The default mouse acceleration on Mac is very high and strange. The Xonotic defaults work fine with it but some mouse drivers seem to 'correct' the mouse acceleration and conflict with the Xonotic defaults. Try to **disable the option Disable system mouse acceleration** in the Settings->Input menu. Or the same via console: `apple_mouse_noaccel 0; vid_restart` ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})) + +Linux: A similar problem can arise on Linux. It's also Disable system mouse acceleration in the Settings->Input menu but the console command is different (and only available in the glx executable): `vid_dga 0; vid_restart` ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})) ## I can't switch to 32 bit color depth (on Windows) Check if your desktop color depth is set to 32 bits per pixel. If it's just set to 16, Xonotic can't switch to 32 bit mode. -## How to report crashes and bugs +## How to report crashes and bugs? Use our [issue tracker](http://gitlab.com/xonotic/xonotic-data.pk3dir/issues) on Gitlab. -If you want to investigate further: +If you want to investigate crashes further: -On Linux: In a xterm, cd into your Xonotic installation directory, start catchsegv ./xonotic-linux64-sdl -condebug -developer > crash.txt 2>&1 and give the file crash.txt to the developers. On a 32bit system you should instead use ./xonotic-linux32-sdl. Note that you can also use ./xonotic-linux64-glx or if you have a 32bit system ./xonotic-linux32-glx +On Linux: In a terminal, `cd` into your Xonotic installation directory, execute `catchsegv ./xonotic-linux64-sdl -condebug -developer > crash.txt 2>&1` and give the file crash.txt to the developers. Note that you can also use `./xonotic-linux64-glx`. On Windows: Click Start->Run, and enter drwtsn32, click Ok in the next window, run Xonotic and wait for the crash. Then go to C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson there should be a file called "drwtsn32.log", give that file along with the engine's build date to the developers. You'll see that date when you open the ingame console (How do I open the console?). Note that some folders of that path may be hidden or have a translated name if you're using a non-english windows. ## Where can I get more help? -Visit the official Xonotic [forum](http://forums.xonotic.org/), there is a support and bug report area. Or get on [IRC](/chat) to chat with others or ask for help. There is the normal users channel (irc://irc.quakenet.org/xonotic) and the developers channel (irc://irc.freenode.net/xonotic) +Visit the official Xonotic [forum](http://forums.xonotic.org/), there is a support and bug report area, or [ask in chat](http://xonotic.org/chat). # General questions + ## Where are the configuration files located? * Linux: ~/.xonotic @@ -110,9 +131,11 @@ The config directory (sometimes called user directory) has a specific [location] ## How do I install new maps? -Maps usually ship as .pk3 file. All you have to do is to copy this file to the config folder /data/ directory. Map packages that were downloaded from a server during playing end up in /data/dlcache and are only used till you exit Xonotic. If you want to play them locally or use them to setup a server of your own you can "accept" the packages by moving it one level up - right next to your config.cfg. +Maps usually ship as a .pk3 file. All you have to do is to copy this file to the [\](#config)/data/ directory. To detect the new map, either restart Xonotic or run `fs_rescan` in console. + +Map packages that were downloaded from a server when playing on it end up in [\](#config)/data/dlcache/ and are only used till you exit Xonotic. If you want to play them locally or use them to setup a server of your own you can "accept" the packages by moving them one level up (right next to your config.cfg). -An extensive list of maps is at [xonotic.co](http://xonotic.co) +There are multiple [unofficial map repositories](https://gitlab.com/xonotic/xonotic/wikis/Home#unofficial-map-repositories). ## How can I place a shortcut to Xonotic on my Linux desktop? @@ -124,73 +147,73 @@ Press [shift]+[escape]. To close it press [escape]. While playing \` or ^ will a ## What console commands/variables are there? -An searchable list is available [here](http://www.xonotic.org/tools/cacs/), or you can search in-game using _apropos_ in console. +An searchable list is available [here](http://www.xonotic.org/tools/cacs/), or you can search in-game using `apropos` in console ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})). ## How can I use colors in my nickname and messages? Colors can be used in nicknames and chat messages via two ways: Either the simple way by typing ^ followed by a number between 0 and 9 or by typing ^x followed by three hexadecimal numbers (0-F) representing red, green and blue components of the color before the text. The second way allows for much more colors. For example if you type ^xF00message the text "message" will be displayed in red color. Simple examples: -code | rgb code | color --------|-----------|-------- -^0 | ^x000 | black -^1 | ^xF00 | red -^2 | ^x0F0 | green -^3 | ^xFF0 | yellow -^4 | ^x00F | blue -^5 | ^x0FF | cyan -^6 | ^xF0F | magenta -^7 | ^xFFF | white -^8 | | half-transparent black -^9 | ^x888 | grey - | ^x800 | dark red - | ^x080 | dark green - | ^x880 | dark yellow - | ^x008 | dark blue - | ^x088 | dark cyan - | ^x808 | dark magenta +| code | rgb code | color +|--------|-----------|-------- +| ^0 | ^x000 | black +| ^1 | ^xF00 | red +| ^2 | ^x0F0 | green +| ^3 | ^xFF0 | yellow +| ^4 | ^x00F | blue +| ^5 | ^x0FF | cyan +| ^6 | ^xF0F | magenta +| ^7 | ^xFFF | white +| ^8 | | half-transparent black +| ^9 | ^x888 | grey +| | ^x800 | dark red +| | ^x080 | dark green +| | ^x880 | dark yellow +| | ^x008 | dark blue +| | ^x088 | dark cyan +| | ^x808 | dark magenta ## How do I watch/record demos? -Demos are recordings of matches that you have played. To automatically record a demo each time you play enable the option Record demos while playing in the Multiplayer / Demos menu. Or if you just want to record some matches open the console and type rec before playing. That is before starting a game or connecting to a server. The demo file will then be stored in [your config folder](#config)/data/demos/.dem. If you downloaded a demo, copy it to [\](#config)/data/demos/.dem. You might have to create this directory if you have never recorded a demo before. To watch demos you can choose a demo file in the Multiplayer / Demos and click the play button. Also you can watch demos typing _ply _ in the console ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})). You can list all your demo files by typing _dem_ on the console. +Demos are recordings of matches that you have played. To automatically record a demo each time you play enable the option Auto record demos in Multiplayer->Media->Demos. Or if you just want to record some matches open the console and type `rec demos/` before playing. That is before starting a game or connecting to a server. The demo file will then be stored in [your config folder](#config)/data/demos/\.dem. If you downloaded a demo, copy it to [\](#config)/data/demos/. You might have to create this directory if you have never recorded a demo before. To watch demos you can choose a demo file in Multiplayer->Media->Demos and click the Play button. Also you can watch demos typing `ply demos/` in the console ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})). # Server setup ## How do I start a server? -Use the Multiplayer / Create menu to start a listen server. You will always have to play yourself in a listen server. If you want to create a server without being forced to play yourself please take a look at the file readme.txt in the Xonotic/server/ directory where the dedicated server is explained. +Use the Multiplayer->Create menu to start a listen server. You will always have to play yourself in a listen server. If you want to create a server without being forced to play yourself please take a look at the file readme.txt in the Xonotic/server/ directory where the dedicated server is explained. ## Which ports do I have to open in firewall/forward from my router to run a server? -The default port is 26000 UDP. You can change that in the Multiplayer / Create menu or by starting Xonotic with the parameter -port or having a line port in the server config file. If you follow the tutorial mentioned above you do not need this command line argument as it will be done in the config file created for the server. To add the command line argument on Windows, create a new shortcut to xonotic.exe or xonotic-dedicated.exe and right click on it. Select properties and -port in the "Target:" line. Be sure that the "Start in:" line contains the full path to your Xonotic folder and click "OK". The parameter will be used if you start Xonotic via that new shortcut. +The default port is 26000 UDP. You can change that in the Multiplayer->Create menu or by starting Xonotic with the parameter `-port ` or having a line `port ` in the server config file. If you follow the tutorial mentioned above you do not need this command line argument as it will be done in the config file created for the server. To add the command line argument on Windows, create a new shortcut to xonotic.exe or xonotic-dedicated.exe and right click on it. Select properties and `-port ` in the "Target:" line. Be sure that the "Start in:" line contains the full path to your Xonotic folder and click "OK". The parameter will be used if you start Xonotic via that new shortcut. ## Is there some kind of rcon? -Yes there is a QuakeWorld compatible rcon. To use it you must enter rcon_password in the server console or server config file. The Xonotic client has to set the same password in the same fashion. You can then issue commands with rcon if you are connected to the server or will have to set rcon_address or rcon_address : to point to the server. There are also external rcon tools but make sure you use a QW compatible rcon tool. +Yes there is a QuakeWorld compatible rcon. To use it you must enter `rcon_password ` in the server console or server config file. The Xonotic client has to set the same password in the same fashion. You can then issue commands with `rcon ` if you are connected to the server or will have to set `rcon_address ` or `rcon_address :` to point to the server. There are also external rcon tools but make sure you use a QW compatible rcon tool. ## How can I kick people who are using special characters in their names? -Enter status at the server console. You will see a list of all players. In front of their names you will see a number (the player id). You can kick the player you don't like with kick # (notice the space after #). +Enter status at the server console. You will see a list of all players. In front of their names you will see a number (the player id). You can kick the player you don't like with `kick # ` (notice the space after #). # Nexuiz Related FAQs ## What prompted the split from Nexuiz? -**Lee Vermeulen**, the [Nexuiz project](http://alientrap.org/nexuiz) founder, decided to license the Nexuiz code (with **LordHavoc** licensing the [Darkplaces engine](http://icculus.org/twilight/darkplaces/)) to a new game development company named [Illfonic](http://illfonic.com) so that they could develop a closed-source version for the PS3. As part of this deal, IllFonic acquired the rights to use the name Nexuiz along with the domain nexuiz.com, and are under no obligation to contribute code back to the open-source Nexuiz project (and have stated that they have no intention of doing so). +**Lee Vermeulen**, the [Nexuiz project](http://alientrap.org/nexuiz) founder, decided to license the Nexuiz code (with **LordHavoc** licensing the [Darkplaces engine](http://icculus.org/twilight/darkplaces/)) to a new game development company named [Illfonic](http://illfonic.com) so that they could develop a closed-source version for the PS3. As part of this deal, IllFonic acquired the rights to use the name Nexuiz along with the domain nexuiz.com, and are under no obligation to contribute code back to the open-source Nexuiz project (and have stated that they have no intention of doing so). -When this was announced, the response from the Nexuiz community was overwhelming negative, even among the development team and main contributors. Vermeulen had not actively participated in the project for several years and all development had been done by the community. Most members have expressed a sense of betrayal and cited the project as an example of [mushroom management](http://en.wikipedia.org/wiki/Mushroom_management). Vermeulen essentially cashed in on the hard work of others and sold the code, name and reputation that they had built up over years without him. +When this was announced, the response from the Nexuiz community was overwhelming negative, even among the development team and main contributors. Vermeulen had not actively participated in the project for several years and all development had been done by the community. Most members have expressed a sense of betrayal and cited the project as an example of [mushroom management](http://en.wikipedia.org/wiki/Mushroom_management). Vermeulen essentially cashed in on the hard work of others and sold the code, name and reputation that they had built up over years without him. -Despite attempts to [reason with IllFonic](https://web.archive.org/web/20101212165111/http://alientrap.org/forum/viewtopic.php?f=4&t=6079), they have refused to change the name of their project to a derivative name even though they have directly stated that their "version" of Nexuiz is a completely different game. The hijacking of the Nexuiz project by its absentee founder and IllFonic made it clear that it had no future as it stood and thus the community left to found **Xonotic**. +Despite attempts to [reason with IllFonic](https://web.archive.org/web/20101212165111/http://alientrap.org/forum/viewtopic.php?f=4&t=6079), they have refused to change the name of their project to a derivative name even though they have directly stated that their "version" of Nexuiz is a completely different game. The hijacking of the Nexuiz project by its absentee founder and IllFonic made it clear that it had no future as it stood and thus the community left to found **Xonotic**. -It should also be noted that IllFonic's code may be in violation of the GPL as most contributors to the Nexuiz codebase have not relicensed their work for inclusion in a closed-source project. This has been another source of outrage for many. +It should also be noted that IllFonic's code may be in violation of the GPL as most contributors to the Nexuiz codebase have not relicensed their work for inclusion in a closed-source project. This has been another source of outrage for many. **Update:** The GPL concerns have been cleared up by a recent [interview with LordHavoc](http://games.slashdot.org/story/10/03/24/070234/DarkPlaces-Dev-Forest-Hale-Corrects-Nexuiz-GPL-Stance). ## Was a compromise attempted? -Yes, many in the Nexuiz community tried to [reach a compromise](http://alientrap.org/forum/viewtopic.php?f=4&t=6079), such as having Illfonic contribute some artwork and/or gamecode back to Nexuiz GPL and for them to use a derivative name for their project, e.g. "Nexuiz Reloaded". ~~ IllFonic flatly refused such suggestions. ~~ This, along with the clear stance that Alientrap has taken on this issue, made it clear that no compromise could be reached. +Yes, many in the Nexuiz community tried to [reach a compromise](http://alientrap.org/forum/viewtopic.php?f=4&t=6079), such as having Illfonic contribute some artwork and/or gamecode back to Nexuiz GPL and for them to use a derivative name for their project, e.g. "Nexuiz Reloaded". Illfonic [flatly refused](https://web.archive.org/web/20101212220555/http://alientrap.org/forum/viewtopic.php?p=76108&f=7) all such suggestions. This, along with the clear stance that Alientrap has taken on this issue, made it clear that no compromise could be reached. -**Update!** It has been clarified that, despite some of misleading wording in previous communication, Illfonic will be contributing _some_ of the game code back to Nexuiz GPL, mainly having to do with bandwidth improvements and animation blending. +**Update** It has been clarified that, despite some of misleading wording in previous communication, Illfonic will be contributing _some_ of the game code back to Nexuiz GPL, mainly having to do with bandwidth improvements and animation blending. ## Do you despise Vermeulen, LordHavoc or Illfonic? -**No!** Without the past work of Vermeulen and LordHavoc, we would not have the game that we enjoy today. We wish them the best of luck in their endeavors. We hope Illfonic's Nexuiz on PS3 is successful. We simply have a difference of opinion on project management and the result is going to be very positive; We're forming a game project that matches what we wanted out of Nexuiz all along. +**No!** Without the past work of Vermeulen and LordHavoc, we would not have the game that we enjoy today. We wish them the best of luck in their endeavors. We hope Illfonic's Nexuiz on PS3 is successful. We simply have a difference of opinion on project management and the result is going to be very positive; We're forming a game project that matches what we wanted out of Nexuiz all along. diff --git a/Makefile b/Makefile index 85fbe918..50d829ef 100644 --- a/Makefile +++ b/Makefile @@ -1,132 +1,97 @@ -DESTDIR ?= -PREFIX ?= /usr/local -BINDIR ?= $(PREFIX)/bin -LIBDIR ?= $(PREFIX)/lib/xonotic -DOCDIR ?= $(PREFIX)/share/doc/xonotic -ZIP ?= zip -9 -INSTALL ?= install -ARCH ?= $(shell if [ x"`uname -m`" = x"x86_64" ]; then echo linux64; else echo linux32; fi) -LN ?= ln -CP ?= cp -BINARY ?= yes -SUFFIX ?= $(shell if [ -d .git ]; then echo git; elif [ x"$(BINARY)" = x"yes" ]; then echo zip-binary; else echo zip-source; fi) -RIJNDAELDETECT_CONFIGURE ?= $(shell if ! [ -f source/d0_blind_id/d0_rijndael.c ]; then echo --disable-rijndael; fi) -RIJNDAELDETECT_MAKE_DP ?= $(shell if [ -f source/d0_blind_id/d0_rijndael.c ]; then echo DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs; fi) - - -.PHONY: all -all: all-$(SUFFIX) - -.PHONY: all-git -all-git: - ./all compile - -.PHONY: all-zip-binary -all-zip-binary: - @echo Nothing to do - -.PHONY: all-zip-source -all-zip-source: - ( cd source/d0_blind_id && ./configure --enable-static --disable-shared $(RIJNDAELDETECT_CONFIGURE) ) - $(MAKE) -C source/d0_blind_id - $(MAKE) -C source/gmqcc - $(MAKE) -C source/qcsrc QCC=$(CURDIR)/source/gmqcc/gmqcc - $(MAKE) -C source/darkplaces sv-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs - $(MAKE) -C source/darkplaces cl-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs - $(MAKE) -C source/darkplaces sdl-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs - +DPSRC = source/darkplaces +D0SRC = source/d0_blind_id +CLIENT = xonotic-local-sdl +SERVER = xonotic-local-dedicated + +# CC and MAKEFLAGS are always set so ?= has no effect, therefore +# use CFLAGS to set default optimisations and support user override +CFLAGS ?= -pipe -march=native -mtune=native -flto=auto +# user can override this with make -j +MAKEFLAGS := -j$(shell nproc) +# DP makefile overrides CFLAGS (exporting CFLAGS does work for d0_blind_id but so does this) +export CC += $(CFLAGS) + +# d0_blind_id header location +export CC += -I$(PWD)/source/ +# d0_blind_id static libs location +export CC += -L$(PWD)/$(D0SRC)/.libs/ +# Player IDs: DP_LINK_CRYPTO needs to be set (else it defaults to "dlopen"), +# it should be set to "shared" but then LIB_CRYPTO gets overridden in DP makefile, +# and we need to set LIB_CRYPTO such that libgmp gets linked +export DP_LINK_CRYPTO=foo +export CFLAGS_CRYPTO=-DLINK_TO_CRYPTO +export LIB_CRYPTO=-ld0_blind_id -lgmp +# AES +export DP_LINK_CRYPTO_RIJNDAEL=shared + + +.PHONY: help +help: + @echo + @printf " \e[1;33m===== Xonotic Makefile for stable and beta releases =====\e[m\n" + @echo + @printf "The DarkPlaces Engine builds will be named \e[1m$(CLIENT) \e[mand \e[1m$(SERVER)\e[m\n" + @printf "and will be preferred by \e[1mxonotic-linux-sdl.sh \e[mand \e[1mxonotic-linux-dedicated.sh \e[mscripts.\n" + @echo + @printf "More info is available at \e[1;36mhttps://gitlab.com/xonotic/xonotic/-/wikis/Compiling\e[m\n" + @echo + @echo "-O3 is already enabled for DarkPlaces Engine. Do not add any math flags!" + @echo + @echo "MAKEFLAGS=$(MAKEFLAGS)" + @echo "CFLAGS= $(CFLAGS)" + @echo + @echo " make clean-sources Delete build objects" + @echo " make clean Delete engine builds and build objects" + @echo + @echo " make update-stable Update to the latest stable release via rsync" + @echo " make update-beta Update to the latest daily autobuild via rsync" + @echo + @printf " make server Compile \e[1m$(SERVER)\e[m\n" + @printf " make client Compile \e[1m$(CLIENT)\e[m\n" + @echo " make both" + @echo + +GIT := $(shell [ -d .git ] && printf "\e[1;31mTo compile from git, please read https://gitlab.com/xonotic/xonotic/-/wikis/Repository_Access\e[m") +ifdef GIT + $(error $(GIT)) +endif + +.EXTRA_PREREQS := $(findstring update-stable,$(MAKECMDGOALS)) $(findstring update-beta,$(MAKECMDGOALS)) + +.PHONY: clean-sources +clean-sources: + $(MAKE) -C $(DPSRC) clean + $(MAKE) -C $(D0SRC) clean .PHONY: clean -clean: clean-$(SUFFIX) - -.PHONY: clean-git -clean-git: - ./all clean - -.PHONY: clean-zip -clean-zip-binary: - @echo Nothing to do - -.PHONY: clean-zip -clean-zip-source: - $(MAKE) -C source/d0_blind_id distclean - $(MAKE) -C source/gmqcc clean - $(MAKE) -C source/qcsrc clean - $(MAKE) -C source/darkplaces clean - - -.PHONY: install-data -install-data: install-data-$(SUFFIX) - -.PHONY: install-data-git -install-data-git: all-git - $(RM) -rf $(DESTDIR)$(LIBDIR)/data - $(INSTALL) -d $(DESTDIR)$(LIBDIR)/data - for p in data/*.pk3; do $(INSTALL) $$p $(DESTDIR)$(LIBDIR)/$$p || exit 1; done - for p in data/*.pk3dir; do ( cd $$p && $(ZIP) -r $(DESTDIR)$(LIBDIR)/$${p%dir} * ) || exit 1; done - -.PHONY: install-data-zip-binary -install-data-zip-binary: all-zip-binary - $(RM) -rf $(DESTDIR)$(LIBDIR)/data - $(INSTALL) -d $(DESTDIR)$(LIBDIR)/data - for p in data/*.pk3; do $(INSTALL) $$p $(DESTDIR)$(LIBDIR)/$$p || exit 1; done - -.PHONY: install-data-zip-source -install-data-zip-source: all-zip-source - $(RM) -rf $(DESTDIR)$(LIBDIR)/data - $(INSTALL) -d $(DESTDIR)$(LIBDIR)/data - for p in data/*.pk3; do $(INSTALL) $$p $(DESTDIR)$(LIBDIR)/$$p || exit 1; done - for p in data/xonotic-*-data*.pk3; do cd source && $(ZIP) $(DESTDIR)$(LIBDIR)/$$p progs.dat menu.dat csprogs.dat; done - - -.PHONY: install-engine -install-engine: install-engine-$(SUFFIX) - -.PHONY: install-engine-git -install-engine-git: all-git - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) xonotic-linux-glx.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-glx.sh - $(INSTALL) xonotic-linux-sdl.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-sdl.sh - $(INSTALL) xonotic-linux-dedicated.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-dedicated.sh - $(INSTALL) darkplaces/darkplaces-sdl $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-sdl - $(INSTALL) darkplaces/darkplaces-glx $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-glx - $(INSTALL) darkplaces/darkplaces-dedicated $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-dedicated - -.PHONY: install-engine-zip-binary -install-engine-zip-binary: all-zip-binary - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) xonotic-linux-glx.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-glx.sh - $(INSTALL) xonotic-linux-sdl.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-sdl.sh - $(INSTALL) xonotic-linux-dedicated.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-dedicated.sh - $(INSTALL) xonotic-$(ARCH)-sdl $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-sdl - $(INSTALL) xonotic-$(ARCH)-glx $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-glx - $(INSTALL) xonotic-$(ARCH)-dedicated $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-dedicated - -.PHONY: install-engine-zip-source -install-engine-zip-source: all-zip-source - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) xonotic-linux-glx.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-glx.sh - $(INSTALL) xonotic-linux-sdl.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-sdl.sh - $(INSTALL) xonotic-linux-dedicated.sh $(DESTDIR)$(LIBDIR)/xonotic-linux-dedicated.sh - $(INSTALL) source/darkplaces/darkplaces-sdl $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-sdl - $(INSTALL) source/darkplaces/darkplaces-glx $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-glx - $(INSTALL) source/darkplaces/darkplaces-dedicated $(DESTDIR)$(LIBDIR)/xonotic-$(ARCH)-dedicated - - -.PHONY: install-links -install-links: - $(INSTALL) -d $(BINDIR) - $(LN) -snf $(LIBDIR)/xonotic-linux-sdl.sh $(DESTDIR)$(BINDIR)/xonotic-sdl - $(LN) -snf $(LIBDIR)/xonotic-linux-glx.sh $(DESTDIR)$(BINDIR)/xonotic-glx - $(LN) -snf $(LIBDIR)/xonotic-linux-dedicated.sh $(DESTDIR)$(BINDIR)/xonotic-dedicated - - -.PHONY: install-doc -install-doc: - $(INSTALL) -d $(DESTDIR)$(DOCDIR)/server - $(CP) -R Docs/* $(DESTDIR)$(DOCDIR)/ - $(CP) -R server/* $(DESTDIR)$(DOCDIR)/server - - -.PHONY: install -install: install-data install-engine install-links install-doc +clean: clean-sources + $(RM) $(CLIENT) $(SERVER) + +.PHONY: update-stable +update-stable: + misc/tools/rsync-updater/update-to-release.sh + +.PHONY: update-beta +update-beta: + misc/tools/rsync-updater/update-to-autobuild.sh + +$(D0SRC)/Makefile: + ( cd $(D0SRC) && ./autogen.sh && ./configure --enable-static --disable-shared ) + +.PHONY: d0_blind_id +d0_blind_id: $(D0SRC)/Makefile + $(MAKE) -C $(D0SRC) + +.PHONY: server +server: d0_blind_id + $(MAKE) -C $(DPSRC) sv-release + cp -v $(DPSRC)/darkplaces-dedicated $(SERVER) + +.PHONY: client +client: d0_blind_id + $(MAKE) -C $(DPSRC) sdl-release + cp -v $(DPSRC)/darkplaces-sdl $(CLIENT) + +.PHONY: both +both: client server + diff --git a/README.md b/README.md index b617a6bd..b2713a86 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,41 @@ ![Xonotic Logo](http://xonotic.org/static/img/xonotic-logo.png) -Xonotic is an addictive, arena-style first person shooter with crisp movement and a wide array of weapons. It combines intuitive mechanics with in-your-face action to elevate your heart rate. Xonotic is and will always be free-to-play. It is available under the [copyleft](https://www.gnu.org/copyleft/)-style [GPLv2](http://www.gnu.org/licenses/gpl-2.0.html) license. +Xonotic is an addictive, arena-style first person shooter with crisp movement and a wide array of weapons. It combines intuitive mechanics with in-your-face action to elevate your heart rate. -*Please note, [Gitlab](http://gitlab.com/xonotic/) is our home for repositories, issue tracking, wikis, etc. The repositories on GitHub are mirrors of GitLab's unless specified otherwise.* +## License + +Xonotic is and will always be free and open source. It is available under the [copyleft](https://www.gnu.org/copyleft/)-style [GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html) license (see the [COPYING](COPYING) file for details). ## Download -### LATEST RELEASE: Xonotic 0.8.2 for Linux, Windows, and macOS +Stable releases and related info are available at https://xonotic.org/download + +[Beta builds](https://gitlab.com/xonotic/xonotic/-/wikis/Autobuilds) are available at https://beta.xonotic.org/autobuild -If you're just here to play, you can download Xonotic as a zip package, torrent, or by using one of [these alternative methods](http://xonotic.org/download/). +*Please note, [Gitlab](https://gitlab.com/xonotic/) is our home for repositories, issue tracking, wikis, etc. The repositories on GitHub are mirrors of GitLab's unless specified otherwise.* -- [Download as torrent](http://dl.xonotic.org/xonotic-0.8.2.zip.torrent) -- [Download as zip](http://dl.xonotic.org/xonotic-0.8.2.zip) +## Community + +The community is primarily active in the [forums](https://forums.xonotic.org/) and [chat rooms](https://gitlab.com/xonotic/xonotic/-/wikis/Chat-Rooms). -No installation required, just unpack and run. Got questions? See the [FAQ](http://xonotic.org/faq) or [live chat](http://xonotic.org/chat/) with us. +## Documentation -**sha256sum**: a22f7230f486c5825b55cfdadd73399c9b0fae98c9e081dd8ac76eca08359ad5 -**Package size**: 946M +[Halogene's Newbie Guide](https://xonotic.org/guide) gives gameplay and client configuration advice. +[Frequently Asked Questions](https://xonotic.org/faq) cover common tech support topics. +[The GitLab wiki](https://gitlab.com/xonotic/xonotic/-/wikis/home) has detailed articles and links for many relevant topics. +[Command Alias & Cvar Search](https://xonotic.org/tools/cacs) is a web interface to browse Xonotic console features. +[Doxygen](https://xonotic.org/doxygen) makes it easier to discover details and dependencies in the code. + +## Developing + +To compile the latest revision from git, [follow this guide](https://gitlab.com/xonotic/xonotic/wikis/Repository_Access). Learn more about the [directory structure here](https://gitlab.com/xonotic/xonotic/wikis/Git). Check out [our project page on GitLab](https://gitlab.com/groups/xonotic) to see [development activity](https://gitlab.com/groups/xonotic/-/activity) and code ([xonotic-data.pk3dir](https://gitlab.com/xonotic/xonotic-data.pk3dir) is where most development takes place). + +Please ensure you've read and understood [Contributing and Getting Write Access](https://gitlab.com/xonotic/xonotic/-/wikis/Repository_Access#contributing-and-getting-write-access) before pushing commits or opening merge requests. ## Contributing -We're mainly looking for help in the following areas: +We're looking for help in the following areas: - [Translations](https://www.transifex.com/team-xonotic/xonotic/) - More info [on the wiki](https://gitlab.com/xonotic/xonotic/-/wikis/home#translating) @@ -38,24 +52,3 @@ We're mainly looking for help in the following areas: - Please don't create anything that looks official (social media accounts, entries on pages like steam, etc.) without contacting us, we like to manage things ourselves to keep the information up to date - All other kinds of PR are very welcome - make videos or articles, share links, spread the word -## Developing - -To compile the latest revision from git, [follow this guide](https://gitlab.com/xonotic/xonotic/wikis/Repository_Access). Learn more about the [directory structure here](https://gitlab.com/xonotic/xonotic/wikis/Git), or check out [our project page on GitLab](https://gitlab.com/groups/xonotic) to see development activity and code ([xonotic-data](https://gitlab.com/xonotic/xonotic-data.pk3dir) is where most development takes place). - -## Community - -The community is primarily active in the [forums](https://forums.xonotic.org/), Matrix and QuakeNet IRC. - -Developer chat is in Matrix in [#dev:xonotic.org](https://matrix.to/#/#dev:xonotic.org) - -General chat and help in Matrix in [#main:xonotic.org](https://matrix.to/#/#main:xonotic.org) - -General chat and help in [#xonotic on irc.quakenet.org](https://webchat.quakenet.org/?channels=xonotic) - -## Wiki - -[Our Gitlab wiki](https://gitlab.com/xonotic/xonotic/wikis/home) has a lot of information related to developing, playing or otherwise contributing to the game. - -## License - -Distributed under the GPLv2 license. See the [COPYING](COPYING) file for more details. diff --git a/misc/buildsrc/dlls.sh b/misc/buildsrc/dlls.sh new file mode 100755 index 00000000..c5c8ff72 --- /dev/null +++ b/misc/buildsrc/dlls.sh @@ -0,0 +1,366 @@ +#!/bin/bash +# +# Xonotic DLL automatic cross-compile script +# by z411 + +d0=$(pwd) + +require () { + if ! dpkg -s "$1" >/dev/null 2>&1 ; then + echo "$1 package is required. Please install it." + exit -1 + fi +} + +prepare () { + case $target_arch in + win32) ARCH="i686" ;; + win64) ARCH="x86_64" ;; + *) echo "Invalid arch (win32 or win64)." && exit -1 ;; + esac + + # Set directories + src_dir="$buildpath/src" + work_dir="$buildpath/work/$target_arch" + pkg_dir="$buildpath/pkg/$target_arch" + out_dir="$buildpath/out/$target_arch" + + # Set arch vars + CHOST="$ARCH-w64-mingw32" + toolchain_file="$d0/toolchain-$CHOST.cmake" + + # Fix for Debian package missing the Windows resource file + zlib1rc_file="$d0/zlib1.rc" + + export LDFLAGS="-L$pkg_dir/lib" + export CPPFLAGS="-I$pkg_dir/include" + + # Check dependencies + require libtool + require mingw-w64 + require automake + require cmake + require nasm + + set -ex + + mkdir -p "$src_dir" + mkdir -p "$work_dir" + mkdir -p "$pkg_dir" +} + +get_this_src () { + dir=$(find . -maxdepth 1 -type d -print | grep -m1 "^\./$1") || return 1 + this_src="$src_dir/$dir" + this_ver="${dir##*-}" +} + +fetch_source () { + cd "$src_dir" + + if get_this_src "$1"; then + echo "Source for $1 already exists." + return 1 + else + echo "Getting source for $1..." + apt source "$1" + get_this_src "$1" + return 0 + fi +} + +verlte () { + printf '%s\n%s' "$1" "$2" | sort -C -V +} + +verlt () { + ! verlte "$2" "$1" +} + +mkcd () { + mkdir -p "$1" + cd "$1" +} + +build_zlib () { + if fetch_source zlib ; then + echo "Fixing zlib prefix..." + sed -i '/zlib PROPERTIES SUFFIX/i set_target_properties(zlib PROPERTIES PREFIX "")' "$this_src/CMakeLists.txt" + + # Debian source package is missing the win32 resource file for some reason, + # so we add it ourselves. + echo "Fixing zlib1.rc..." + mkdir -p "$this_src/win32" + cp "$zlib1rc_file" "$this_src/win32" + fi + + mkcd "$work_dir/zlib" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file"\ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_gmp () { + fetch_source gmp || true + + mkcd "$work_dir/gmp" + "$this_src/configure" --prefix="$pkg_dir" \ + --host="$CHOST" \ + --with-pic \ + --enable-fat \ + --disable-static \ + --enable-shared + make + make install +} + +build_libd0 () { + if [[ -d "$src_dir/d0_blind_id" ]] ; then + echo "Sources already exist." + else + echo "Getting git sources for libd0..." + cd "$src_dir" + git clone https://gitlab.com/xonotic/d0_blind_id.git + cd d0_blind_id + ./autogen.sh + sed -i '/libd0_blind_id_la_LDFLAGS/ s/$/ -no-undefined/' Makefile.am + sed -i '/libd0_rijndael_la_LDFLAGS/ s/$/ -no-undefined/' Makefile.am + fi + + mkcd "$work_dir/libd0" + "$src_dir/d0_blind_id/configure" --with-pic \ + --prefix="$pkg_dir" \ + --host="$CHOST" + make + make install +} + +build_libogg() { + if fetch_source libogg ; then + echo "Fixing win32 def files..." + sed -i 's/^LIBRARY ogg$/LIBRARY libogg/' "$this_src/win32/ogg.def" + fi + + mkcd "$work_dir/libogg" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_libvorbis () { + if fetch_source libvorbis ; then + echo "Fixing win32 def files..." + sed -i 's/^LIBRARY$/LIBRARY libvorbis/' "$this_src/win32/vorbis.def" + sed -i 's/^LIBRARY$/LIBRARY libvorbisenc/' "$this_src/win32/vorbisenc.def" + sed -i 's/^LIBRARY$/LIBRARY libvorbisfile/' "$this_src/win32/vorbisfile.def" + fi + + mkcd "$work_dir/libvorbis" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DBUILD_SHARED_LIBS=ON \ + -DOGG_INCLUDE_DIR="$pkg_dir/include" \ + -DOGG_LIBRARY="$pkg_dir/lib/libogg.dll.a" \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_libtheora () { + if fetch_source libtheora ; then + echo "Fixing mingw32 defs..." + sed -i '1iLIBRARY libtheoradec' "$this_src/win32/xmingw32/libtheoradec-all.def" + sed -i '1iLIBRARY libtheoraenc' "$this_src/win32/xmingw32/libtheoraenc-all.def" + sed -i '/TH_VP31_QUANT_INFO/d' "$this_src/win32/xmingw32/libtheoraenc-all.def" + sed -i '/TH_VP31_HUFF_CODES/d' "$this_src/win32/xmingw32/libtheoraenc-all.def" + fi + + mkcd "$work_dir/libtheora" + "$this_src/autogen.sh" + "$this_src/configure" --host="$CHOST" \ + --prefix="$pkg_dir" \ + --with-ogg="$pkg_dir" \ + --with-vorbis="$pkg_dir" \ + --enable-shared \ + --disable-examples \ + --disable-sdltest \ + --disable-vorbistest \ + --disable-oggtest + make + make install +} + +build_freetype () { + fetch_source freetype || true + + mkcd "$work_dir/freetype" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_libpng16 () { + fetch_source "libpng1.6" || true + + mkcd "$work_dir/libpng1.6" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DPNG_STATIC=OFF \ + -DPNG_TESTS=OFF \ + -DZLIB_INCLUDE_DIR="$pkg_dir/include" \ + -DZLIB_LIBRARY="$pkg_dir/lib/libzlib.dll.a" \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_libjpeg () { + fetch_source libjpeg-turbo || true + + mkcd "$work_dir/libjpeg" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DCMAKE_SYSTEM_PROCESSOR="$ARCH" \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -DENABLE_SHARED=ON \ + -DENABLE_STATIC=OFF \ + -DWITH_TURBOJPEG=OFF \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_curl () { + fetch_source curl || true + + # curl versions older than 7.81.0 used CMAKE instead of CURL for + # private USE identifiers + verlt $this_ver 7.81.0 && PARAM="CMAKE" || PARAM="CURL" + + mkcd "$work_dir/curl" + cmake -DCMAKE_TOOLCHAIN_FILE="$toolchain_file" \ + -DCMAKE_INSTALL_PREFIX="$pkg_dir" \ + -DZLIB_INCLUDE_DIR="$pkg_dir/include" \ + -DZLIB_LIBRARY="$pkg_dir/lib/libzlib.dll.a" \ + -D${PARAM}_USE_SCHANNEL=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_CURL_EXE=OFF \ + -DHTTP_ONLY=ON \ + -G"Unix Makefiles" "$this_src" + make + make install +} + +build_all () { + build_zlib + build_gmp + build_libd0 + build_libogg + build_libvorbis + build_libtheora + build_freetype + build_libpng16 + build_libjpeg + build_curl +} + +install () { + mkdir -p "$out_dir" + + cp -v "$pkg_dir/bin/libgmp-10.dll" "$out_dir" + cp -v "$pkg_dir/bin/libd0_blind_id-0.dll" "$out_dir" + cp -v "$pkg_dir/bin/libd0_rijndael-0.dll" "$out_dir" + cp -v "$pkg_dir/bin/libogg.dll" "$out_dir" + cp -v "$pkg_dir/bin/libvorbis.dll" "$out_dir" + cp -v "$pkg_dir/bin/libvorbisenc.dll" "$out_dir" + cp -v "$pkg_dir/bin/libvorbisfile.dll" "$out_dir" + cp -v "$pkg_dir/bin/libtheora-0.dll" "$out_dir" + cp -v "$pkg_dir/bin/libfreetype.dll" "$out_dir/libfreetype-6.dll" + cp -v "$pkg_dir/bin/zlib1.dll" "$out_dir" + cp -v "$pkg_dir/bin/libpng16.dll" "$out_dir" + cp -v "$pkg_dir/bin/libjpeg-62.dll" "$out_dir/libjpeg.dll" + cp -v "$pkg_dir/bin/libcurl.dll" "$out_dir/libcurl-4.dll" + + # Required for win32 builds + if [ "$ARCH" = "i686" ]; then + cp -v "/usr/lib/gcc/i686-w64-mingw32/10-win32/libgcc_s_dw2-1.dll" "$out_dir" + fi + + cd "$out_dir" + ${CHOST}-strip -s *.dll +} + +clean () { + rm -rf "$buildpath/src" + rm -rf "$buildpath/work" + rm -rf "$buildpath/pkg" + rm -rf "$buildpath/out" +} + +list () { + echo "Compilable libraries:" + echo + echo gmp + echo libd0 + echo libogg + echo libvorbis + echo libtheora + echo freetype + echo zlib + echo libpng16 + echo libjpeg + echo curl +} + +usage () { + echo "Experimental Windows DLL cross-compiling for Xonotic" + echo "by z411" + echo + echo "usage: $0 [build path] [arch]" + echo + echo "available steps (require arch):" + echo " : build specified library" + echo " build_all: build all libraries" + echo " install: copy built DLLs into output directory" + echo " all: do all the previous steps in order" + echo + echo "steps without arch:" + echo " list: list all compilable libraries" + echo " clean: delete all work" + echo + echo "arch can be:" + echo " win32" + echo " win64" +} + +step=$1 +buildpath=$2 +target_arch=$3 + +case $step in + gmp) prepare && build_gmp ;; + libd0) prepare && build_libd0 ;; + libogg) prepare && build_libogg ;; + libvorbis) prepare && build_libvorbis ;; + libtheora) prepare && build_libtheora ;; + freetype) prepare && build_freetype ;; + zlib) prepare && build_zlib ;; + libpng16) prepare && build_libpng16 ;; + libjpeg) prepare && build_libjpeg ;; + curl) prepare && build_curl ;; + build_all) prepare && build_all ;; + install) prepare && install ;; + all) prepare && build_all && install ;; + clean) clean ;; + list) list ;; + *) usage ;; +esac diff --git a/misc/buildsrc/toolchain-i686-w64-mingw32.cmake b/misc/buildsrc/toolchain-i686-w64-mingw32.cmake new file mode 100644 index 00000000..3507d720 --- /dev/null +++ b/misc/buildsrc/toolchain-i686-w64-mingw32.cmake @@ -0,0 +1,25 @@ +# Sample toolchain file for building for Windows from an Ubuntu Linux system. +# +# Typical usage: +# *) install cross compiler: `sudo apt-get install mingw-w64 g++-mingw-w64` +# *) cd build +# *) cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-Ubuntu-mingw32.cmake .. + +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX i686-w64-mingw32) + +# cross compilers to use for C and C++ +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +# target environment on the build host system +# set 1st to dir with the cross compiler's C/C++ headers/libs +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) + +# modify default behavior of FIND_XXX() commands to +# search for headers/libs in the target environment and +# search for programs in the build host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/misc/buildsrc/toolchain-x86_64-w64-mingw32.cmake b/misc/buildsrc/toolchain-x86_64-w64-mingw32.cmake new file mode 100644 index 00000000..3dbc9b1b --- /dev/null +++ b/misc/buildsrc/toolchain-x86_64-w64-mingw32.cmake @@ -0,0 +1,25 @@ +# Sample toolchain file for building for Windows from an Ubuntu Linux system. +# +# Typical usage: +# *) install cross compiler: `sudo apt-get install mingw-w64 g++-mingw-w64` +# *) cd build +# *) cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-Ubuntu-mingw64.cmake .. + +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) + +# cross compilers to use for C and C++ +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +# target environment on the build host system +# set 1st to dir with the cross compiler's C/C++ headers/libs +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) + +# modify default behavior of FIND_XXX() commands to +# search for headers/libs in the target environment and +# search for programs in the build host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/misc/buildsrc/zlib1.rc b/misc/buildsrc/zlib1.rc new file mode 100644 index 00000000..234e641c --- /dev/null +++ b/misc/buildsrc/zlib1.rc @@ -0,0 +1,40 @@ +#include +#include "../zlib.h" + +#ifdef GCC_WINDRES +VS_VERSION_INFO VERSIONINFO +#else +VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE +#endif + FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + BEGIN + VALUE "FileDescription", "zlib data compression library\0" + VALUE "FileVersion", ZLIB_VERSION "\0" + VALUE "InternalName", "zlib1.dll\0" + VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" + VALUE "OriginalFilename", "zlib1.dll\0" + VALUE "ProductName", "zlib\0" + VALUE "ProductVersion", ZLIB_VERSION "\0" + VALUE "Comments", "For more information visit http://www.zlib.net/\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/misc/infrastructure/checkupdate.txt b/misc/infrastructure/checkupdate.txt index c45b6a2e..48726478 100644 --- a/misc/infrastructure/checkupdate.txt +++ b/misc/infrastructure/checkupdate.txt @@ -1,15 +1,15 @@ # Current released version. -V 0.8.2 +V 0.8.5 # Download URL. -D http://dl.xonotic.org/xonotic-0.8.2.zip +D https://dl.xonotic.org/xonotic-0.8.5.zip # When releasing, create this string by: # date -u +%Y%m%d%H%M%S -d'now + 3 months' -C 20170701181425 +C 20220930222800 # Website URL. -U http://www.xonotic.org/ +U https://xonotic.org # Terms of Service revision number (integer). # Increase by 1 every time tos.txt is updated. diff --git a/misc/infrastructure/keygen/config.pl b/misc/infrastructure/keygen/config.pl index 28f9a79f..97da9e13 100644 --- a/misc/infrastructure/keygen/config.pl +++ b/misc/infrastructure/keygen/config.pl @@ -6,15 +6,21 @@ { my ($inc) = @_; return 0 if ($inc >= 0) && check_dnsbl([qr/.*:.*:.*/], [], ['torexit.dan.me.uk', 'aspews.ext.sorbs.net']); - return 0 if ($inc >= 0) && check_banlist('http://rm.endoftheinternet.org/~xonotic/bans/?action=list&servers=*'); - return 0 if check_sql('dbi:mysql:dbname=xonotic_ca', 'xonotic_ca', '************', 'ip', $inc); + return 0 if ($inc >= 0) && check_banlist('http://rm.sudo.rm-f.org/~xonotic/bans/?action=list&servers=*'); + #return 0 if check_sql('dbi:mysql:dbname=xonotic-ca', 'xonotic-ca', '************', 'ip', 0.2, 1, 20, 1000, $inc); + return 0 if check_sql('dbi:Pg:dbname=xonotic-ca', '', '', 'ip', 0.2, 1, 20, 1000, $inc); 1; } }, - 15 => + 1 => { - name => "Xonotic testing", - check => sub { 1; } + name => "Xonotic Hub", + check => sub + { + my ($inc) = @_; + return 0 if check_ipfiles('/home/xonotic-build/xonotic-release-build/misc/infrastructure/xhub/ips'); + 1; + } } ); -$default_ca = 15; +$default_ca = 0; diff --git a/misc/infrastructure/keygen/crypto-keygen-standalone b/misc/infrastructure/keygen/crypto-keygen-standalone index af632f45..852b24bc 100755 Binary files a/misc/infrastructure/keygen/crypto-keygen-standalone and b/misc/infrastructure/keygen/crypto-keygen-standalone differ diff --git a/misc/infrastructure/keygen/response.d0ir b/misc/infrastructure/keygen/response.d0ir index a74fb37a..04461155 100755 --- a/misc/infrastructure/keygen/response.d0ir +++ b/misc/infrastructure/keygen/response.d0ir @@ -2,7 +2,7 @@ BEGIN { - $ENV{PATH} = "/usr/bin:/bin"; + $ENV{PATH} = "/usr/bin:/bin"; } # if we are suid, set uid := euid @@ -24,6 +24,14 @@ sub error($) exit 0; } +sub check_ipfiles($) +{ + my ($dir) = @_; + my $ip = $ENV{REMOTE_ADDR}; + return 0 if -f "$dir/$ip"; + return -1; +} + sub check_dnsbl($$@) { my ($goodpatterns, $badpatterns, $list) = @_; @@ -34,20 +42,28 @@ sub check_dnsbl($$@) # check goodpatterns for(@$goodpatterns) { - return 0 - if $name =~ /^(??{$_})$/ || $addr =~ /^(??{$_})$/; + if($name =~ /^(??{$_})$/ || $addr =~ /^(??{$_})$/) + { + return 0; + } } # check badpatterns for(@$badpatterns) { - return -1 - if $name =~ /^(??{$_})$/ || $addr =~ /^(??{$_})$/; + if($name =~ /^(??{$_})$/ || $addr =~ /^(??{$_})$/) + { + warn "$addr/$name blocked by $_"; + return -1; + } } # is he tor? my $h = gethostbyname $addr; - return -1 - if not defined $h; + if(not defined $h) + { + warn "$addr blocked by gethostbyname()"; + return -1; + } my $blprefix = join '.', reverse unpack 'C4', $h; my $i = 0; @@ -58,63 +74,108 @@ sub check_dnsbl($$@) my $h2 = gethostbyname $hn; next if not defined $h2; + my $h2_text = join '.', reverse unpack 'C4', $h2; + warn "$addr blocked by $hn -> $h2_text"; return -1; } return 0; } +# MySQL # create table ip ( id INT AUTO_INCREMENT PRIMARY KEY, ip VARCHAR(64), t DATETIME, error BOOLEAN, INDEX(ip), INDEX(t), INDEX(error) ); +# standard SQL +# CREATE TABLE ip ( id INT PRIMARY KEY generated always as identity, ip VARCHAR(64), t TIMESTAMP, error BOOLEAN ); +# CREATE INDEX ip_index ON ip ( ip, t, error ); our $__CACHED_DBH__; -sub check_sql($$$$$) +sub check_ip_record +{ + my ($DBH, $tbl, $ip) = @_; + # MySQL + #my $status = $DBH->selectrow_arrayref("select count(*) from $tbl where ip=? and error=false and t>date_sub(now(), interval 7 day)", undef, $ip) + # standard SQL + my $status = $DBH->selectrow_arrayref("select count(*) from $tbl where ip=? and error=false and t>(now() - interval '7' day)", undef, $ip) + or die "DBI/DBD: $!"; + return $status->[0]; +} +sub insert_ip_record +{ + my ($DBH, $tbl, $ip) = @_; + # MySQL + #my $status = $DBH->selectall_arrayref("select error, t>date_sub(now(), interval 7 day) from $tbl where ip=?", undef, $ip) + # standard SQL + my $status = $DBH->selectall_arrayref("select error, t>(now() - interval '7' day) from $tbl where ip=?", undef, $ip) + or die "DBI/DBD: $!"; + if(@$status) + { + if($status->[0][0] || !$status->[0][1]) # error, or after interval + { + $DBH->do("update $tbl set error=false, t=now() where ip=?", undef, $ip); + return 0; + } + else # too soon + { + return 1; + } + } + else + { + $DBH->do("insert into $tbl(ip, error, t) values(?, false, now())", undef, $ip); + return 0; + } +} +sub delete_ip_record +{ + my ($DBH, $tbl, $ip) = @_; + $DBH->do("update $tbl set error=true where ip=?", undef, $ip); +} + +sub check_sql($$$$$$$$$) { - my ($dsn, $u, $p, $tbl, $inc) = @_; + my ($dsn, $u, $p, $tbl, $per32, $per24, $per16, $per8, $inc) = @_; my $ip = $ENV{REMOTE_ADDR}; my $DBH = ($__CACHED_DBH__ ? $__CACHED_DBH__ : ($__CACHED_DBH__ = DBI->connect($dsn, $u, $p, { RaiseError => 1, AutoCommit => 0 }))) or die "DBI/DBD: $!"; - $DBH->do("set character set utf8"); - $DBH->do("set names utf8"); + eval { + # PostgreSQL defaults to utf8 everywhere so we don't need to set it + # MySQL defaults to latin1 + #$DBH->do("set character set utf8"); + #$DBH->do("set names utf8"); + #$DBH->do("set time_zone = '+0:00'"); + # standard SQL + $DBH->do("SET TIME ZONE +0"); + } or do { + undef $__CACHED_DBH__; + die $@; + }; if($inc < 0) { - $DBH->do("update $tbl set error=true where ip=?", undef, $ip); + delete_ip_record($DBH, $tbl, $ip); $DBH->commit(); $DBH->disconnect(); return 0; } elsif($inc == 0) { - my $status = $DBH->selectrow_arrayref("select count(*) from $tbl where ip=? and error=false and t>date_sub(now(), interval 7 day)", undef, $ip) - or die "DBI/DBD: $!"; + my $status = check_ip_record($DBH, $tbl, $ip); $DBH->disconnect(); - return $status->[0] ? -1 : 0; + if ($status) + { + warn "$ip blocked by SQL"; + } + return $status; } else { - my $status = $DBH->selectall_arrayref("select error, t>date_sub(now(), interval 7 day) from $tbl where ip=?", undef, $ip) - or die "DBI/DBD: $!"; - if(@$status) - { - if($status->[0][0] || !$status->[0][1]) # error, or after interval - { - $DBH->do("update $tbl set error=false, t=now() where ip=?", undef, $ip); - $DBH->commit(); - $DBH->disconnect(); - return 0; - } - else # too soon - { - $DBH->disconnect(); - return -1; - } - } - else + my $status = insert_ip_record($DBH, $tbl, $ip); + $DBH->commit(); + $DBH->disconnect(); + if ($status) { - $DBH->do("insert into $tbl(ip, error, t) values(?, false, now())", undef, $ip); - $DBH->commit(); - $DBH->disconnect(); - return 0; + warn "$ip blocked by SQL"; } + return $status; } } @@ -126,7 +187,11 @@ sub check_banlist($) for(0..@s/4-1) { my $i = $s[4*$_]; - return 1 if "$ip." =~ /^\Q$i\E\./; + if("$ip." =~ /^\Q$i\E\./) + { + warn "$ip blocked by SQL"; + return 1; + } } return 0; } @@ -214,6 +279,9 @@ Content-type: text/html
To use another CA, please enter its number here before using this page: +
+ REMOTE_HOST=$ENV{REMOTE_HOST}
+ REMOTE_ADDR=$ENV{REMOTE_ADDR} EOF diff --git a/misc/infrastructure/xonotic-release-build.cron b/misc/infrastructure/xonotic-release-build.cron index 1adf318f..f3662df5 100755 --- a/misc/infrastructure/xonotic-release-build.cron +++ b/misc/infrastructure/xonotic-release-build.cron @@ -39,7 +39,7 @@ fi set -ex -ssh autobuild-release-uploader@beta.xonotic.org ' +test -z "$RELEASETYPEDIR" && ssh autobuild-release-uploader@beta.xonotic.org ' set -e; s0=`date -d "now - 7 days - 12 hours" +%s`; s00=`date -d "now - 60 days - 12 hours" +%s`; @@ -57,6 +57,7 @@ ssh autobuild-release-uploader@beta.xonotic.org ' fi; done ' + cd ~/xonotic-release-build ./all clean --reclone # ./all checkout maint @@ -82,10 +83,12 @@ while HEAD -C xonotic:g-23 http://beta.xonotic.org/autobuild/"$RELEASETYPEDIR""X d="$d0"_"$i" done RELEASEDATE=$d ./all release +sha512sum Xonotic-$d*.zip > Xonotic-$d.sha512 for X in Xonotic-$d*.zip; do ln -snf "$X" "Xonotic-latest${X#Xonotic-$d}" done -rsync -vaSHP Xonotic*.zip autobuild-release-uploader@beta.xonotic.org:"$RELEASETYPEDIR" +sha512sum Xonotic-latest*.zip > Xonotic-latest.sha512 +rsync -vaSHP Xonotic*.zip Xonotic*.sha512 autobuild-release-uploader@beta.xonotic.org:"$RELEASETYPEDIR" if [ -z "$RELEASETYPEDIR" ]; then ssh autobuild-release-uploader@beta.xonotic.org sh ../../update-rsync.sh "$d" fi diff --git a/misc/logos/xonotic.appdata.xml b/misc/logos/xonotic.appdata.xml index 5d2b7557..215127d0 100644 --- a/misc/logos/xonotic.appdata.xml +++ b/misc/logos/xonotic.appdata.xml @@ -18,6 +18,7 @@ Xonotic ist ein freier und schneller Ego-Shooter, der ein Gameplay im Arenastil mit hektischen Manövern und einer großen Auswahl an Waffen kombiniert. +

Xonotic est un jeu de tir à la première personne gratuit, qui combine un style de jeu en arène rapide et addictif avec une large sélection d'armes. @@ -38,6 +39,7 @@ bis zu gesponsorten Turnieren ermöglicht Xonotic jedem E-Sport-Liebhaber eine Teilnahme in Wettbewerben, die von der aufgeschlossenen Gemeinschaft veranstaltet werden. +

Xonotic est facile à apprendre, mais difficile à maîtriser ! Outre une action intense pour les joueurs débutants, le jeu propose aussi des @@ -54,6 +56,7 @@ Einstellungen und Server, ein funktionierendes Anti-Cheat-System, der Zuschauermodus, und die Möglichkeit, Spielen zuzusehen und sie aufzuzeichnen, machen Xonotic interessant für wetteifernde Spieler. +

Des fonctionnalités comme les items à apparence simplifiée, des configurations et serveurs entièrement personnalisables, un système @@ -62,13 +65,13 @@ compétitifs.

- https://www.xonotic.org + https://xonotic.org - https://www.xonotic.org/m/uploads/2012/07/frontpage_005.jpg - https://www.xonotic.org/m/uploads/2012/07/frontpage_006.jpg - https://www.xonotic.org/m/uploads/2012/07/frontpage_007.jpg - https://www.xonotic.org/m/uploads/2012/07/frontpage_008.jpg - https://www.xonotic.org/m/uploads/2012/07/frontpage_003.jpg + https://xonotic.org/m/uploads/2012/07/frontpage_005.jpg + https://xonotic.org/m/uploads/2012/07/frontpage_006.jpg + https://xonotic.org/m/uploads/2012/07/frontpage_007.jpg + https://xonotic.org/m/uploads/2012/07/frontpage_008.jpg + https://xonotic.org/m/uploads/2012/07/frontpage_003.jpg mail@asciiwolf.com diff --git a/misc/tools/all/release.subr b/misc/tools/all/release.subr index f3202c2c..6894f3fd 100644 --- a/misc/tools/all/release.subr +++ b/misc/tools/all/release.subr @@ -2,6 +2,13 @@ release_common() { export LC_ALL=C + if [ -z "$MAKEFLAGS" ]; then + ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1` + if [ $ncpus -gt 1 ]; then + export MAKEFLAGS=-j$ncpus + fi + fi + release_args="$cmd $*" msg "*** $release_args: start" release_starttime=`date +%s` @@ -173,9 +180,12 @@ case "$cmd" in verbose cd Xonotic verbose mkdir data source source/darkplaces source/gmqcc source/d0_blind_id mapping verbose rm -rf misc/builddeps - verbose mv misc/buildfiles/win32 bin32 || true - verbose mv bin32/SDL.dll . || true - verbose mv misc/buildfiles/win64 bin64 || true + #verbose mv bin32/SDL.dll . || true # Leftover? + + # We're going to be building these later + #verbose mv misc/buildfiles/win32 bin32 || true + #verbose mv misc/buildfiles/win64 bin64 || true + verbose mv misc/buildfiles/osx/* . || true verbose rm -rf misc/buildfiles verbose rm -rf misc/pki @@ -191,13 +201,16 @@ case "$cmd" in rm -f Xonotic/key_15.d0pk ( verbose cd Xonotic/mapping - verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301.tar.bz2 - verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301-win32-7z.exe - for X in *-7z.exe; do - 7za x "$X" - rm -f "$X" - done + # bones_was_here: don't ship 10 year old netradiant + # also seems better to update netradiant independently of xonotic versions + #verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301.tar.bz2 + #verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301-win32-7z.exe + #for X in *-7z.exe; do + # 7za x "$X" + # rm -f "$X" + #done # TODO possibly include other tools? + printf "Please find links to NetRadiant builds at https://netradiant.gitlab.io or https://xonotic.org/download\nNetRadiant source available at https://gitlab.com/xonotic/netradiant\n" > NetRadiant\ links.txt ) ./all each git rev-parse HEAD > Xonotic/misc/git-revisions.txt ;; @@ -265,6 +278,32 @@ case "$cmd" in ;; esac ;; + release-dlls-compile) + release_common + arch=$1 + buildpath=$2 + targetdir=$3 + mkdir -p "$targetdir" + ( + cd "misc/buildsrc" + verbose ./dlls.sh all "$buildpath" "$arch" + ) + verbose cp -v $buildpath/out/$arch/* "$targetdir" + ;; + release-dlls-win32) + release_common + verbose "$SELF" release-dlls-compile win32 /tmp/dlls Xonotic/bin32 + ;; + release-dlls-win64) + release_common + verbose "$SELF" release-dlls-compile win64 /tmp/dlls Xonotic/bin64 + ;; + release-dlls) + release_common + verbose "$SELF" release-dlls-win32 + verbose "$SELF" release-dlls-win64 + verbose rm -rf /tmp/dlls + ;; release-engine-win32) release_common #good=true @@ -304,7 +343,7 @@ case "$cmd" in #verbose "$SELF" release-getbinary Xonotic/xonotic-linux64-dedicated || good=false #$good verbose "$SELF" release-compile linux64 \ - 'STRIP=: CC="gcc -m64 -g1 -I../../../.deps/include -L../../../.deps/lib -DSUPPORTIPV6" DP_LINK_CRYPTO=shared LIB_CRYPTO="../../../.deps/lib/libd0_blind_id.a ../../../.deps/lib/libgmp.a" DP_LINK_CRYPTO_RIJNDAEL=dlopen DP_LINK_JPEG=shared LIB_JPEG=/usr/lib/x86_64-linux-gnu/libjpeg.a DP_LINK_ODE=shared CFLAGS_ODE="-DUSEODE -DLINK_TO_LIBODE -DdDOUBLE" LIB_ODE="../../../.deps/lib/libode.a -lstdc++ -pthread" DP_LINK_ZLIB=shared' \ + 'STRIP=: CC="gcc -m64 -g1 -I../../../.deps/include -L../../../.deps/lib -DSUPPORTIPV6" DP_LINK_CRYPTO=shared LIB_CRYPTO="../../../.deps/lib/libd0_blind_id.a ../../../.deps/lib/libgmp.a" DP_LINK_CRYPTO_RIJNDAEL=shared DP_LINK_JPEG=shared LIB_JPEG=/usr/lib/x86_64-linux-gnu/libjpeg.a DP_LINK_ODE=shared CFLAGS_ODE="-DUSEODE -DLINK_TO_LIBODE -DdDOUBLE" LIB_ODE="../../../.deps/lib/libode.a -lstdc++ -pthread" DP_LINK_ZLIB=shared' \ release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated' ;; release-engine) @@ -425,16 +464,18 @@ case "$cmd" in # pre-1.0: compatible with any other pre-1.0 verbose sed " s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /; - s/^gameversion_min [0-9]*/gameversion_min 0/; s/^gameversion_max [0-9]*/gameversion_max 9999/; " < xonotic-common.cfg > xonotic-common.cfg.new + # Following line was included in sed above, ref https://gitlab.com/xonotic/xonotic-data.pk3dir/-/merge_requests/1034 + # s/^gameversion_min [0-9]*/gameversion_min 0/; else # >= 1.0 verbose sed " s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /; - s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/; s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/; " < xonotic-common.cfg > xonotic-common.cfg.new + # Following line was included in sed above, ref https://gitlab.com/xonotic/xonotic-data.pk3dir/-/merge_requests/1034 + # s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/; fi mv xonotic-common.cfg.new xonotic-common.cfg case "$RELEASETYPE" in @@ -574,6 +615,7 @@ case "$cmd" in release_common verbose "$SELF" release-prepare verbose "$SELF" release-maps + verbose "$SELF" release-dlls verbose "$SELF" release-engine verbose "$SELF" release-qc verbose "$SELF" release-pack diff --git a/misc/tools/all/xonotic.subr b/misc/tools/all/xonotic.subr index d0e44f4b..3acd42e5 100644 --- a/misc/tools/all/xonotic.subr +++ b/misc/tools/all/xonotic.subr @@ -337,15 +337,6 @@ case "$cmd" in fi set -- "darkplaces/darkplaces$client" -xonotic "$@" - # if pulseaudio is running: USE IT - if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then - if ps -C pulseaudio >/dev/null; then - if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then - export SDL_AUDIODRIVER=pulse - fi - fi - fi - binary=$1 if [ x"$USE_GDB" = x"yes" ]; then diff --git a/misc/tools/midi2cfg/tuba-play.cfg b/misc/tools/midi2cfg/tuba-play.cfg index b65976cb..978b1410 100644 --- a/misc/tools/midi2cfg/tuba-play.cfg +++ b/misc/tools/midi2cfg/tuba-play.cfg @@ -16,4 +16,7 @@ bot_god 1 bot_ignore_bots 1 sv_cheats 1 +bind r +moveup +bind f +movedown + exec tuba-settings.cfg diff --git a/misc/tools/midi2cfg/tuba-record.cfg b/misc/tools/midi2cfg/tuba-record.cfg index f90f8f7a..55f2a61c 100644 --- a/misc/tools/midi2cfg/tuba-record.cfg +++ b/misc/tools/midi2cfg/tuba-record.cfg @@ -1,13 +1,18 @@ -menu_vid_width 1280 -menu_vid_height 720 -vid_width 1280 -vid_height 720 +menu_vid_width 1920 +menu_vid_height 1080 +vid_width 1920 +vid_height 1080 +vid_fullscreen 0 cl_capturevideo_framestep 1 -cl_capturevideo_fps 25 +cl_capturevideo_fps 30 +cl_capturevideo_ogg_theora_quality 63 +cl_capturevideo_ogg_vorbis_quality 10 r_motionblur 0 bind x "toggle cl_capturevideo" exec effects-normal.cfg +hud_panel_centerprint 0 + exec tuba-play.cfg diff --git a/misc/tools/xonotic-map-compiler-optionsfile b/misc/tools/xonotic-map-compiler-optionsfile index 6c40e853..7693201b 100755 --- a/misc/tools/xonotic-map-compiler-optionsfile +++ b/misc/tools/xonotic-map-compiler-optionsfile @@ -15,9 +15,9 @@ tstart=`date +%s` lasttime=`cat ~/.xonotic-map-compiler-autobuild/"${M##*/}".buildtime 2>/dev/null || true` if [ -n "$lasttime" ] ; then - echo "Done in approximately $((($lasttime+59)/60)) minutes." + echo "Predicted build time is $((($lasttime+59)/60)) minutes." if [ -n "$IRCSPAM" ]; then - echo "Done in approximately $((($lasttime+59)/60)) minutes." | $IRCSPAM >/dev/null 2>&1 || true + echo "Predicted build time is $((($lasttime+59)/60)) minutes." | $IRCSPAM >/dev/null 2>&1 || true fi fi diff --git a/misc/tools/xonotic-map-screenshot b/misc/tools/xonotic-map-screenshot index f402d2d8..5d1e6dbb 100755 --- a/misc/tools/xonotic-map-screenshot +++ b/misc/tools/xonotic-map-screenshot @@ -17,6 +17,7 @@ count=`yes x | head -n "$count" | tr -cd x` +'vid_fullscreen 0' \ +'exec effects-ultra.cfg' \ "$@" \ + +'cl_welcome_in_menu_dialog 0' \ +'sv_precacheplayermodels 0' \ +'cl_hidewaypoints 1' \ +'cl_movement 0' \ diff --git a/server/server.cfg b/server/server.cfg index faf72886..9d266a02 100644 --- a/server/server.cfg +++ b/server/server.cfg @@ -19,6 +19,10 @@ //sv_public 1 // 0 or -1 (see description) if the server should not be on the public servers list //hostname "Xonotic $g_xonoticversion Server" // this name will appear on the server list (the $g_xonoticversion gets replaced with the current version) //sv_motd "" // displayed on connect - good place for contact info (IRC, forum nick, etc.) so players can reach you when something is wrong with your server +//sv_termsofservice_url "https://yourdomain.tld/path/to/tos" // URL for the Terms of Service for playing on your server +// It is RECOMMENDED to supply such a document containing information about if and how you collect and process user data (bridging to IRC, player stats etc), +// contact information, rules and similar information. +// This document will be shown in the server join dialog. // This sets the remote console password on the server, you also need to set the cvar to the same value on your client to use the 'rcon' command. // Empty means rcon is disabled. diff --git a/xonotic-linux-sdl.sh b/xonotic-linux-sdl.sh index e4ae857e..f96c83f9 100755 --- a/xonotic-linux-sdl.sh +++ b/xonotic-linux-sdl.sh @@ -17,7 +17,10 @@ case "$(uname -m)" in *) arch="linux64" ;; esac -xonotic="xonotic-${arch}-${mode}" +# prefer locally built binary if available (see: Makefile) +xonotic="xonotic-local-${mode}" +[ -x "$xonotic" ] || xonotic="xonotic-${arch}-${mode}" +echo "Executing: $xonotic ${@}" set -- ./${xonotic} "${@}" @@ -119,13 +122,4 @@ case "$xserver" in ;; esac -# if pulseaudio -if [ -z "$SDL_AUDIODRIVER" ]; then - if ps -C pulseaudio >/dev/null; then - if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then - export SDL_AUDIODRIVER=pulse - fi - fi -fi - exec "$@"