Unreal Tournament 2004

From Fontys VR-Wiki
Jump to: navigation, search

UT2004

Scripting

Manual


Fontys-Cave UT2004

UT2004 kan ook in de cave draaien. De huidige versie is vrij goed speelbaar, maar momenteel (18-10-2010) is het project nog in ontwikkeling, waardoor het mogelijk niet in speelbare vorm beschikbaar is.


Opzet

In de cave wordt UT2004 gebruikt in client/server configuratie. De machine: caveserver is de server. De machines met beamer zijn de clients. De server "host" een game, en de clients verbinden met die game.

Op caveserver is het spel te vinden onder:

D:\Program Files (x86)\EPIC Games\UT2004

Op alle client machines staat het spel op:

D:\Program Files (x86)\UT2004

De script source is te vinden op de server in de

D:\Program Files (x86)\EPIC Games\UT2004\FontysCAVE\Classes

directory.

Daarnaast is de source van de OpenGL driver hack te vinden onder

D:\VRGL\Source.

Merk op dat de padnamen vrij onhandig gekozen zijn. D:\Cave software\UT2004\... zou beter geweest zijn.

Aan het spel dat gebruikt wordt zijn een aantal dingen veranderd. Aan UT2004 zijn twee mutators toegevoegd die de werking van het spel beïnvloeden. Daarnaast wordt er een OpenGL driver hack gebruikt om bepaalde effecten te bereiken.


CaveUT_FontysMutator

Deze component is gebaseerd op CaveUT. Fontys Cave-UT is gebaseerd op CaveUT. CaveUT is unreal tournament voor een ander soort cave (eentje zonder head-tracking). Er wordt vanuit gegaan dat de gebruiker zich precies in het midden van de cave bevind. CaveUT zorgt dus voor een panoramische projectie van UT. (Dit is op zichzelf ook al best aardig.)

Vermoedelijk is deze component vrijwel identiek aan de originele CaveUT. (Er kunnen onbekende wijzigingen zijn.) Waar de component voor zorgt, is dat alle clients die verbinden, verbinden als spectator. De positie van de spectators is gebaseerd op die van de speler, maar dan met een bepaalde rotatie offset (een translatie offset zou in principe ook kunnen).

Op deze manier "kijkt" iedere cave wand in een andere richting. De voorste cave wand kijkt in de oorspronkelijke CaveUT in de richting van de player (alhoewel de offsets instelbaar zijn via een configuratie file). De rotatie offsets zijn voor iedere machine apart instelbaar in de CaveUT.ini file op de betreffende machine.

In CaveUT.ini staan een hoop andere settings. Ga er maar niet vanuit dat die werken. De VRGL settings worden gewoonweg genegeerd.

