sobota, 30 marca 2024

Kompilacja Fluxbox 1.3.7 kompilatorem C++ 17 (GCC 11)

Po aktualizacji systemu jakiś czas temu okazało się, że posiadając nową wersję gcc w systemie nie byłem w stanie poprawnie skompilować Fluxboksa. Błąd wyglądał tak:

util/fluxbox-remote.cc: In function ‘int main(int, char**)’:
util/fluxbox-remote.cc:76:32: error: ordered comparison of pointer with integer zero (‘unsigned char*’ and ‘int’)
   76 |             && text_prop.value > 0
      |                ~~~~~~~~~~~~~~~~^~~

Całe szczęście jest to stary błąd (#1138) naprawiony lata temu. O ile jednak link do łatki na stronie stricte Fluxboksowej już nie działa, znajdziemy łatkę na stronie paczki Fluksboksa w AUR oraz wśród społeczności Gentoo.

Jako, że łatka nie jest duża pozwolę sobie wkleić ją do tego posta:

http://git.fluxbox.org/fluxbox.git/patch/?id=22866c4d30f5b289c429c5ca88d800200db4fc4f
https://bugs.gentoo.org/732782

From 22866c4d30f5b289c429c5ca88d800200db4fc4f Mon Sep 17 00:00:00 2001
From: John Sennesael <john@aminking.com>
Date: Mon, 2 Nov 2015 15:14:32 -0600
Subject: fixes bug #1138

---
 util/fluxbox-remote.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/util/fluxbox-remote.cc b/util/fluxbox-remote.cc
index 59852e6..504015b 100644
--- a/util/fluxbox-remote.cc
+++ b/util/fluxbox-remote.cc
@@ -73,7 +73,7 @@ int main(int argc, char **argv) {
     if (strcmp(cmd, "result") == 0) {
         XTextProperty text_prop;
         if (XGetTextProperty(disp, root, &text_prop, atom_result) != 0
-            && text_prop.value > 0
+            && text_prop.value != 0
             && text_prop.nitems > 0) {
 
             printf("%s", text_prop.value);
--
cgit v0.11.2

Wystarczy, że zapiszecie tekst powyżej np. jako c-plus-plus-17.patch i będąc w głownym katalogu źródeł Fluxboksa wydacie polecenie (przy czym plik .patch musi być jeden katalog wyżej):

patch -Np1 < ../c-plus-plus-17.patch

Po wszystkim kompilacja powinna przebiec bez problemów.

sobota, 12 września 2020

Stawiamy serwer Unreal (OldUnreal 227i/j patch) na linuksie

Słowem wstępu

Gra wydana w 1998 roku z silnikiem obecnie rozwijanym przez społeczność portalu oldunreal.com.

Opiszę tutaj procedurę dla sytuacji gdy serwer znajduje się na maszynie do której nie macie fizycznego dostępu czyli logujecie się przez ssh i w taki sposób wszystkim zarządzacie.

Wymagania podstawowe

Przede wszystkim musimy mieć grę, i tutaj możemy mieć albo wersję Gold albo zwykłą - tj. bez dodatku Return to Na Pali. Jeśli macie golda będzie łatwiej bo wersja w której wyszedł Gold od razu nadaje się do nałożenia łatki ze strony oldunreal.com. Jeśli macie wersję bazową będziecie musieli nałożyć kilka łatek zanim łatka na 227i pozwoli się zainstalować.

Obecnie oficjalnie dostępnym patchem jest 227i - a co za tym idzie musicie upewnić się, że macie zainstalowane paczki pozwalające uruchamiać programy skompilowane dla architektury x86 bowiem tylko pod tą architekturę są skompilowane pliki wykonywalne w tej wersji. Jako osoba zaznajomiona z Unrealową społecznością korzystam z łatki 227j v47, która ma już binarki dla systemów 64-bitowych. Także gdy będziecie mieli publiczny dostęp do wersji 227j nie będzie trzeba się już o to martwić.

Zaczynamy stawiać serwer

Przyjmę, że pliki gry/serwera są już na maszynie na której będziecie wszystko budować. W katalogu z grą i podkatalogu System(lub System64 dla wersji 227j i dalszych) macie plik UCCLinux.bin, któremu musimy nadać prawa wykonywania:

chmod +x System/UCCLinux.bin

Ten plik pozwala nam na uruchomienie serwera, natomiast całkiem fajnie zrobić sobie prosty skrypt w bashu, który od ponownie uruchomi serwer w przypadku awarii. Skorzystamy tutaj z tego co mówi nam wiki OldUnreal. Ja tworzę go w głównym katalogu gry i zapisuję jako prosty skrypt basha:

#!/bin/sh

until ./System/UCCLinux.bin server DMDeck16?Game=Unrealshare.Deathmatchgame; do
        echo "Server 'UCCLinux.bin' crashed with exit code $?. Respawning.." >&2
        sleep 1
   done

I nadajemy mu prawa wykonywania za pomocą:

chmod +x nazwa_waszego_skryptu

 Teraz zadbajmy aby nasz serwer mógł być widoczny z poziomu gry, w tym celu musimy zaktualizować odniesienia do masterserwerów gry. Szukamy analogicznych wpisów do tych poniżej w pliku System/UnrealLinux.ini i je aktualizujemy:

ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.oldunreal.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hlkclan.net MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.333networks.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hypercoop.tk MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.newbiesplayground.net MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.errorist.tk MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.qtracker.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master2.oldunreal.com MasterServerPort=27900

Dla systemów linuksowych należy jeszcze włączyć UpLink serwera, ten sam plik:

[IpServer.UdpServerUplink]
DoUplink=True

I teraz drobne niedociągnięcie ze strony developerów(a raczej, dewelopera - no niestety), otóż plik konfiguracyjny UnrealLinux.ini nie posiada wszystkich wpisów, które posiada Unreal.ini. I tak oto, aby nadać nazwę naszemu serwerowi i poprawnie wyświetlać MOTD musimy przekopiować z Unreal.ini do UnrealLinux.ini(może być na końcu pliku) następujące linijki:

[Engine.GameReplicationInfo]
Region=0
ServerName=                       
ShortName=Unreal Server
AdminName=
AdminEmail=
MOTDLine1=
MOTDLine2=
MOTDLine3=
MOTDLine4=
ShowMOTD=False

I uzupełnić wedle własnych upodobań. Jeszcze należy oczywiście ustalić hasło administratora coby wszyscy nie mogli się bezkarnie panoszyć:

[Engine.GameInfo]
AdminPassword=twoje_haslo_adminstratora

Polecam jeszcze przypisać sobie klawisz do wywołujący menu administracyjne. Szukacie pliku System/User.ini (ew. System64/User.ini) i dokonujecie odpowiednich zmian, ja przypisalem np. do klawisza F8:

F8=UShowAdminMenu

Ostatnia rzecz na wstępie - dla własnej wygody warto zbindować sobie łączenie się z własnym serwerem z uprawnieniami administratora. Ja podpiąłem to pod klawisz F10:

F10=open adres_ip_waszego_serwera?password=wasze_haslo_administratora

Jako ze wersja 227 jest ciagle rozwijana na swoim serwerze odpuscilem sobie Enchanced DeathMatch(w skrócie EDM) jako, że ostatnia wersja jest dość stara; natomiast nad oficjalną wersją gry ciągle się pracuje. Podobnie ma się sprawa z anty-cheatem.

Ważne dodatki - mutatory

Tutaj jest panie i panowie sajgon jak diabli :/. No niestety, jeśli nie siedzicie w społeczności Unreala 1 będziecie mieć nie lada problemy ze znalezieniem pasujących paczek. A to nie ma nowszej wersji ogólnie dostępnej, a to jest na jakiejś stronie którą znają głównie ludzie ze społczności czy też plik README do mutatora ma literówkę przez co nie będzie poprawnie wywoływany. Ale, po kolei.

UMapVote(raczej słabe rozwiązanie, polecam przejść sekcję niżej, do EDM)

Bardzo istotny dodatek, odpowiadający za możliwość głosowania na mapy i tryby gry dostępne na serwerze. Należy go samemu skonfigurować a pliki mutatora - podobnie jak w przypadku każdego innego mutatora wrzucamy do katalogu System(lub System64). Oto mój konfig(plik UMamVote.ini) jakby ktoś miał problemy ze składnią:

[UMapVoteServer.VotingHandler]
MinVoters=1
RequiredMapsBeEnable=0
VotingTime=40
MapChangePrc=0.750000
MidGamePrc=0.510000
bBeginEndGameVotingOnEndGame=False)
bBeginEndGameVotingOnEndGame=False)
bBeginEndGameVotingOnEndGame=False
bAutoMaps=False
bDisplayVoteItem=True
Maps=(MapName="DmDeck16",GameIndex=-1)
Maps=(MapName="DmCurse",GameIndex=-1)
Maps=(MapName="DmDeathFan",GameIndex=-1)
Maps=(MapName="DmElsinore",GameIndex=-1)
Maps=(MapName="DmFith",GameIndex=-1)
Maps=(MapName="DmHealPod",GameIndex=-1)
Maps=(MapName="DmMorbias",GameIndex=-1)
Maps=(MapName="DmTundra",GameIndex=-1)
GameModes=(GameName="Vanilla|DeathMatch",ShortGameName="V_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="Relics|DeathMatch",ShortGameName="R_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="Relics.RelicMutator2",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="Instagib|DeathMatch",ShortGameName="IGIB_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="UTWeapons.Instagib",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="LowGravity.Instagib|DeathMatch",ShortGameName="LG.IGIB_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="UTWeapons.Instagib,LowGrav.LowGrav",AddedCmdLine="",Packages="",bKeepInventory=False)

Teraz tak, jeśli stawiać będziecie server na wersji 227j koniecznie popytajcie o najnowszą wersję, gdyż w moim przypadku wersje 1.4 i 1.6 rozwalały interfejs gry; a raczej - czyniły go niefunkcjonalnym. Odsyłam też do pliku tekstowego dołączonego do mutatora, żebyście wiedzieli co wpisać w pliku UnrealLinux.ini jako ServerActors oraz Serverpackages. Pamiętajcie też aby wywołać mutator w poleceniu którym uruchamiacie sam server, jako że będzie on niezależny od wybranego trybu gry - pisze o wszystkim w pliku tesktowym dołączonym do mutatora.

Zasada jest generalnie taka, że każdy mutator z którego planujecie korzystać na serwerze dodajecie do ServerPackages. Tj. jeśli ma on plik np. zdzisiek1.u to dorzucacie ServerPackages=zdzisiek1 w odpowiedznim miejscu.

Przykładowo moja sekcja odpowiadająca za te wpisy z tego samego serwera z którego pochodzi plik UMapVote.ini:

[Engine.GameEngine]
CacheSizeMegs=8
UseSound=True
bServerSaveInventory=False
ServerActors=IpDrv.UdpBeacon
ServerActors=IpServer.UdpServerQuery
ServerActors=UBrowser.UBrowserUplink
;ServerActors=UWebAdmin.WebAdminManager
; Oldstyle way. If you dislike auto updates, then simply comment ServerActors=UBrowser.UBrowserUplink and uncomment below.
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.oldunreal.com MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hlkclan.net MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master2.oldunreal.com MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hypercoop.tk MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.newbiesplayground.net MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.errorist.tk MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.noccer.de MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.qtracker.com MasterServerPort=27900
ServerPackages=Female1skins
ServerPackages=Female2skins
ServerPackages=Male1skins
ServerPackages=Male2skins
ServerPackages=Male3skins
ServerPackages=SkTrooperskins
ServerPackages=UnrealIntegrity
ServerPackages=UMapVote
ServerPackages=UTWeapons
ServerPackages=Relics

Podałem wam w zasadzie tylko mutator do głosowania bo nie jestem, w stanie przewidzieć co będziecie chcieli konkretnie mieć na waszych serwerach - ten natomiast był moim pierwszym wyborem - który ujdzie, ale zdecydowanie bardziej polecam EDM - omówiony później.

Aha, jakbyście szukali mutatora do trybu InstaGib - jest częścią paczki UTWeapons albo w EDM(zdecydowanie polecam to drugie rozwiązanie).

Optymalizacja serwera aby zmniejszyć lagi

Ponownie odnosimy się do pliku UnrealLinux.ini, z tym że interesuje nas sekcja:

[IpDrv.TcpNetDriver]

W niej natomiast pozycje MaxClientRate i NetServerMaxTickRate. Z tego co udało mi się dowiedzieć to klan DOG, za którym osobiście nie przepadam - używa takich wartości tych zmiennych:
 
MaxClientRate=100000
NetServerMaxTickRate=65
 
Przy czym weźcie pod uwagę, że zależą one od mocy maszyny i połączenia sieciowego z serwerem - także testujcie różne wartości drogą prób i błędów. Doradzam też zmienić szybkość w konfiguracji klienta na LAN - proste ale to najbardziej popularna porada jaka krąży po sieci - i chyba faktycznie działa.

EDM - Enchanced DeathMatch - dla mnie najlepszy mutator do votingu i wszystkiego na początek


Przed napisaniem tej części miałem już sprawdzone UMapVote, które jest bardzo średnie natomiast na początek daje radę, fajna jest też możliwość stworzenia sobie "własnych gamemodów" łącząc okreśłony tryb z wybranymi przez nas mutatorami. Później sprawdziłem UTeamFix, jeśli mnie pamięć nie myli - wersję 10H. Niby ok, ale jak dla mnie manual jest napisany tak czytelnie jak groch z kapustą. Jeśli jednak to wybierzecie(a jeśli stawiacie serwer na tryby Cooperative czy drużynowe może to nie być taki zły pomysł) zajrzyjcie sobie do pliku UTeamFix.int - od razu domyślicie się do jakiej sekcji w pliku UnrealLinux.ini co wpisywać - ja zanim tam zajrzałem długo nie wiedziałem gdzie np. ustawić hasło administratora - a moim skromnym zdaniem manual ma nas w tym przypadku w dupie.

Później przyszedł czas na EDM - i tu, dla mnie - stawiającego serwer DeathMatch'owy; pojawiło się autentyczne wytchnienie. Od pobrania paczki z EDM do uruchomienia bazowo skonfigurowanego pod niego serwera minęła niecała godzina. Dzięki przejrzystemu manualowi czułem się tak konfortowo, że praktycznie wszystkich zmian dokonałem jednym rzutem - później tylko start, test; wszystko działa - ok.

No ale po kolei. Instalacja jest prosta. Pobieracie sobie najnowszą wersję, tzn. z 2009 roku - witajcie w świecie retro - z tego miejsca. Interesuje was "Enhanced Deathmatch 6.0 (July 15th, 2009)". Powinniście otrzymać plik EDM6_PUBLIC-7-15-09.zip. U mnie poszła podstawa i dodatkowe mutator tj. z katalogu "Necessart Files" wszystko z "System" leci do "System64"(lub System), a z "Textures" do "Textures"(wow). Z "Extra Files" wszystko z "Mutators" też do "System64".

Rozpakowujecie też sobie ten plik u siebie na dysku i czytacie manual - krótki i czytelny. Na start serwera jako tryb gry wywołujecie "EDM6_Client.EnhancedDM".

Wszystko w zasadzie macie w manualu. Ale po krótce - mapki na które idzie głosować wpisujecie sobie do "EDMMAPS.ini", a główną konfigurację mutatora macie w "EnhancedDM.ini" - tam też macie odpowiednio sekcje do wpisania mutatorów, które będą zawsze ładowane z serwerem oraz te, na które mogą głosować gracze.

Dodatek, kolorowanie nazwy naszego serwera

Najlepiej poszukajcie sobie programiku UT2K4 Message Colourizer, ustawcie sobie wszystko co chcecie, tzn. nazwę waszego serwera z dopisanymi kolorami w odpowiednich miejscach i wklejcie jako nazwę serwera w pliku UnrealLinux.ini.

Osobiście jednak odradzam tego typu zabawy; sam skończyłem z plikiem którego ani notatnik(xed) ani Libre Office Writer nie mogło ruszyć - poradził sobie z tym natomiast jak podejrzewałem notatnik dostarczany z WINE(dodając spację po każdym znaku, ale chociaż treść została). Dla mnie natomiast dużo ważniejsza jest możliwość edycji konfiguracji na serwerze z poziomu terminala - nie polecam.

Zakończenie

Podziękowania dla Smirftsch, Dots, x21-(DOG)- oraz strategy-(DOG)-, ISV-GamesHarder, którzy niezwykle pomogli mi w znalezieniu potrzebnych plików oraz służyli wiedzą gdy jej potrzebowałem.

czwartek, 3 września 2020

JoeQuake jednak natywnie na linuksie? Nareszcie - wersja 0.16.2(rev.6567)

Po zasięgnięciu języka na discordzie i kontakcie z deweloperami JoeQuake, okazało się, że możliwe jest skompilowanie silnika na systemach linuksowych. Oto prosta instrukcja co należy zrobić. Dodam, że sprawdzone na systemie Linux Mint 20, coby jakieś odniesienie było o jakich czasach w ogóle mowa.

Zależności

Po pierwsze, zależności. Jeśli o mnie chodzi o to co musiałem doinstalować aby pomyślnie skompilować źródła:

sudo apt install gcc-multilib libjpeg9-dev:i386 libxxf86dga-dev:i386 libxxf86vm-dev:i386 libgl-dev:i386 libpng-dev:i386 libsdl2-dev:i386

Na logikę, jeśli ktoś wam skompiluje binarkę, aby ją uruchomić musicie zainstalować:

sudo apt install libjpeg9:i386 libxxf86dga1:i386 libxxf86vm1:i386 libgl1:i386 libpng16-16:i386 libsdl2:i386

W przypadku mojej dystrybucji paczka libjpeg9-dev:i386 wymagała usunięcia libjpeg-turbo8-dev:amd64 jako, że oba pakiety dostarczały ten sam plik.

Pobranie źródeł

Zródła pobieracie stąd:

https://github.com/kugelrund/JoeQuake/archive/linux.zip

Co da wam plik JoeQuake-linux.zip

Kompilacja źródeł

Możecie sobie to puścić nawet jako skrypt, uruchamiany w katalogu z plikiem https://github.com/kugelrund/JoeQuake/archive/linux.zip:

#!/bin/sh

unzip JoeQuake-linux.zip -d JOELINUX
cd JOELINUX/JoeQuake-linux
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

Plik wykonywalny znajdował się będzie w katalogu:

JOELINUX/JoeQuake-linux/build/trunk/joequake-gl

I w sumie tyle, macie łatwo bo Sphere już dodał́ niedawno obsługę pulseaudio, ja 4 dni szukałem rozwiązania jak silnik wspierał jeszcze dźwięk z OSS - uwierzcie, nic nie działało. Teraz jest gitara, wszystko gra.

Wchodzimy w świat Quake 1 w 2020 roku. Czyli - jak zacząć?

Zacznijmy od tego, że podobnie jak w przypadku wielu leciwych gier tak samo w przypadku Quake'a 1 wydanego w 1996 roku podejście do samej gry uległo znacznej zmianie po 24 latach. Mam tutaj na myśli sposoby uruchamiania gry oraz społeczność i wyznaczone przez nią standardy zarówno w przypadku rozgrywki sieciowej, jak i single-player.

Na wstępie należy zaznaczyć, że chociaż Q1 ma silnik z otwartym kodem źródłowym, a co z tym idzie dostępnych jest wiele jego interpretacji i portów tutaj nie wystarczy, że wybierzemy ten najbardziej nam odpowiadający i posłuży on nam do wszystkiego. Trochę lipa, ale tak już jest. W skrócie powiem tak:

  • Quakespasm - do grania single-player w czystego Quake'a albo do prymitywnego grania w sieci(tj. bez wyszukiwarki serwerów czy po sieci LAN)
  • EzQuake - współczesne granie sieciowe bazujące na kulturze Quake World
  • Joe/NeaQuake - speedrunning

Ważne jest tutaj to, że JoeQuake oraz NeaQuake posiadają fizykę oryginału, natomiast Quakespasm oraz EzQuake ją modufikują.

Quakespasm

Tutaj sytuacja jest prosta, instalujemy z repo i mamy spokój. W moim przypadku na Linux Mint 20 wystarczy:

sudo apt install quakespasm

Po czym jak już mamy silnik tworzymy sobie katalog, wrzucamy do niego chociażby plik katalog id1 z wersji shareware lub pełnej gry. Silnik uruchamiamy poleceniem:

quakespasm -basedir ścieżka_do_tego_folderu/z_katalogiem_id1

EzQuake(przygotowanie silnika gry)

Tutaj są dwie szkoły, pierwsza to pobranie binarnej wersji pod linuksa ze strony projektu. Przy czym w moim przypadku wiązało się to z większym bólem głowy gdyż miałem problemy z bibliotekami.

Najpierw system skarżył się na brak pliku libpng12.so.0 co rozwiązujemy czysto instalując np. ten pakiet w zależności od posiadanej architektury:

Instalujemy standardowo tj. np.:

sudo dpkg -i libpng12-0_1.2.54-1ubuntu1.1_i386.deb

Kolejny problem jaki mi wyskoczył wyglądał następująco:

./ezquake-linux-x86_64: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by ./ezquake-linux-x86_64)

Po kilku nieudanych próbach rozwiązania problemu dałem spokój i postanowiłem samodzielnie skompilować ten silnik gdyż na logikę wszystko co było potrzebne już miałem w systemie. Wystarczyły do tego trzy polecenia:

git clone https://github.com/ezQuake/ezquake-source.git

cd ezquake-source 

sh build-linux.sh

I teraz tak, co dokładnie robi linux-build.sh? Sprawdza naszą dystrybucie, instaluje niezbędne pakiety potrzebne do zbudowania silnika i kompiluje go pomijając make install - więc spokojnie. Prawa roota są mu potrzebne tylko do zainstalowania niezbędnych zależności. Szkoda, że standardowo nie pokazuje co instaluje ale końcem końców silnik jest zbudowany.

Pisząc to zauważyłem, że autorzy logi z budowania(więc może i informacje o instalowanych pakietach)  piszą do:

/tmp/ezquake-build.log

Także jakbyście byli ciekawi zajrzyjcie tam w razie wątpliwości.

EzQuake(zdobycie plików niezbędnych do grania w sieci)

I tu jest prosto, nie musimy nawet mieć Quake'a. Wystarczy że wejdziemy na stronę nquake - tam pobieramy paczkę dla linuksa o nazwie nquake_installer-linux-latest.tar.gz, wypakowywujemy i uruchamiamy plik install_nquake.sh. Installer zapyta nas gdzie chcemy mieć nquake - domyślnie ~/.nquake przy czym pojawi się również folder ~/nquake. Opcje przy instalacji mogą być domyślne, są zupełnie ok.

Pozostaje tylko przekopiować poprzednio przez nas skompilowany plik binarny silnika ezquake(w moim przypadku ezquake-linux-x86_64,  do ~/nquake; uruchomić - i grać.

Joe/NeaQuake(droga porażek)

I tutaj właśnie, speedrunning. Jeśli ktoś chciałby np. wziąć udział w speedrunowaniu E1M1 albo całej gry musicie zaopatrzyć się w jeden z tych silników - przy czym NeaQuake to po prostu drobna modyfikacja JoeQuake. Najpopularniejszy jest JoeQuake, natomiast paczka binarna niestety jest dość stara i  wywala mi te same błędy przy próbie uruchomienia jak w przypadku gotowej binarki EzQuake.

I tak gwoli wyjaśnienia, oczywiście, że możecie sobie speedrunować na Quakespasm czy EzQuake ale nikt tych waszych dokonań pod uwagę w poważnych rankingach nie weźmie gdyż oba silniki mają zmienioną fizykę w stosunku do oryginału o czym już wspomniałem. Jak powiedział mi jeden użytkownik discorda:

(...)noone stops you from playing on those engines ofc, but you wont be able to submit to the leaderboards

Ja poległem przy próbie kompilacji tych silników ale trochę informacji dla Was mam, jeśli chcecie szaleć z JoeQuake, źródła pobieracie tym poleceniem:

git clone https://github.com/j0zzz/JoeQuake.git

Natomiast w przypadku NeaQuake tym:

git clone https://github.com/crashfort/NEAQUAKE.git

NeaQuake ma taką przewagę, że ma od razu linuksowy makefile, do którego odwołujecie się wydając to polecenie w katalogu ze źródłami:

make -f Makefile.linux

Z tego co patrzyłem program próbuje skompilować się pod i386 i tam odpuściłem bo aż tak mi nie zależy, po skomentowaniu linijek odpowiedzialnych za architekturę - gdy już miało lecieć pod x86_64 wywaliło mi taki błąd:

cc1: error: CPU you selected does not support x86-64 instruction set
cc1: error: ‘-fcf-protection=full’ is not supported for this target
make: *** [Makefile.linux:102: release_glx/cd_linux.o] Error 1

I tutaj ponownie z pomocą przychodzi ekipa speedrunowania Q1 z discorda. Otóż tutaj znajdziecie różne poprawki do budowania na linuksach:

https://github.com/kugelrund/JoeQuake/tree/linux

Ale podobno i tak silnik będzie działał bez dźwięku, i średnio sprawnie. Dlatego ja uznałem biorąc pod uwagę wszystkie problemy, że po prostu nie warto. Ale jeśli chcecie, droga wolna.

JoeQuake(droga zwycięstwa)

No tak, ale podszedłem do sprawy od drugiej strony - tj. wersji windowsowej silnika i wine 5.0. I tutaj wszystko działa, mniej więcej - otóż w wersji 0.16.2(build 6454) z którą dostarczana jest tylko wersja ze wsparciem dla akceleracji graficznej. I tutaj musimy emulować wirtualny pulpit z poziomu wine(inaczej silnik nie uruchomi się) oraz wykluczyć w opjach wine zarządzanie oknami i dekorowanie ich przy użyciu systemowego window managera(u mnie window manager MATE - podejrzewam, że Marco) - w przeciwnym razie myszka będzie centrowała do środka tj. nie będziecie za jej pomocą w stanie się np. obracać. 

I tutaj z pomocą przychodzi wersja 0.15(build 3798) - obie pobierzecie z oficjalnej strony projektu. Wersja z akceleracją również nie uruchamiała się na pełnym ekranie, toteż od razu ją odpuściłem. Natomiast wersja software'owa działa wspaniale, nie zapamiętuje tylko rozdzielczości i kilku poleceń. To i tak nadal dużo lepsze niż kompilowanie wersji linuksowej na siłę.

 ________

Na zakończenie dodam, że udało się w końcu po wielu próbach skompilować linuksową wersję JoeQuake, konkretnie 0.16.2(rev.6567) - dokładną instrukcję co konkretnie należy zrobić znajdziecie w tym poście.

piątek, 17 kwietnia 2020

Skrypt budujący OpenGlide CVS i DosBox z łatkami na Glide/3Dfx

Jakiś tydzień temu ponownie potrzebny był DosBox ze wsparciem dla akceleracji 3Dfx i chociaż kiedyś już o tym pisałem, to na sieci panuje dość spory młyn bo a to jednemu nie działa taka łatka, innemu taka(bo też wersji tej łatki kilka po sieci krąży); trzeciemu z kolei to albo tamto nie działa z dosboksem z CVS lub stabilnym.

Cała sytuacja nie jest aż tak zakręcona jak napisałem, natomiast jak startujesz od zera bo "Fajnie byłoby to wypróbować" to mniej więcej taki obrazek Cię czeka. Łatwiej mają użytkownicy Gentoo którzy mają dobrze ten pakiet maintainowany w repo i trochę ich torem polecimy.

Ale do rzeczy, poniższy skrypt potrafi budować zarówno OpenGlide z CVS jak i DosBoksa z CVS(rewizja 4302) pod architektury x86 i x86_64. Z tym, że jeśli na maszynie 64 bitowej budujesz pod maszyny 32 bitowe może czekać cię trochę podmieniania pakietów - ale chcesz się bawić, to się baw - jeśli zapewnisz dobre środowisko do takich imprez ten skrypt Ci to zbuduje.

Polecam czytać README zawarte w komentarzach na początku skryptu i pamiętać, że używacie go na własną odpowiedzialność chociaż sam z niego korzystam i uważam, że jest bezpieczny - poza tym nie wymaga roota więc nie ma nawet jak czegoś bardzo popsuć. No ale, żeby nie było; używasz na własną odpowiedzialność. Dobrej zabawy.

ps. skrypt nakłada łatkę na OpenGlide pod Carmageddon w które właśnie gram więc jak tego nie chcecie wywalcie sobie linijki od 62 do 67. Jeśli chcecie nałożyć tą łatkę jest do pobrania tutaj. Wrzucacie ją do katalogu gdzie zapisaliście skrypt i zostanie nałożona na źródła.

#!/bin/sh

# OPENGLIDE CVS AND DOSBOX GLIDE PATCHED BUILDING SCRIPT
# by azn <aznlir88@gmail.com>
#
#
#  VERSION: 0.1a / DATE: 23/04/2020
#    - Added third option in the main menu
#
#  VERSION: 0.1 / DATE: 16/04/2020
#
#
# As DosBox Glide patch is a wonderful addition to original DosBox, yet it caused
# many confusions on linux and vogons forums as most users have problems to fit
# the right version of the patch with dosbox version. You can find many versions
# of the Glide patch around the internet.

# This script allows you to build OpenGlide SVN version and create a convienient
# .deb package and of course to do local installation of Glide patched DosBox
# version. I decided to install patched DosBox in local folder instead of creating
# a .deb package for system-wide installation as for it to work properly dosbox
# needs glide2x.ovl file that should be where the dosbox executable is and it does
# not sound clean to me to put it into one of the system's bin folders.
#
# You can also choose to build x86 and x86_64 versions of both OpenGlide and Glide
# patched DosBox but I recommend building 64 bit version as most of you work
# on 64 bit systems anyway these days. Option to build 32 bit version is included
# only because some sources seem to prove huge speed boost while running 32 bit
# version on 64 bit systems.
#
# While choosing 32 bit build on 64 bit system be aware that many depencies that
# allow you to build dosbox will need to be replaced with 32 bit versions of
# these packages.
#
# In Linux Mint, as this is the distro I am using dosbox will not compile for
# x86 unless you replace libsdl1.2-dev package with libsdl1.2:i386 package.
# And when you later want to compile x86_64 version of dosbox you must once
# again replace libsdl1.2-dev:i386 with 64 bit version of package. So think
# what you want to get before you start playing with this script.
#
# I consider this script safe as it does not need root access, therefore it
# is not making any system-wide changes. Everything will start and end in
# location where the script is located.
#
# BUT AS I AM NOT A PROFESSIONAL PROGRAMMER, KEEP IN MIND THAT YOU ARE USING THAT
# SCRIPT AT YOUR OWN RISK AND I AM NOT RESPONSIBLE OF ANY DAMAGE IT MAY CAUSE TO
# YOUR COMPUTER ANYHOW.

dir=$(pwd)
openglide_package="openglide-cvs"
openglide_version="0.09rc9"
openglide_release="1"
openglide_maintainer_name="azn"
openglide_maintainer_mail="aznlir88@gmail.com"
dosbox_package="dosbox"
dosbox_version="4302"

funChooseArch()
{
clear
echo "-------\n\
- THIS SOFTWARE COMES WITH NO WARRANTY, YOU\n\
- ARE USING THIS SOFTWARE AT YOUR OWN RISK.\n\
-------\n\
 OpenGlide, DosBox Glide patched build\n\
 script by azn <aznlir88@gmail.com>\n\n\
 \e[1;34mBuild packages for 32-bit or 64-bit systems?:\n\
 1. 32-bit arch\n\
 2. 64-bit arch\e[0m\n\
 \e[1;30m3. Do not know what to do?\e[0m\n"

read -p ' Your choice: ' archvar

    if [ $archvar = 1 ]
    then
        archvar1="-m32"
        archvar2="i386-pc-linux-gnu"
        archvar3="x86"
        arch="i386"
    elif [ $archvar = 2 ]
    then
        archvar1="-m64"
        archvar2="x86_64-pc-linux-gnu"
        archvar3="x86_64"
        arch="amd64"
    elif [ $archvar = 3 ]
    then
        clear
        echo "\n\e[1m  You must build and install OpenGlide\n\
  first, so Glide patched DosBox\n  can be built.\n\
 \n
  // You will return to main menu
  // in 10 seconds\e[0m\n"
        sleep 10
        funChooseArch
    else
        echo " \e[1;30mNo such option. Try again.\n\e[0m"
        exit
    fi
}

funWhatToBuild()
{
echo "\e[1;34m\n What do you want to build?\n\n\
 1. OpenGlide SVN\n\
 2. DosBox SVN + Glide patch\n\
 \e[0m\n \e[1;36m// Building for ${archvar3} systems\n\e[0m"

read -p ' Your choice: ' taskvar

    if [ $taskvar = 1 ]
    then
        echo "\e[1;34m\nPreparing OpenGlide SVN version\n\e[0m"
        funOpenGlide
    elif [ $taskvar = 2 ]
    then
        echo "\e[1;34m\nPreparing DosBox SVN + Glide patch\n\e[0m"
        funDosBox
    else
        echo " \e[1;30mNo such option. Try again.\n\e[0m"
        exit
    fi
}

funOpenGlide()
{
sleep 2
echo "\e[1;36m/------------\n\
|  FETCHING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        cvs -z3 -d:pserver:anonymous@openglide.cvs.sourceforge.net:/cvsroot/openglide co -P openglide
        cd openglide
  
echo "\e[1;36m\n/------------\n\
|  PATCHING WITH CARMAGEDDON PATCH\n\
\----------------------/\e[0m\n"
sleep 3
        cat ../openglide-carma.diff | patch -p1

echo "\e[1;36m\n/------------\n\
|  CONFIGURING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        ./bootstrap
        ./configure --target="${archvar2}" \
        "CFLAGS="${archvar1}"" \
        "CXXFLAGS="${archvar1}"" \
        "LDFLAGS="${archvar1}""

echo "\e[1;36m\n/------------\n\
|  COMPILING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        make

echo "\e[1;36m\n/------------\n\
|  MAKING OPENGLIDE SVN .DEB PACKAGE\n\
\----------------------/\e[0m\n"
sleep 3
        fakeroot make \
        DESTDIR=$PWD/../$openglide_package-$openglide_version-$openglide_release-$arch \
        install
        cd ..
        mkdir $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN
        touch $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN/control
        cd $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN
        echo "Package: $openglide_package" >> control
        echo "Version: $openglide_version-$openglide_release" >> control
        echo "Architecture: $arch" >> control
        echo "Maintainer: $openglide_maintainer_name <$openglide_maintainer_mail>" >> control
        echo "Description: OpenGlide CVS" >> control
        cd ../..
        dpkg-deb -b $openglide_package-$openglide_version-$openglide_release-$arch

echo "\e[1;36m\n/------------\n\
|  CLEANING UP\n\
\----------------------/\e[0m\n"
sleep 2
        rm -rf ./openglide
        rm -rf ./$openglide_package-$openglide_version-$openglide_release-$arch

echo "\e[1;36m >>> Package name:\e[0m\n\n \
\e[0;36m$openglide_package-$openglide_version-$openglide_release-$arch.deb\e[0m\n\n \
\e[1;36mPackage location:\e[0m\n\n \
\e[0;36m$dir\e[0m\n"
}



funDosBox()
{
    sleep 2
    mkdir $dosbox_package
    cd $dosbox_package

echo "\e[1;36m/------------\n\
|  FETCHING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        svn checkout -r $dosbox_version svn://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk dosbox-code-0
        mv dosbox-code-0 $dosbox_package-$dosbox_version-$archvar3

echo "\e[1;36m\n/------------\n\
|  FETCHING DOSBOX GLIDE PATCH\n\
\----------------------/\e[0m\n"
sleep 3
        wget https://raw.githubusercontent.com/voyageur/openglide/841e1071597b64ead14dd08c25a03206b2d1d1b6/platform/dosbox/dosbox_glide.diff
        cd $dosbox_package-$dosbox_version-$archvar3

echo "\e[1;36m/------------\n\
|  PATCHING DOSBOX SOURCES\n\
\----------------------/\e[0m\n"
sleep 3
        cat ../dosbox_glide.diff | patch -p1

echo "\e[1;36m\n/------------\n\
|  CONFIGURING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        sh autogen.sh
        ./configure --prefix=$dir/$dosbox_package \
        --disable-screenshots \
#        --disable-alsa-midi \
        --disable-ddraw \
        --target="${archvar2}" \
        "CFLAGS="${archvar1}"" \
        "CPPFLAGS="${archvar1}" -I /usr/local/include/openglide/" \
        "LDFLAGS="${archvar1}" -L /usr/lib32"

echo "\e[1;36m\n/------------\n\
|  COMPILING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        make

echo "\e[1;36m\n/------------\n\
|  INSTALLING DOSBOX INTO LOCAL DIRECTORY\n\
\----------------------/\e[0m\n"
sleep 3
        make install

echo "\e[1;36m\n/------------\n\
|  FETCHING AND MOVING glide2x.ovl
\----------------------/\e[0m\n"
sleep 2
        wget https://raw.githubusercontent.com/voyageur/openglide/c300160d0a8292bc04e79dd59e6cc178aa648dec/platform/dosbox/glide2x.ovl
        mv glide2x.ovl $dir/$dosbox_package/bin

echo "\e[1;36m\n/------------\n\
|  CLEANING UP\n\
\----------------------/\e[0m\n"
sleep 2
        cd ..
        rm -rf $dosbox_package-$dosbox_version-$archvar3
        rm dosbox_glide.diff

echo "\e[1;36m\n>>> Remember to execute:\e[0m\n\n \
\e[0;36mexport LD_LIBRARY_PATH=/usr/local/lib\e[0m\n\n \
\e[1;36mBefore running dosbox\e[0m\n"
}

funChooseArch
funWhatToBuild

sobota, 21 marca 2020

JFSW - Shadow Warrior od 3D Realms pod linuksem w 2020

Na początku musimy zaopatrzyć się w niezbędne pakiety, i chociaż bazowałem na poradniku pod Raspberry Pi powinno działać w każdej dystrybucji debiano-podobnej tj. Ubuntu, Mint czy sam Debian. Osobiście wymagane pakiety chyba miałem bo nie instalowałem tego a wszystko poszło gładko ale jakby ktoś nie miał:
sudo apt-get install build-essential libgl1-mesa-dev libgtk2.0-dev libsdl1.2-dev libvorbis-dev nasm timidity freepats git

Teraz należy pobrać niezbędne źródła:
git clone https://github.com/jonof/jfsw.git

Następnie wchodzimy do katalogu jfsw i pobieramy to co nam jeszcze potrzeba, a bez czego nie ruszymy dalej:
cd jfsw
git clone https://github.com/jonof/jfbuild.git
git clone https://github.com/jonof/jfaudiolib.git
git clone https://github.com/jonof/jfmact.git

Wreszcie pora na samą kompilację:
make

I w końcu dane gry, tzn. z miejsca gdzie mamy grę(ja korzystałem z wersji dostępnej na gog.com) kopiujemy katalog "data" do miejsca gdzie skompilował nam się plik wykonywalny o nazwie "sw".

Wykonując go możemy już uruchomić grę i cieszyć się klasykiem na współczesnym linuksie.
Ale czy to wszystko? Oczywiście, że nie. Warto jeszcze chociażby sprawić abyśmy mogli rozglądać się w górę i w dół za pomocą myszki - co po prawdzie sprawia większy kłopot niż samo skompilowanie źródeł, i trzeba mieć farta aby znaleźć sensowną odpowiedź. Otóż po pierwszym uruchomieniu pliku "sw" utworzony zostanie folder konfiguracyjny "~/.jfsw" gdzie znajdziemy plik "sw.cfg". Aby myszka działała jak marzenie upewniamy się, że następujące zmienne posiadają takie oto wartości:
MouseAnalogAxes0 = "analog_turning"
MouseAnalogAxes1 = "analog_looking"

Następnie za pomocą klawisza "U" uaktywniamy korzystanie z myszki w grze. Wydawałoby się, że opcja "MouseAimingOn" ustawiona w pliku konfiguracyjnym włączy to na stałe, niestety jednak po uruchomieniu gry pozostaje wyłączona a wartość w pliku konfiguracyjnym wraca do zera. Z mojej strony dodam jeszcze kilka rzeczy abyście od razu mogli przyjemniej grać:
Brightness = 3
Crosshair = 1
Move_Forward = "W" "Kpad8"
Move_Backward = "S" "Kpad2"
Jump = "" "/"
Strafe_Left = "," "A"
Strafe_Right = "." "D"
Next_Weapon = "'" "Q"
Previous_Weapon = ";" "E"
MouseButton0 = "Fire"
MouseButtonClicked0 = ""
MouseButton1 = "Jump"
MouseButtonClicked1 = ""
MouseButton2 = "Crouch"
MouseButtonClicked2 = "AutoRun"
MouseAnalogScale0 = 81920

Tyle w temacie, gra działa rewelacyjnie.

Źródła:

https://lb.raspberrypi.org/forums/viewtopic.php?t=197981
https://forums.3drealms.com/vb/showthread.php?t=11797

niedziela, 31 stycznia 2016

Patchowanie gier z Wiiware na serwery Wiimfii

Procedura jest bardzo prosta, pamiętajmy jednak, że po skończonej operacji warto przetestować plik .wad najpierw na emulatorze Dolphin na wszelki wypadek.

Czego będziemy potrzebowali:



Co robimy, po kolei:



  1. uruchamiamy showmiiwads, otwieramy folder gdzie mamy plik .wad, wybieramy "Edit" > "Extract" > "To Folder" (UWAGA, jeśli pojawi się błąd informujący o braku czegoś jak "common key" to wchodzimy sobie w programie w "Tools" > "Create Common-Key" i sobie go tworzymy zgodnie z instrukcjami)

  2. umieszczmy w jednym folderze pacher wiiware, lzx.exe i plik  00000001.app z wypakowanego pliku .wad

  3. Uruchamiamy patcher wiiware (na linuksie robimy to z konsoli za pomocą polecenia "wineconsole WiiwarePatcher.exe" - wymaga zainstalowanej aplikacji Wine)

  4. po zakonczonej operacji wstawiamy spatchowany plik 00000001.app w miejsce oryginalnego w folderze do ktorego rozpakowalismy plik .wad

  5. w showmiiwads wybieramy "Tools" > "Pack Wad" i wskazujemy katalog do ktorego wczesniej rozpakowalismy oryginalny plik .wad(obecnie powinno znajdowac sie tam wszystko co poprzednio ale z podmienionym plikiem 00000001.app)

  6. zapisujemy to jako jakis plik .wad


Gotowe! Jest to obecnie jedyny sposób na cieszenie się grami, które kupiliśmy w sklepie internetowym Nintendo, po zamknięciu oficjalnych serwerów przez firmę.

Sposoby na wydobycie plików .wad z legalnie zakupionych i zainstalowanych w systemie gier znajdziecie w internecie.

poniedziałek, 15 kwietnia 2013

Stawiamy dedykowany serwer Unreal Tournament '99 na linuksie

Ok przyszła pora na pierwszego UT, pisząc tego posta stawiam właśnie takowy serwerek więc będzie na świeżo :). Powoli, krok za krokiem.

Serwer podstawowy


Tworzymy sobie jakiś katalog do naszej zabawy i pobieramy paczkę z serwerem(podaję pierwsze miejsce z tym plikiem jakie znalazłem):
wget http://to22.org/system/files/ut-server-436.tar_.gz

Następnie rozpakowujemy go za pomocą polecenia:
tar xvf ut-server-436.tar_.gz

Otrzymaliśmy folder ut-server, czyli już mamy na czym pracować, fajnie. Przydałoby się jeszcze zapuścić UTPure coby wyłapywało cheaterów bez skilla ;). Tak więc bobieramy:
wget http://downloads.unrealadmin.org/UnrealTournament/AntiCheat/UTPure/UTPureRC7G.zip

Rozpakowujemy, akurar rozpakowywałem unzip'em i zawartości nie było szczególnie dużo więc mogę pokazać co to to ma w środku:
inflating: utpure/UTPureReadme.txt
inflating: utpure/VaPure.htm
inflating: utpure/ZPPureReadme.txt
creating: utpure/System/
inflating: utpure/System/BP1Handler7G.u
inflating: utpure/System/BP4Han[UTPureRC7G.UTPure]dler7G.u
inflating: utpure/System/PureINTLog.u
inflating: utpure/System/PurePkgLog.u
inflating: utpure/System/PureStat7G.u
extracting: utpure/System/UTPureRC7G.int
inflating: utpure/System/UTPureRC7G.u
inflating: utpure/System/VAHandler7G.u
inflating: utpure/System/ValAvatar.ini
inflating: utpure/System/ZPPure7G.int
inflating: utpure/System/ZPPure7G.u
creating: utpure/uz/
inflating: utpure/uz/BP1Handler7G.u.uz
inflating: utpure/uz/BP4Handler7G.u.uz
inflating: utpure/uz/PureStat7G.u.uz
inflating: utpure/uz/UTPureRC7G.u.uz
inflating: utpure/uz/VAHandler7G.u.uz
inflating: utpure/uz/ZPPure7G.u.uz
inflating: utpure/PureINTLog.txt
inflating: utpure/PurePkgLog.txt
inflating: utpure/PureStatsReadme.txt

Jako, że nie znalazłem w załączonych plikach informacji o instalacji(domyślnie kopiuje się zawartość folderów analogicznie, ale co z folderem uz?) zastosowałem się do tego poradnika i skopiowałem zawartość obu folderów, System i uz do katalogu System w katalogu naszego serwera. Następnie(co już pisze w pliku UTPureReadme.txt) dokonujemy niewielkiej zmiany w pliku konfiguracyjnym naszego serwera(UnrealTournament.ini). Mianowicie w dziale [Engine.GameEngine] dodajemy następujące wpisy:
ServerPackages=UTPureRC7G
ServerActors=UTPureRC7G.UTPureSA

Pamiętajmy, że zgodnie z tym co pisze w pliku dołączonym do UTPure należy uruchomić serwer i szybko zakończyć ten proces, wtedy zostanie utworzona w pliku konfiguracyjnym serwera pełna sekcja [UTPureRC7G.UTPure].

I prawdę mówiąc z grubsza będzie tyle. Warto jeszcze rzucić okiem na sekcję [Engine.GameReplicationInfo] są tam podstawowe dane serwera widziane dla graczy. W paczce z serwerem są tam tylko dwie linijki, poniżej pokażę tą sekcję z kilkoma innymi opcjami:
[Engine.GameReplicationInfo]
ServerName=Testowy serwer
ShortName=Testowy
MOTDLine1=Witamy
MOTDLine2=Na naszym
MOTDLine3=Serwerze UT99
AdminName=
AdminEmail=
Region=0

Pora na uruchomienie naszego serwera, myślę, że kto się bierze za takie rzeczy wystarczy że dostanie przykłady, dlatego poniżej przykładowa komenda startująca serwer:
./ucc-bin server CTF-Face?game=BotPack.CTFGame? ini=UnrealTournament.ini log=ut.log -nohomedir &

Jeśli chcecie mieć możliwość administrowania serwerem przez z poziomu przeglądarki internetowej w sekcji [UWeb.WebServer] musicie zmienić linijkę bEnabled na:
bEnabled=True

W niektórych przypadkach zajdzie potrzeba zmiany portu dla tego rodzaju administracji, a że nie ma tej liniki w domyślnym pliku konfiguracyjnym dodam, że robi to w taki sposób(oczywiście port ustalcie sobie sami):
ListenPort=8887

Jeśli chcemy aby nasz serwer był widziany na liście serwerów dodajemy sekcję [IpServer.UdpServerUplink] uzupełnioną np. w ten sposób:
[IpServer.UdpServerUplink]
DoUplink=True
UpdateMinutes=1
MasterServerAddress=unreal.epicgames.com
MasterServerPort=27900
Region=0

Informacje dodatkowe


Automaczyne nagrywanie demek

Jeśli mamy działające UTPure, wystarczy ze w pliku konfiguracyjnym serwera dopiszemy sekcję [UTPureRC7G.bbPlayer], a w niej np.:
bDoDemo=True
DemoMask=%l_[%y_%m_%d_%t]_[%c]_%e
DemoPath=Demos

I teraz tak, bDoDemo określa czy dema mają być automaczycnie nagrywane, DemoMask to maska plików z demami(szczegóły w pliku UTPureReadme.txt dołączonym do UTPure); natomiast DemoPath określa gdzie będą zapisywane dema. W moim przypadku jest to katalog Demos umieszczony na tym samym poziomie co katalog System. Pamiętajcie żeby najpierw utworzyć katalog w którym będą zapisywane dema i aby na końcu wpisu dać "".
 

Zakończenie


W zasadzie będzie na tyle, dodam jeszcze, że serwer warto uaktualnić so wersji 451 lub nowszej, po który zapraszam tutaj.

Zdaję sobie również sprawę, że zawarte tutaj informacje są bardzo podstawowe, niemniej jednak zapewniają postawienie prostego serwera, zachęcam do dalszych poszukiwań na własną rękę.

środa, 10 października 2012

Stawiamy dedykowany serwer Unreal Tournament 2004 na linuksie


UT2004 Logo



Wstęp


Post podzielony będzie na cztery części, mianowicie Serwer podstawowy, Konieczne(moim zdaniem) dodatki do serwera oraz Dodatkowe informacje - serwer i Dodatkowe informacje - ustawienia gracza(lokalne). Jak to w moim przypadku, piszę go właściwie dla siebie aby nie zapomnieć pewnych procedur - ale może komuś się jeszcze przyda.
Pierwsza część zawiera najbardziej podstawowe informacje o tym jak w ogóle sprawić aby cokolwiek waszego pojawiło się na liście serwerów w grze.

Drugi - opisuje procedurę dodania dodatków UT2Vote, UTComp i UTSecure.

Trzecia część to różnorakie przydatne mądrości dotyczące konfiguracji serwera UT2004.

Czwarta to to samo co trzeba tylko dla gracza pojedynczego tzn. że zmian dokonujemy w plikach konfiguracyjnych na naszym dysku twardym.


I. Serwer podstawowy


Rozumiem, że jeśli takie myśli chodzą Wam po głowie macie dostęp do jakiegoś serwera np. za pośrednictwem protokołów SSH i ewentualnie FTP, chociaż SSH będzie w zupełności wystarczające. Zaczynamy w katalogu domowym naszego użytkownika, od razu warto utworzyć sobie katalog na dane związane z serwerem, nazwijmy go "ut2k4_server":
mkdir ut2k4_server

Jako, że pracować będziemy w tym katalogu warto od razu do niego wejść:
cd ut2k4_server

Przede wszystkim należy pobrać paczkę z serwerem dedykowanym; proponuję skorzystać ze strony Unreal Admin i ich działu Downloads gdyż jest prosty i przyjemny i z pewnością nie raz tam zajrzycie jeśli interesuje was tematyka tej serii. Ale do rzeczy, pobieramy paczkę:
wget http://downloads.unrealadmin.org/UT2004/Server/dedicatedserver3339-bonuspack.zip

Następnie aktualizacja do wersji 3369. I tutaj kwestia zasadnicza, dla linuksów łatki na tą wersję(bo używać będziemy najzwyklejszej łatki do UT2004) wyszły dwie: 3369 i 3369-2, ta druga coś tam poprawiała w pierwszym wydaniu linuksowym wersji 3369 - nie pamiętam dokładnie o co chodziło. Was interesuje jej pierwsza wersja, dlatego też wydajemy polecenie:
wget http://downloads.unrealadmin.org/UT2004/Patches/Linux/ut2004-lnxpatch3369.tar.bz2

Osobiście, u siebie mam serwer wrzocony do katalogu ut2004 w katalogu ut2k4_server, tak więc:
unzip dedicatedserver3339-bonuspack.zip -d ut2004

Następnie wartałoby serwer zaktualizować, i tutaj magicznej komendy wypakowywania z zastępowaniem wam nie podam bo dla wygody robię to za pomocą Midnight Commandera(polecenie mc - ufam, że dalej już sobie poradzicie).
--------------------------------------------------------------------------------------------------------------------------------------

CD-KEY naszego serwera

Wymagany aby serwer był widoczny na liscie serwerów w grze, w przeciwnym razie gracze będą musieli podać jego IP jeśli będą chcieli się z nim połaczyć(co też nie jest tragiczne, można go dodać do ulubionych i już sobie tam będzie). Tak czy inaczej aby otrzymać klucz dla naszego serwera wchodzimy na:
http://www.unrealtournament.com/ut2004server/cdkey.php

Przechodzimy całą procedurę po czym otrzymany klucz zapisujemy w katalogu "System" pod nazwą "cdkey".
--------------------------------------------------------------------------------------------------------------------------------------

Jak uruchomić serwer?

Sprawa ponownie jest prosta, jeśli dla przykładu chcemy zacząć grać w trybie Deathmatch na mapie Curse4, wchodzimy do katalogu system, uruchamiamy ucc-bin-linux-amd64(dla maszyn 64-bitowych) lub ucc-bin(dla maszyn 32-bitowych) z odpowiednimi parametrami tj.:
ucc-bin-linux-amd64 server DM-Curse4?XGame.xDeathMatch -nohomedir -log=../logs/ucc.log &

Jak widać, tak postawiony server skorzysta również z opcji "nohomedir"(odsyłam do Google) oraz utworzy plik z logami w katalogu "logs" znajdującym się w głównym katalogu gry(radzę go utworzyć bo domyślnie go nie ma).

Natomiast jeśli do tego wszystkiego chcielibyśmy np. dodać jakiś mutator, dajmy na to Zoom Instagib(dla przykładu, akurat łatwiej sobie to sprawdzić jeśli mutator jest już w grze, tak jak ten - oszczędza Wam to instalacji dodatkowych rzeczy):
ucc-bin-linux-amd64 server DM-Curse4?XGame.xDeathMatch?mutator=XGame.MutZoomInstagib -nohomedir -log=../logs/ucc.log &

Ja dla przykładu zrobiłem sobie prosty skrypt w bashu o nazwie "start_server", wygląda on tak:
#!/bin/bash
cd ut2004/System

./ucc-bin-linux-amd64 server CTF-Maul?XGame.InstagibCTF?mutator=UT2Vote59.UT2VoteX -nohomedir -log=../logs/ucc.log &

Proste jak drut. Nie zapomnijcie tylko waszemu skryptowi nadać później uprawnień do wykonywania poleceniem:
chmod+x wasz_skrypt

Oczywiście spece robią dużo bardziej zaawansowane skrytpy obejmujące również automatyczne podnoszenie serwera jeśli padnie, ale ponownie odeślę Was po taką wiedzę do Google, tutaj tylko niezbędne podstawy.
--------------------------------------------------------------------------------------------------------------------------------------

Plik konfiguracyjny - UT2004.ini

Dokładnie, znajdujący się w oczywiście również w katalogu "System" przechowuje ustawienia naszego serwera, począwszy od nazwy, tego czy wymagane jest hasło aby do niego dołączyć, na różnych znacznie bardziej zaawansowanych rzeczach skończywszy. Nie będę tutaj opisywał tego co możemy w nim ustawić bowiem w tym pomaga Google, do tego nazwy opcji są bardzo przejrzyste.

Plik konfiguracyjny jeśli zamierzamy korzystać z mutatora UT2Vote

Pamiętajcie jednak, jeśli chcecie wyposażyć serwer w UT2Vote tak jak to było w moim przypadku możecie odpuścić sobie plik UT2004.ini bowiem ten mutator ma o sobie tak wysokie mniemanie, że niektóre ustawienai woli brać od siebie niż z głównego pliku konfiguracyjnego. Nawet tak naprawdę nie chodzi o odpuszczenie sobie pliku głównego ale co się da ustawiajcie w UT2Vote59.ini(dla wersji 59, ale podejrzewam, że nikt już nowej nie wypuści); a jeśli to nie da skutku, dopiero w UT2004.ini.

II. Konieczne(moim zdaniem) dodatki do serwera


Instalujemy mutatory - UT2Vote oraz UTComp 1.7a

Ktoś może zapytać, czemu nazywam te mutatory niezbędnymi? Już wyjaśniam, otóż grałem w życiu trochę w gry FPP/FPS i takie opcje jak BrightSkins(jasne skórki graczy) oraz Hit Sounds(dźwięk przy trafieniu przeciwnika) to dla mnie istotne części rozgrywki. BrightSkins pozwalają unikać camperów i czynią graczy lepiej widocznymi(to nie oszustwo a powszechnie stosowana praktyka - doświadczy tego każdy na serwerze), Hit Sounds natomiast po prostu osobiście lubię. Do tego UTComp dodaje kolorowe nicki(bajer ale fajny) i generalnie sam UTComp by wystarczył natomiast nie pozwala on głosować między graczami na mutatory, a to mnie wkurza - dlatego łączę go z UT2Vote59. Poza tym UTComp ma naprawdę świetny domyślny dźwięk przy trafieniu przeciwnika, sprawdźcie.

Dodam, że autor UT2Vote zrobił do niego jakiś mutator że są w nim BrightSkins i Hit Sounds ale to już jak wolicie, UTComp dodaje też nową tablicę punktów, statystyki celności z broni itd. Nie sprawdzałem tego drugiego ale mi UTComp po prostu w 100% odpowiada.

UT2Vote59

59 ponieważ jest to jego najnowsza na chwilę obecną wersja. Pobieramy pakiet(radzę utworzyć sobie jakiś osobny katalog na serwerze gdzie będziecie przechowywać paczki z mutatorami i ewentualnie modami) poleceniem:
wget http://www.proasm.com/files/ut/UT2Vote59.zip

Następnie do katalogu z naszym serwerem i podkatalogu System kopiujemy pliki:
UT2Vote59.int

UT2Vote59.ini

UT2Vote59.u

UT2Vote59.ucl

Natomiast do pliku konfiguracyjnego UT2004.ini, do działu [Engine.GameEngine] dopisujemy na końcu:
ServerPackages=UT2Vote59

Pamiętajmy, że podczas uruchamiania serwera należy dopisać taką część, analogicznie do przykładu kilka części wyżej:
?mutator=UT2Vote59.UT2VoteX

O ile dobrze pamiętam, funkcjonuje jeszcze ?mutator=UT2Vote59.UT2VoteXMulti, ale z tego co kojarzę stosuje się tą wersję tylko dla maszyn na których jest naraz więcej serwerów gier przy czym nie mam zupełnie pojęcia czy chodzi tylko o serwery UT2004 czy ogólnie serwery różnych gier.

UTComp 1.7a

U mnie konkretnie plik nazywał się utcomp17a_116, jeszcze czytałem o jakimś utcomp17a_3fix czy fix3 ale nie udało mi się go odnaleźć więc nie wiem tak naprawdę o co tam chodzi; być może jakaś drobna poprawka. Oczywiście pobierzcie sobie pakiet z UTComp z sieci, nie podaję linka bo o ile pamiętam ja znalazłem go dopiero na jakimś Game Froncie czy czymś takim więc kopiowałem potem przez FTP bo wget nie działał. Jak już macie pakiet to do katalogu System wrzucacie wszystkie pliki analogicznie z paczki tj.:
utcomp17a.u

utcomp17a.ucl

utcomp.int

Następnie w pliku UT2004.ini, dziale [Engine.GameEngine] dopisujemy:
ServerPackages=utcompv17a

Zaś grę uruchamiamy dodając:
?Mutator=utcompv17a.MutUTComp

Aktywowanie UTComp na serwerze działającym pod kontrolą UT2Vote

No właśnie, wtedy nie dopisujemy ?Mutator=utcompv17a.MutUTComp tylko otwieramy plik UT2Vote59.ini i szukamy linijki ServerMuts=, następnie zmieniamy ją aby wyglądała tak:
ServerMuts=utcompv17a.MutUTComp

I to wszystko.
--------------------------------------------------------------------------------------------------------------------------------------

Trochę bezpieczeństwa - UTSecure i AntiTCC

Sprawa jest taka, że do UT2004 są takie dwie alternatywy, nie znalazłem szybkiej odpowiedzi która z nich jest lepsza więc po najmniejszej linii oporu zaproponuję Wam instalację UTSecure z którego sam korzystam.

Skądś tam pobierzcie sobie pakiet z tym niezbędnikiem(ja już go pobierałem kawałek czasu temu i nawet nie pamiętam skąd), a następnie z paczki(moja to UTSecure2K4-111.zip) dorzucacie takie pliki analogicznie do katalogu System:
UTSecure2K4-111.ucl

UTSecure2K4-111.int

UTSecure2K4.ini (ten plik jak łatwo się domyśleć zawiera zaawansowane ustawienia tego mutatora, można się nimi pobawić wedle uznania)

UTSecure2K4-111.u

Do pliku UT2004.ini dopisujemy w [Engine.GameEngine]:
ServerPackages=UTSecure2K4-111
ServerActors=UTSecure2K4-111.UTSecureServerActor

I cała filozofia. W przypadku UTSecure nie dopisywałem nic do Ut2Vote59.ini i wszystko śmiga.
--------------------------------------------------------------------------------------------------------------------------------------

Adminie - oszczędź sobie roboty

Jak już będziecie mieli tak bazowo ustawiony serwer radzę zrobić backup, ja po ustawieniu razem Patch3369 + Ut2Vote + UTComp + UTSecure, mając serwer w katalogu ut2004 wydałem polecenie:
tar cjspf ut2k4_ut2vote_utcomp_utsecure-111.tar.bz2 ut2004

Aby mieć gotową paczkę jakbym coś namieszał i chciał móc szybko ustawić szybką bazę do użytku. Mam nadzieję, że ten krótki poradnik się komuś przyda.

III. Dodatkowe informacje - serwer


Tryb Instagib CTF jako domyślny dla serwera działającego pod U2Vote59

Tak jest, jest to zdecydowanie mój ulubiony tryb gry natomiast miałem parę problemow w przypadku UT2Vote. Otóż tak, sprecyzowanie mapy i trybu gry dla tego mutatora znaczyło niewiele, co należało zrobić, oczywiście ustawić wszystko w pliku UT2Vote59.ini.

Wybieranie domyślnego trybu gry na serwer w przypadku UT2Vote

Tryb gry wybieracie sobie inaczej niż w przypadku przypisywania go komendzie za pomocą której uruchamiacie serwer. Tzn. używamy innych, "normalniejszych" nazw - zobaczycie że to proste. Przede wszystkim co nas będzie interesować, dział [UT2Vote59.UT2VoteConfigs] i linijka:
DefaultGameName=Capture the Flag (przynajmniej ja miałem domyślnie CTF tutaj)

Zastanawiałem się natomiast skąd wziąć nazwy trybów dla UT2Vote, okazało się że są wypisane niżej w dziale [UT2Vote59.UT2VoteGameTypes]. Okazało się też coś jeszcze, że w tym dziale każdy tryb ma ustawienia jak limit czasu, punktów itp. - a to mi się już bardzo podoba. Tak więc chcąc grać na czystym iCTF piszemy po prostu:
DefaultGameName=Instagib CTF

Wszystko gra i buczy tylko tak, nie miałem translocatora i zooma - a chciałem.

Robimy translocator w trybie iCTF pod UT2Vote

Translocator rozwiązał się prosto, po prostu w pliku UT2004.ini dodałem sobie dział [XGame.InstagibCTF] i analogicznie jak to jest w dziale [XGame.xCTFGame] dopisałem sobie tam:
bAllowTrans=True

Wiem, że tam gdzie UT2Vote59 ma tryby gry w pliku .ini jest napisane też ?Translocator=True. Najwyraźniej nie ma to dla tego mutatora znaczenia; jak pisałem, używając UT2Vote musimy liczyć się z tym, że administrujemy teraz serwerem w dwóch plikach - UT2004.ini i UT2Vote59.ini.

Robimy zooma w trybie iCTF pod UT2Vote(dodajemy nowy tryb gry - Zoom iCTF!)

Ok, ale brak zooma jeszcze trzeba zrobić; zauważcie, że tak naprawdę nic nie stoi na przeszkodzie aby dodać własny tryb gry - tak też zrobimy. Skopiujcie sobie tryb "Instagib CTF", całą linijkę. Teraz nazwę zmieńcie na "Zoom iCTF" i oczywiście jeszcze wrócimy do linijki:
DefaultGameName=Instagib CTF

którą zmieniacie na:
DefaultGameName=Zoom iCTF

I teraz tak, nie możemy w linijce tego trybu zostawić:
GameClass="XGame.InstagibCTF"

Znaczy możemy, ale jeśli dodacie do niej w mutatorach(też w tej samej linijce) mutator XGame.MutZoomInstaGib, nie będzie działał - sprawdzałem. Może dwukrotne ustawienie Instagiba się gryzie, nie wiem tego; grunt, że nie działa. Dlatego skopiujmy sobie tryb gry ze zwykłego CTF, tak aby wpis GameClass= dla waszego trybu "Zoom iCTF" wyglądał następująco:
GameClass="XGame.xCTFGame"

Teraz działa! Translocator oczywiście też będzie bo w pliku UT2004.ini już było dopisane bAllowTrans=True dla trybu gry XGame.xCTFGame - czyli tego na bazie którego stworzyliśmy swój tryb Zoom iCTF dla Ut2Vote. Dodatkowo możecie szybko zmieniać sobie teraz tryb gry między Instagib CTF i Zoom iCTF, fajne, prawda?
--------------------------------------------------------------------------------------------------------------------------------------

Różne opcje Bright Skins(jasne skórki) dla graczy w UTComp 1.7a

No właśnie, domyślnie ustawione są te domyślne dla mutator, mające identyfikator "3", aby jednak wybrać np. opcję "Brighter Epic Style" wystarczy że w pliku UT2004.ini w sekcji "[utcompv17a.MutUTComp]" znajdziemy wpis "EnableBrightSkinsMode=" i uzupełnimy go w następujący sposób:
EnableBrightSkinsMode=2

--------------------------------------------------------------------------------------------------------------------------------------

Dostosowanie Hit Sounds w UTComp 1.7a

Domyślnie w przypadku tego mutatora dźwięki słyszalne przy trafieniu przeciwnika usłyszymy tylko jeśli widzimy trafienie, jest to stan tzw. "Line of Sight". Osobiście wolę jednak abym słuszał dźwięk nawet wtedy jeśli np. trafię przeciwnika za ścianą czy jakimś winklem; należy wtedy przełączyć się na "Everywhere". Aby tego dokonać podobnie jak wyżej, w pliku UT2004.ini, w sekcji "[utcompv17a.MutUTComp]" zmieniamy wpis; tym razem "EnableHitSoundsMode=" aby wyglądał w następujący sposób:
EnableHitSoundsMode=2

--------------------------------------------------------------------------------------------------------------------------------------

Automatyczne nagrywanie dem na serwerze - UTComp 1.7a

Tak, jest taka możliwość; wystarczy, że wejdziemy w plik UT2004.ini w którym jak się domyślam, macie już utworzoną sekcję "[utcompv17a.MutUTComp]". W tej sekcji szukamy czegoś takiego jak "bEnableAutoDemoRec=" i ustawiamy to na:
bEnableAutoDemoRec=True

IV. Dodatkowe informacje - ustawienia gracza(lokalne)


Zegarek w grze?

Możliwe, pamiętam, że bardzo mi się coś takiego porobało w modzie do Quake 3 Arena - OSP. Jeśli mamy UT2Vote możemy osiągnąć to wchodząc tym razem w ustawienia lokalne. Tam gdzie instalowaliście grę otwieracie User.ini(w katalogu System oczywiście) i w dziale "[UT2Vote59.UT2VoteClient]"(dział pojawi się jak sądze, jeśli chociaż raz połączycie się z serwerem pracującym z UT2Vote) należy posiadać linijkę:
bDisplayTime=True

--------------------------------------------------------------------------------------------------------------------------------------

Nie wykluczam, że post będzie aktualizowany.

środa, 22 lutego 2012

Tworzenie filtru dla wielu nadawców w GMailu

Przydatne gdy ręcznie filtrujemy częsty, ale nie wyłapywany automatycznie spam. Pamiętajmy, że adresów nadawców nie oddzielamy przecinkami tylko spacjami, zaś całą grupę zamykamy w nawiasy klamrowe, np.:
{adres1@jakaspoczta.pl adres2@jakaspoczta.pl adres3@jakaspoczta.pl}

Kompilacja Fluxbox 1.3.7 kompilatorem C++ 17 (GCC 11)

Po aktualizacji systemu jakiś czas temu okazało się, że posiadając nową wersję gcc w systemie nie byłem w stanie poprawnie skompilować Fluxb...