ResGen
Spis treści |
Opis
ResGen to program do tworzenia plików .res, które są wykorzystywane w HLDS.
Pliki .res zawierają listę zasobów potrzebnych do prawidłowego odpalenia mapki przez serwer jak i klienta. Jest to w rzeczywistości plik tekstowy, można go edytować notepadem albo stworzyć od zera innym edytorem tekstu. Jednak po co się męczyć - do tworzenia plików .res stosujemy program resgen, który za nas odwali kawał roboty.
Linki
Kompilacja ze źródeł
Dostępne są żródła, szczególnie pomocne jak mamy linuksa z nowym gcc a nie jakieś archaizmy z 2003 roku.
Pod linuksem dla potrzeb nowego gcc-4.3 trzeba zmienic troche makefile, zmienić CFLAGS oraz LDFLAGS
- z CFLAGs usuwamy -m486
- do LDFLAGS dodajemy -lstdc++ aby dodac standardowe biblioteki c++
#full optimization CFLAGS=$(BASE_CFLAGS) -w -s -O2 \ -ffast-math -funroll-loops \ -fexpensive-optimizations -malign-loops=2 \ -malign-jumps=2 -malign-functions=2 LDFLAGS=-lstdc++
do tego trzeba zmienic vstring.h - zastapnic VString::InstrRev na InstrRev
// int VString::InstrRev(char *search, int start); int InstrRev(char *search, int start);
Tworzymy jeszcze katalog obj/ Po tych zmianach makefile powinen nie zgłaszać błędów.
Pod windows powinno działać bez zmian, no chyba, że mamy gcc-4.3 - nie testowałem.
Komendy
Podstawowa komenda i słownik angielskiego podają nam informacje jak używać aplikacji (z konsoli)
resgen --help
(tłumaczenie)
RESGen version 2.0 BETA 2, Copyright (C) 2000-2003 Jeroen Bogers RESGen comes with ABSOLUTELY NO WARRANTY; for details use the command line switch '-w'. This is free software, and you are welcome to redistribute it under certain conditions; see the 'gpl.txt' file for details. Parametry: -h wyświetla help (po angielsku) -c wyświetla listę autorów -w pokazuje rozszerzony ekran z prawami autorskimi -v uruchamia tzw. silent mode czyli bardzo mało wyników na ekranie się będzie pojawiać -s nie wyświetla linii statusu -i nie wyświetla aktualnego folderu podczas poszukiwania plików z mapami -j nie wyświetla listy znalezionych zasobów podczas przetwarzania mapy -d [folder] przetwarzaj cały folder (z mapami) -r [folder] tak jak -d, ale schodzi do podkatalogów (np przy generowaniu plików .res dla wszystkich map wszystkich modów) -f [nazwa] przetwarzaj mapę o nazwie 'nazwa' [map] tak samo jak -f -x [nazwa] nie przetwarzaj mapy o nazwie 'nazwa', użyteczne przy parametrach -d i -r -o nadpisz istniejące pliki .res -a [rfafile] dodaj zawartość pliku .rfa o pliku .res (przy dodawaniu np dźwięków multikill) -l nie przetwarzaj nazw plików na małe litery (teoretycznie ważne na linuksie szczególnie przy użyciu sv_dowloadurl, ale aktualnie naprawione) -e [modpath] sprawdź ścieżkę 'modpath' w poszukiwaniu zasobów -p nie szukaj zasobów w plikach .pak (z czasów cs 1.5) -t ignoruj linki symboliczne podczas szukania zasobów (linux only) Przykład: resgen -f boot_camp -d . -r ../mappack -e hlds_l/cstrike
Przed uruchomieniem pliku resgen z mapami najlepiej jeśli zrobicie sobie gdzieś kopie plików .res (np w podkatalogu maps/bak)
Najlepiej program resgen umieścić w katalogu cstrike i uruchamiamy z konsoli.
resgen -t -d maps -o -e
Wtedy przemieli wszystkie mapki i stworzy dla każdej plik .res, Uwaga ten proces może być czasochłonny!
Dlatego lepiej dla jednej mapy wpisać:
resgen -t -f nazwa_mapy -o -e
Dla naszej mapki de_biochem komenda wiec będzie wyglądać tak:
resgen -t -f maps/de_biochem -o -e
Wtedy pojawi się na ekranie cos w rodzaju poniższego tekstu:
Added "maps/de_biochem.bsp" to map list Creating .res file for maps/de_biochem.bsp [1/1]: halflife.wad decals.wad gfx/env/dashdesert256_up.tga gfx/env/dashdesert256_dn.tga gfx/env/dashdesert256_lf.tga gfx/env/dashdesert256_rt.tga gfx/env/dashdesert256_ft.tga gfx/env/dashdesert256_bk.tga models/tnt.mdl maps/de_biochem.txt Done creating res file(s)! 1 file(s) were generated.
W efekcie powinien powstać plik maps/de_biochem.res o poniższej zawartości
// de_biochem.res - created with RESGen v2.0 BETA 2. // RESGen is made by Jeroen "ShadowLord" Bogers. // For more info go to http://resgen.hltools.com // or E-mail me at resgen@hltools.com. // .res entries (10): halflife.wad decals.wad gfx/env/dashdesert256_up.tga gfx/env/dashdesert256_dn.tga gfx/env/dashdesert256_lf.tga gfx/env/dashdesert256_rt.tga gfx/env/dashdesert256_ft.tga gfx/env/dashdesert256_bk.tga models/tnt.mdl maps/de_biochem.txt
Jeśli mamy dźwięki w katalogu sound/misc/ multikill, hedshot i chcemy aby były ściągane przez graczy na przykład:
sound/misc/headshot.wav sound/misc/holyshit.wav
oraz widok mapy z góry:
overviews/de_biochem.txt overviews/de_biochem.bmp
to możemy do tego pliku je dodać ręcznie, uzyskując w efekcie końcowym taki plik:
// de_biochem.res - created with RESGen v2.0 BETA 2. // RESGen is made by Jeroen "ShadowLord" Bogers. // For more info go to http://resgen.hltools.com // or E-mail me at resgen@hltools.com. // .res entries (10): halflife.wad decals.wad gfx/env/dashdesert256_up.tga gfx/env/dashdesert256_dn.tga gfx/env/dashdesert256_lf.tga gfx/env/dashdesert256_rt.tga gfx/env/dashdesert256_ft.tga gfx/env/dashdesert256_bk.tga models/tnt.mdl maps/de_biochem.txt sound/misc/headshot.wav sound/misc/holyshit.wav overviews/de_biochem.txt overviews/de_biochem.bmp
Uwaga, nie należy dodawać za dużo dźwięków, bo może się nie załadować mapka - serwer się wyłoży, szczególnie jest to zauważalne przy mapach typu de_aztec, de_oimec i innych, gdzie jest dużo ekstra modeli, tekstur, efektów itp, i wtedy limit 512 obiektów jest przekraczany i serwer się wykłada. Wtedy trzeba ręcznie usunąć nadmiarową ilość wpisów z pliku .res i spróbować załadować mapkę jeszce raz.
NIE NALEŻY dodawać plików .wav typu multikill i headshot, jeśli używamy pluginów do AMX Mod czy AMX Mod X, które robią to za nas, np sank sounds, czy psycho sounds i temu podobne.
Dodawanie masowe plików
Masowe dodawanie plików .wav do zassania. Czyli mamy własne dźwięki i chcemy dodać do wszelkich map na jakich gramy aby na pewno były ściągalne.
Dodajemy listę plików do pliku lista.rfa na przykład
sound/misc/dominating.wav sound/misc/firstblood.wav sound/misc/headshot.wav sound/misc/holyshit.wav sound/misc/holyshit_q3.wav sound/misc/humiliation.wav
Odpalamy resgen z dodatkowym parametrem -a lista.rfa, aby stworzyć pliki .res oraz aby zawierały naszą listę dodatkowych zasobów:
resgen -t -d maps -o -e -a lista.rfa
Od tego momentu wszelkie pliki .res powinny mieć dodatkowo nasze dźwięki (i inne rzeczy) dodane, i powinnny się ściągać z serwera, jeśli klient na to pozwala.
Problemy
Resgen nie dodaje overview Wiem, że poprzednie wersje resgen'a mialy błąd i w ogóle nie dodawały plików overview, wtedy trzeba dorwać nowsza wersje resgen'a, albo obejść problem - można overview dodać ręczne, nie mówiąc o tym ze najpierw trzeba dostać/zrobić pliki overview, ale i tak z tego trybu pewnie korzysta maks 5% graczy i to tylko wtedy gdy widok mapki nie jest zablokowany.
Skrypt multiRes (win)
Przy 20 mapach utworzenie ręcznie plików resource troszkę czasu zajmuje, ale jest to osiągalne, ale w przypadku 100, 200 lub ~1700 map jest to awykonalne. Poniżej prezentuje dwa proste skrypty do utworzenia plików resource (res), także plików konfiguracji mapconfig, dla wszystkich posiadanych map, włączenie z overviews. Pliki należy zapisać/utworzyć w wraz z programem ResGen.exe w katalogu cstrike. Działanie jest proste: 1.cmd tworzy listę map z katalogu /maps zapisuje je odpowiednio przetworzone w pliku 2.cmd res.cmd tworzy pliki resource (.res), AMXModX mapconfig dla pluginów (.ini) oraz AMXModX mapconfig dla cvarów (.cfg), sprawdza czy istnieją podglądy mapy w katalogu overviews
zawartość pliku 1.cmd
@echo off > newfile & setLocal enableDELAYedexpansion dir maps\*.bsp /B >> 2.cmd for /f "tokens=* delims= " %%a in ('echo 2.cmd') do ( for /f "tokens=* delims= " %%t in (%%a) do ( set S=%%t set S=!S:.bsp =! >> newfile echo @call res.cmd !S! ) copy newfile "%%a" > nul ) del newfile
zawartość pliku res.cmd
@echo off > newfile & setLocal enableDELAYedexpansion IF NOT EXIST maps\%1.bsp ( ECHO [ BLAD ] NIE MA TAKIEJ MAPY LUB UZYJ NAZWY MAPY BEZ ROZSZERZENIA GOTO end ) @echo RESOURCE DLA MAPY [ %1.bsp ] >> _lista @resgen.exe -v -o -f maps\%1.bsp >> _lista cd maps for /f "tokens=* delims= " %%a in ('echo %1.res') do ( for /f "tokens=* delims= " %%t in (%%a) do ( set S=%%t REM nie ma sensu by w pliku resource sprawdzało standardowe pliki tekstur w hl i cs16 set S=!S:models/player=//-! set S=!S:ajawad.wad=//-! set S=!S:cached.wad=//-! set S=!S:chateau.wad=//-! set S=!S:cs_747.wad=//-! set S=!S:cs_assault.wad=//-! set S=!S:cs_bdog.wad=//-! set S=!S:cs_cbble.wad=//-! set S=!S:cs_dust.wad=//-! set S=!S:cs_havana.WAD=//-! set S=!S:cs_office.wad=//-! set S=!S:cstraining.wad=//-! set S=!S:cstrike.wad=//-! set S=!S:de_airstrip.wad=//-! set S=!S:de_aztec.wad=//-! set S=!S:de_piranesi.wad=//-! set S=!S:de_storm.wad=//-! set S=!S:de_vertigo.wad=//-! set S=!S:decals.wad=//-! set S=!S:iga_static.wad=//-! set S=!S:itsitaly.wad=//-! set S=!S:n0th1ng.wad=//-! set S=!S:prodigy.wad=//-! set S=!S:torntextures.wad=//-! set S=!S:tswad.wad=//-! set S=!S:gfx.wad=//-! set S=!S:halflife.wad=//-! set S=!S:liquids.wad=//-! set S=!S:spraypaint.wad=//-! set S=!S:xeno.wad=//-! >> newfile echo !S! ) copy newfile "%%a" > nul ) rem dodawanie widoków IF EXIST ..\overviews\%1.bmp ECHO overviews/%1.bmp >> %1.res IF EXIST ..\overviews\%1.tga ECHO overviews/%1.tga >> %1.res IF EXIST ..\overviews\%1.txt ECHO overviews/%1.txt >> %1.res rem sprawdzanie poprawności oryginalnych plików np smoke ECHO sprites/gas_puff_01.spr >> %1.res ECHO sprites/smokepuff.spr >> %1.res del newfile cd .. del newfile rem mapconfig pluginy on off IF NOT EXIST addons\nul md addons\amxmodx\configs\maps\ echo MAPCONFIG [%1.BSP] cd addons\amxmodx\configs\maps\ echo ;; MAPCONFIG PLUGINS INI [%1.BSP] >> plugins-%1.ini echo ;; http://wiki.alliedmods.net/Configuring_AMX_Mod_X#Map_Specific_Plugins >> plugins-%1.ini rem mapconfig cvar echo ;; MAPCONFIG CVAR CFG [%1.BSP] >> %1.cfg echo ;; http://wiki.alliedmods.net/Configuring_AMX_Mod_X#Map_Config_Files >> %1.cfg echo amx_restrict on shield >> %1.cfg echo amx_pausecfg stop M_Antirusher_2.6.amxx >> %1.cfg cd .. cd .. cd .. cd .. :end
kolejność uruchamiana: 1.cmd po zakończeniu 2.cmd
dla pojedynczej mapy można użyć polecenia res.cmd <nazwamapy>