Nekem fantasztikusan kezdődött az új év, mert rátaláltam az OpenRA kezdeményezésre. Már fiatalabb koromban is a stratégiai játékokban több sikerem volt, így sokkal inkább preferáltam a hosszabb és megfontoltabb döntéseket igénylő szórakozást, mint a vad lövöldözést és száguldozást. A gyerekkorom nagy stratégiai játékainak számított a DUNE 2000 vagy a Command and Conquer később pedig a C&C: Red Alert. Nagyon sikeres és hihetetlen jó játékok voltak ezek a maguk idejében. Véleményem szerint, a mai napig kihat az a mechanika és struktúra, amiket ezek a játékok lefektettek. Persze minden kornak megvannak a maga limitációi. Ha manapság akarnánk játszani ezekkel a játékokkal, akkor a hatalmas monitorokon, és modern 64 bites operációs rendszereken már nem nyújtanák a régi élményt, csupán egy paródiáját a régi csodáknak. Persze van megoldás!
OpenRA
Az OpenRA egy kiadótól független saját szerveződés. A készítők gyakorlatilag teljesen újraírták a programot, megtartva az eredeti pixel grafikát, hangulatot, járműveket, és játékstílust. Viszont a játék portolva lett modern Windows, Linux és OSX operációs rendszerekre is. Nem csak, hogy futnak az új gépeken, de képesek kezelni a hatalmas felbontásokat is.
(Nekem most az Apple Thunderbolt kijelzőmön mindegyik pálya egy az egyben látszik, nem kell scroll-ozni a térképen. Az érzés pedig hihetetlen!)
Természetesen ez az új release nem tartalmazza az eredeti kampány, egyjátékos játékmenetet. Csupán mások ellen vagy saját gépünkön a számítógép által megszemélyesített társak ellen játszhatunk. Cserébe az OpenRA három játékot is tartalmaz. Egész pontosan a játék motorja ugyan az. Csupán az egységek, épületek, és az egész játék grafikáját szabályozó MOD-ok választhatóak. Tehát három játék közül választhatunk indítás után:
– C&C (Tiberian Dawn)
– C&C: Red Alert
– Dune 2000
Számomra a Mod-ok ténylegesen külön játékot jelentettek, és nem csak külön skin-eket. Mindezt pedig INGYEN!!!
Dedicated Linux Server
Külön öröm számomra, hogy azon túl, hogy a játék játszható Linux-on is, lehetőségünk van nyilvános OpenRA szervert is futtatni. Egy kicsit bonyolult, és jómagam saját script-eket is fejlesztettem hozzá, ezért úgy gondoltam lejegyem hogyan installáltam és futtatom a játékot.
A következő procedúra egy Ubuntu 14.04 rendszeren történt.
Hozzunk létre egy felhasználót, ami a játék szerverét fogja futtatni.
root@server# useradd -md /home/openra openra root@server# passwd openra
Telepítsük a szükséges dependenciákat. A játéknak MONO futtató környezetre van szüksége. Az én esetemben ezek a függőségek elegendőek voltak.
root@server# apt-get install libmono-system-core4.0-cil libmono-system-windows-forms4.0-cil xdg-utils zenity libopenal1 libopenal-data libalut0 libcg libfluidsynth1 libmad0 libmikmod2 libmono-accessibility2.0-cil libmono-corlib2.0-cil libmono-data-tds2.0-cil libmono-i18n-west2.0-cil libmono-messaging2.0-cil libmono-posix2.0-cil libmono-security2.0-cil libmono-sharpzip2.84-cil libmono-sqlite2.0-cil libmono-system-data-linq2.0-cil libmono-system-data2.0-cil libmono-system-messaging2.0-cil libmono-system-runtime2.0-cil libmono-system-web2.0-cil libmono-system2.0-cil libmono-wcf3.0a-cil libmono-webbrowser2.0-cil libmono-winforms2.0-cil libmono2.0-cil libsdl-gfx1.2-4 libsdl-image1.2 libsdl-mixer1.2 libsdl-net1.2 libsdl-ttf2.0-0 libsmpeg0
Töltsük le a legfrissebb release-t a hivatalos oldalról: http://www.openra.net/download/
Majd telepítsük a csomagot.
root@server# dpkg -i /tmp/openra_release.20141029_all.deb
Az első indítást kézzel érdemes megtenni, mert ez az első indítás fogja legenerálni a szükséges konfigurációs állományokat.
Erre én írtam egy saját script-et, ezt létre kell hoznunk kézzel:
# cat /usr/games/openra-server
#!/bin/bash Name="Dedicated-Server" Mod="ra" Dedicated="True" DedicatedLoop="True" ListenPort=1234 ExternalPort=1234 AdvertiseOnline="False" BINDIR=$(dirname $(readlink -f $0)) ROOTDIR="${BINDIR%/usr/games}" EXECDIR="${ROOTDIR}/usr/lib" cd "${EXECDIR}/openra" while true; do mono --debug OpenRA.Game.exe Game.Mod=$Mod Server.Dedicated=$Dedicated Server.DedicatedLoop=$DedicatedLoop \ Server.Name=$Name Server.ListenPort=$ListenPort Server.ExternalPort=$ExternalPort \ Server.AdvertiseOnline=$AdvertiseOnline done
Ez gyakorlatilag beállítja, hogy milyen porton fog hallgatni a szerver, és hogy DEDIKÁLT módban fusson, folyamatosan, és ne hirdesse magát a hivatalos oldalra.
Ha ez megvan akkor tegyük futtathatóvá az állományt és kézzel indítsuk el.
root@server# chmod +x /usr/games/openra-server
Váltsunk az elkészített felhasználóvá.
root@server# su - openora openora@server$ /usr/games/openra-server
Egy klienssel megpróbálhatunk csatlakozni hozzá. Ha működik, akkor CTRL + C billentyű kombinációval megszakíthatjuk a szerver program futtatását.
A sikeres futást követően lépjünk be az újonnan létrehozott felhasználó könyvtárába.
openora@server$ cd /home/openra
Ebben a könyvtárban kell látnunk egy újonnan létrejött, és titkos .openra folder-t.
openora@server$ cd /home/openra/.openra
Ennek a könyvtárnak a tartalma fog felelni a jövendőbeli szerverünkért. a motd.txt-t szabadon szerkeszthetjük, ez fogja tartalmazni a szerverre belépők üdvözlő üzenetét. A settings.yaml pedig felel a szerver beállításaiért.
Ahogy az előbb láthattuk a frissen létrehozott file nem képes magától a háttérben futni, így én a következő scriptet hoztam létre. Ezt újra root-ként kell létrehozni a rendszer scriptek közé:
# vi /etc/init.d/openra
#!/bin/sh ### BEGIN INIT INFO # Provides: openra_ded # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Initscript for an OpenRA server # Description: Starts a dedicated OpenRA server and allows # it to be started/stopped/restarted with init.d ### END INIT INFO # Author: Dan9550 # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="OpenRA dedicated server" NAME="openra_ded" # The executable to use: DAEMON=/usr/games/openra-server SCRIPTNAME=/etc/init.d/$NAME #The game will be executed as this user. NEVER execute as root USERNAME=openra #USERNAME must have write access to the HOMEDIR HOMEDIR=/home/$USERNAME [ -r /etc/default/$NAME ] && . /etc/default/$NAME . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { daemon --name="$NAME" --user=$USERNAME --running && return 1 daemon --name="$NAME" --respawn --user=$USERNAME --output=/home/openra/openra_ded.out --env=HOME=$HOMEDIR $DAEMON > /dev/null } do_stop() { daemon --name=$NAME --user=$USERNAME --running ] || return 1 daemon --name=$NAME --user=$USERNAME --stop pkill -u $USERNAME } do_reload() { return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac
Adjunk neki futtatási jogot.
# chmod +x /etc/init.d/openra # apt-get install daemon
Majd ezzel a scriptel indítsuk az OpenRA szervert. Ez már a háttérben fogja futtatni a játék szervert. Ki is probálhatjuk most.
# /etc/init.d/openra start
Majd adjuk hozzá ezt a script-et alapértelmezett futási szintekhez. Így a gép indulásával automatikusan indulni fog a játék szerver is.
# cd /etc/init.d # update-rc.d openra defaults
A szerver frissítése
Az OpenRA csapat publikál deb csomagokat is, de sajnos nincsen saját repository-juk. Így nekünk kell frissíteni manuálisan a szervert. Forog az interneten néhány ehhez hasonló script, de sajnos vagy nem működtek, vagy nem pont azt csinálták amit kellene. Így én írtam egyet. Ezt szintén az Ubuntu 14.04-es rendszeren teszteltem.
Alapvetően a következőt csinálja:
– letölti a /tmp -be a legfrisebb deb csomagot a weboldalról
– megnézi a letöltött csomagnak milyen a verziója
– megnézi a telepített csomag verzióját
– ha a telepített verzió régebbi mint a letöltött akkor telepíti és újraindítja a szervert a már bemutatott indító script segítségével
– letörli a /tmp alá letöltött file-t
# vi /usr/games/openra-update
#! /bin/bash # Attempts to download new build URL=$(wget 'http://openra.res0l.net/download/linux/deb/' -o /dev/null -O - | grep deb | grep release | awk -F\" '{print $2}') wget $URL -O /tmp/oraupdate.deb # New version NEW_VERSION=$(dpkg -I /tmp/oraupdate.deb | awk '$1=="Version:" {print $2}' | sed 's|.release||') # Installed version INSTALLED_VERSION=$(dpkg -l | awk '$2=="openra" { print $3 }' | sed 's|.release||') # If available is newer then install if [ "$NEW_VERSION" -gt "$INSTALLED_VERSION" ] then # Stop the service /etc/init.d/openra stop # Installs new build dpkg -i /tmp/oraupdate.deb # Start the service /etc/init.d/openra start fi # Removes the package rm /tmp/oraupdate.deb
A script-et tegyük futtathatóvá.
# chmod +x /usr/games/openra-update
Majd tegyük ezt a scriptet a cron job-ok közé.
# crontab -e
55 5 * * * /usr/games/openra-update
E szerint a script minden hajnal 5:55-kor fog futni.
Xorp OpenRA szerver
A game.xorp.hu oldalon természetesen megjelent az OpenRA szerver is, így ha valaki hálózatban kíván játszani másokkal, az igénybe veheti ezt a szervert is. Részletek itt.