Recenelijk is er een aanpasing gedaan in deze component. Zo kan er een aanvullende rotatie offset en translatie offset worden meegegeven. Deze offset kan ieder frame in het server script worden bepaald. (De offset wordt bepaald in Daemon_mutator.uc.

Hierdoor is het mogelijk dat de schermen niet gebaseerd zijn op de player orientatie/positie, maar een afgeleide hiervan. (Momenteel betreft het alleen rotaties (18-10-2010).) Door deze aanpassing is het mogelijk om bijvoorbeeld te richten met de wand (i.e. de scene draait niet maar de speler wel).


Daemon_mutator

Deze mutator past het spel aan aan de hand van input vergaard van de Fontys VR-Cave Daemon. Omdat UT2004-script nogal moeilijk doet, was het niet mogelijk om binair data uit te lezen.

Wel was het mogelijk om string data uit te lezen. De kans is groot dat beide data representaties equivalent zijn, maar omdat dit onbekend is, is er gekozen voor een tekstueel formaat. (Een ander argument is, dat UTscript een vrij beperkte taal is. Het zou best wel eens lastig kunnen zijn een string terug om te zetten naar een binaire repsesentatie (dit leek ook niet echt mogelijk).)

De Fontys VR-Cave Daemon is specifiek voor UT2004 aangepast om deze rede (zie Fontys VR-Cave Daemon#UT2004 hack).

[1]

Zie ook TCP & UDP Links#UDP Link.

Tevens past deze mutator ook het scherm aan. Het scherm wordt in tweeën gedeeld. In de file daemon_interaction.uc zit een functie PostRender(). De functie wordt aangeroepen aldus zijn naam.

Nadat de scene gerenderd is, wordt in deze functie de scene nogmaals 2x gerenderd (over de oorspronkelijke scene heen). Een keer voor het linker oog, en een keer voor het rechteroog (op de linker en rechter helft van het scherm). De code in deze functie is een beetje rommelig (het blijkt niet mogelijk te zijn, om de gerenderde scene die overtekend wordt niet te renderen).

Het enige dat eigenlijk echt van belang is, is dat de scene 2 keer gerenderd wordt. Een keer voor het linker oog en een keer voor het rechter oog. De perspectieve projecties worden naderhand aangepast in de OpenGL driver (ze kloppen dus niet). Een vereiste is dat beide projecties dezelfde oorsprong hebben. (dus pos links = pos recht) (Dit ziet er niet netjes uit in de code.)

Strikt genomen is het niet mogelijk om de projectie/origine aan te passen in de OpenGL driver. In post-render worden in principe frustum's opgevgeven die geprojecteerd moeten worden. Alles buiten deze frustrums, sterker nog, alles wat niet zichtbaar is vanuit de origine, wordt weggelaten. In PostRender() wordt een zo wijd mogelijk frustrum gekozen. Hierdoor is de kans dat de gecorrigeerde projectie erbuiten valt klein.

Indien je de projectie/origine dus aanpast in de OpenGL driver loop je het risico dat er dingen wegvallen. Momenteel gebeurt dit op incidentele basis. In principe kan dit gefixed worden (door de juiste oog posities op te geven in daemon_interaction.uc). Alhoewel in dit geval de OpenGL driver ook aangepast dient te worden omdat deze aanneemt dat beiden projecties vanuit hetzelfde punt komen.


OpenGL driver

De OpenGL driver is een wrapper om de oorspronkelijke OpenGL driver. Alle OpenGL commando's die gegeven worden, worden in principe onderschept. De data die opgegeven wordt kan aangepast worden. Er kan eigenlijk vanalles mee gedaan worden.

Zo zou je bijvoorbeeld OpenGL kunnen implementeren in Direct3D (indien je niets beters te doen hebt).

Het komt erop neer dat er een beetje onvrede heerste omdat de projecties die UT2004 (in combinatie met de mutators) toont niet helemaal naar wens zijn. De origine van de camera komt overeen met die van de speler. En de projecties kloppen totaal niet voor de cave.

De driver maakt oorspronkelijk deel uit van CaveUT. Uiteindelijk is deze vrij ver omgebouwd. Er zit een hoop code in die niet gebruikt wordt (sferische correctie) en het is een beetje rommelig (er is door meerdere mensen redelijk wat aan gesleuteld).

CaveUT onderschept de perspectieve projectie matrices. Er worden enkele aannames gedaan. Een daarvan is normaal OpenGL gebruik. (Je kunt de perspectieve transformatie ook via de modelview matrix regelen indien je dat zou willen.)

De projectie matrix wordt aangepast. De OpenGL driver maakt gebruik van de DaemonSDK. Deze API wordt gebruikt om een projectie matrix op te stellen die voldoet.

Opmerkelijk bij UT2004 is dat er een linkshandig coördinaten-stelsel gebruikt wordt. (X = rechts, Y = omhoog, Z = van je af (in scherm coördinaten)). De eenheid die bij UT2004 gebruikt wordt is vrij raar 1/52 meter (stelletje mafkezen).

Naast de perspectieve correctie, wordt er ook nog een lijntje getekend,vanuit de wand, in de richting waarnaar deze wijst. Deze lijn wordt gewoon over de scene heen getekend. De z-buffer van de oorspronkelijke scene blijft behouden, dus de lijn wordt op correcte wijze "ge-occlude". In principe is het mogelijk een arbitraire OpenGL scene over UT2004 heen te tekenen.


Een build maken

Je kunt de code editen met de applicatie WOTgreal (aangeraden) of met notepad.

Start->All Programs->WOTgreal->WOTgreal

Op de desktop staat een mapje UT2004. Je kunt de code laten compileren door buildUT.bat te gebruiken. (Er worden meldingen gegeven indien het misgaat.)

De OpenGL code kan veranderd worden in het project

D:\VRGL\Source\CaveUTGL.sln.

Door een release build de resulterende OpenGL32.dll file automatisch in de juiste directory gezet (de system dir van ut2004 op de server).

Je kunt copyUT.bat draaien (in desktop/UT2004), om alles te synchroniseren.

Deze informatie staat (gedeeltelijk) ook in de UT Cave Manual.

Uitbreidingen / verbeteringen UT in VR CAVE

Er worden nog altijd uitbreidingen en verbeteringen gedaan aan de versie van Unreal Tournament in de Virtual Reality Cave. Zo is één van die dingen het interessanter maken van de besturing.


Besturing interessanter maken

De besturing moest interessanter gemaakt worden. Het was alleen nog maar mogelijk om rond te kijken, te lopen en te schieten. De besturing is sowieso even wennen als je de PC gewend bent. De besturing met de Wii controller was als volgt:

UTWiiControls 1.png

Het lopen werd gedaan doormiddel van de richtingsknoppen, het schieten doormiddel van de “B”- en de “A”-knop en het wisselen van wapens doormiddel van de “+” en de “-“-knop. Het richten wordt gedaan met behulp van een tracking pointer device, deze kan in de hand worden vastgehouden of met klittenband worden bevestigd aan de Wii-mote.

Door het toevoegen van springen en kruipen werd de besturing al wat interessanter gemaakt. Het springen werd geplaatst onder de “1”-toets en het kruipen onder de “2”-knop. Dit is te zien in de afbeelding hieronder:

UTWiiControls 2.png

Dit was natuurlijk niet optimaal, aangezien het vrijwel onmogelijk is om bijvoorbeeld vooruit te bewegen tijdens het kruipen terwijl je op vijanden aan het schieten was. Kortom, het was lastig om bepaalde speciale bewegingen, die toch onderdeel van het spel waren, uit te voeren.

De besturing moest anders opgezet gaan worden, het bewegen in het spel moest heel soepel gemaakt worden. Unreal Tournament is een spel met erg veel snelle actie, de speler zou hier dan ook met een snelle reactietijd op moeten kunnen reageren.

Na het toevoegen van het springen en kruipen werd de nunchuk van de Wii verbonden met de Wii-mote, hierdoor werden er meerdere knoppen beschikbaar voor de besturing.

Het springen en kruipen werd nu verplaatst naar de nunchuk. Met de “C”-knop kan de speler nu springen en met de “Z”-knop kan de speler kruipen. Zoals in dit voorbeeld:

UTWiiControls 3.png

De besturing is nu echter nog steeds niet optimaal. De speler kan nog steeds net niet snel genoeg meedoen met de actie van het spel. Vooral het wapens wisselen kost (relatief) erg veel tijd. Het is wenselijk dat er heel snel met wapens gewisseld kan worden. Door met de “+” en de “-“-knop te wisselen van wapens wordt de speler als het ware even uit het spel gehaald omdat hij zijn vingers even van de richtingsknoppen weg moet verplaatsen. Het is belangrijk dat je voortdurend in beweging bent in het spel, iemand die stil staat is een makkelijk doelwit voor de tegenstanders.

De ideale besturing zou dus eigenlijk als volgt zijn:

UTWiiControls 4.png

In plaats van de richtingsknoppen te gebruiken om te lopen zal er met de nunchuk joystick gebruik gemaakt worden om voort te bewegen in de spelwereld. Verder zal er niet meer doormiddel van de “+” en “-“-knop met wapens gewisseld worden, maar nu wordt dit gedaan met de richtingsknoppen.

Deze ideale besturing is nu gerealiseerd. Het spel is nu speelbaar met deze instellingen.

Ten slotte was er ook geprobeerd het schieten onder de “C” en “Z”-knoppen van de Nunchuk te plaatsen. Dit blijkt echter toch niet zo prettig werken aangezien het richten met een tracking pointer device die verbonden is met de Wii-mote zelf gedaan wordt.


Nunchuk Joystick

De Nunchuk Joystick moest uitgelezen kunnen worden voor besturing beter te maken. Het voelt heel natuurlijk aan om te lopen in UT doormiddel van de Wii Nunchuk Joystick.

Een andere mogelijkheid voor de joystick zou het wisselen van wapens kunnen zijn. Echter zou het beter zijn om alle functies die met bewegen te maken hebben (lopen, springen, kruipen) bij elkaar te houden en alle functies die met de wapens te maken hebben (schieten, wapens wisselen) bij elkaar te houden. Daarom zou met de huidige instellingen de joystick het beste voor lopen gebruikt kunnen worden.

Het uitlezen van de nunchuk joystick gaat anders dan een gewone knop. In tegenstelling tot alle andere knoppen op de Wii controllers, levert de joystick een x en een y waarde die beide variëren tussen -1,00 en 1,00 in plaats van een waarde die simpelweg voor wel ingedrukt of niet ingedrukt staat.

De nunchuk joystick is uit te lezen en in het spel te gebruiken.


Scenetranslatie mechanisme Perlin Demo

De Perlin Demo is bekeken omdat het scenetranslatie mechanisme dat hierin te vinden is misschien goed toe te passen was voor UT2004.

De Perlin Demo, met name het scenetranslatie mechanisme, was bestudeerd. Hieruit werd in de eerste instantie geconcludeerd dat dit mechanisme waarschijnlijk niet goed toe te passen is voor UT2004. Bij UT is het belangrijk dat je snel verschillende kanten op kunt bewegen en bij UT is er ook de mogelijkheid om een bepaalde richting in te “dodgen” (snel die richting in bewegen door twee keer achterelkaar op de knop voor die richting te drukken). Het was niet meteen duidelijk hoe het dodgen hier dan vervolgens in verwerkt zou moeten worden. De implementatie lijkt lastig.

Er is verder (nog) niet naar de technische details gekeken. Er moeten overwegingen gemaakt worden of dit ook echt de moeite waard is.


Wii Pistool

Er is gekeken of het Wii pistool goed bruikbaar is voor CAVE UT.

De besturing zag er in de eerste instantie als volgt uit:

UTWiiControls gun1.png

Bij het testen van het Wii pistool ondervonden er wel een paar problemen, zo wordt bijvoorbeeld de A knop van de Wii niet goed ingedrukt. Onder de B knop bevindt zich nog een knop die bedoelt is voor de A knop in te drukken, als deze ingedrukt wordt schuift er een balkje over de A knop heen die deze dan in moet drukken. Dit balkje levert vaak niet genoeg drukkracht om de A knop in te drukken.

Verder is het is vrijwel onmogelijk om zowel te lopen en schieten als de Wii-mote zich in het Wii pistool bevindt en de gebruiker tegelijkertijd het tracking pointer device moet vasthouden. Daarom zou het verstandig zijn het tracking pointer device te bevestigen aan het Wii pistool, bijvoorbeeld doormiddel van klittenband.

Om te lopen moet je op de richtingsknoppen boven op de Wii zien te drukken, hierdoor houd je het Wii pistool een beetje op een rare manier vast. Het zou handig zijn als het lopen op een andere manier gedaan kan worden, bijvoorbeeld door de Wii Nunchuk te verbinden met het pistool en hiervan de joystick te gebruiken of via het mechanisme van de Perlin demo.

Als de Wii Nunchuk dan daadwerkelijk verbonden wordt aan het Wii pistool blijkt dat het erg lastig wordt om de richtingsknoppen in te drukken. Eigenlijk worden dan ook de andere knoppen die zich boven op de Wii bevinden lastig om in te drukken. Als het lopen, het springen en het kruipen dan gedaan wordt doormiddel van de nunchuk, wordt het lastig om het wisselen van wapens nog aan een knop toe te kennen. Zie deze afbeelding:

UTWiiControls gun2.png

Een optie zou dan kunnen zijn om het kruipen (wat eigenlijk doorgaans toch niet veel gebruikt wordt in het spel) weg te laten en de knop die dan op de nunchuk vrijkomt voor het wisselen van wapens te gebruiken. Op deze manier:

UTWiiControls gun3.png

Het Wii pistool is wel erg leuk om te gebruiken, omdat je dan nog meer het gevoel hebt dat je echt in de wereld van Unreal Tournament rondloopt. In Unreal Tournament loop je namelijk ook (bijna) altijd met een wapen in je handen rondt. (Dit ligt ook aan welke spelmodus je in het spel speelt.)


Accelerometers

Een andere mogelijkheid van de Wii controllers zijn de accelerometers die zich in de controllers bevinden, hier kan misschien ook nog naar gekeken worden om ergens voor te gebruiken. Als je bedenkt dat er snelle bewegingen nodig zijn voor het spelen van Unreal Tournament en dat je met je vingers veel sneller acties kunt uitvoeren dan met je pols of hele arm, kan je misschien tot de conclusie komen dat het gebruik van accelerometers misschien niet optimaal is het bij het spel Unreal Tournament.

Één mogelijkheid voor de accelerometers zou zijn om deze te gebruiken bij een spelmodus waarbij er voertuigen in het spel beschikbaar zijn, dat je met het snel schudden van je Wii controllers in of uit een voertuig kan stappen.

Een andere mogelijkheid is dat de speler bij een snelle beweging van de Wii controllers een taunt doet. Bij UT kan de speler taunts afspelen. Deze taunts zijn zinnetjes met audio die de speler kan zeggen of een animatie, waardoor de speler een bepaalde beweging zoals een dansje in het spel doet.


Cave versus PC

Er kan onderzoek gedaan worden naar de mogelijkheden van het spelen in de CAVE tegen iemand achter een PC. Hier is nog niet naar gekeken.



Gedateerde informatie