Project Combat Casper Bommelé Marc Eekhout Michel van der Hut Thom Bogers Kaj Toet Sjors Ammerlaan Welkom bij deze presentatie van Project Combat, waarbij wij ons werk aan de combat simulation system gaan tonen. De presentatie zal ongeveer een half uur duren, en vragen kunnen gesteld worden zodra ik dat aangeef. Duur: 30 minuten
How it all Began Hoofdstuk 1 Eerst een korte recap, voor diegene die er vorige keer niet bij waren, of het inmiddels alweer vergeten zijn. How it all Began
Combat Management System In Den Helder (zuid) gebruiken ze dit interface om wapensystemen mee af te vuren en te controleren op vijandige boten How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Wensen en eisen van de klant Grafisch indrukwekkende client Eisen en wensen synchroon met Alkmaar Server communicatie met verschillende clients Randvoorwaarden voor schieten en beschoten worden Dit zijn de wensen, zoals ik die vorige keer gepresenteerd heb. Een grafisch indrukwekkende client, die aan dezelfde eisen en wensen voldoet als de simulaties die ze in Alkmaar bouwen. Bovendien met een server gebouwd worden die met alle, dus ook alkmaars, clients moet kunnen communiceren. Visa verca moest ook iedere client met iedere server communiceren. Ook waren er wat randvoorwaarden, wanneer wel en wanneer niet geschoten wordt, etc. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
De game engine Microsoft XNA Framework jMonkey Engine Epic Games Unreal Development Kit 3 Als laatst liet ik destijds een demonstratie zien van verschillende game engines, microsofts XNA, de jmonkey engine, en epics UDK3. Uiteindelijk kozen we voor UDK, de grotere uitdaging die meer power en hogere kwaliteit moest bieden. Zijn er op dit moment nog vragen? How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Hoofdstuk 2 Dan ga ik het nu hebben over programmeren binnen UDK Age of udk
Tools Blender TortoiseSVN Google Code Unreal Development Kit Visual Studio Adobe Flash Alleereerst een stukje over de middelen die we gebruikt hebben, de meeste hiervan hebben we gedurende het hele proces gebruikt. Blender is een tool om 3d modellen mee te maken, hier ga ik straks nog wat verder op in. TortoiseSVN en Google Code hebben we gebruikt voor het uitwisselen en het up to date houden van de code. Iemand hier die niet weet wat Subversion is maar het wel wil weten? > eventueel later demonstreren < UDK3 spreekt voor zich, daarover later meer. Visual Studio kon samenwerken met UDK met behulp van een plugin, en was de ontwikkelomgeving van keus. Adobe Flash was vereist voor het maken van Heads up displays. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
3D ModeLleren Nu iets over blender. Zoals gezegd, een tool om 3d modellen mee te maken, en aan de hoeveelheid knopjes kun je al zien dat het geen makkelijk te gebruiken programma is. Het is een open source initiatief, met een behoorlijk grote community en veel tutorials. Hier zie je een gevechtsboot met textures, en hier die uitlijning van een cargoschip. Blender support bovendien animaties, al hebben wij daar geen gebruik van gemaakt. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Programmeren in UDK Professionele tool Weinig documentatie Limitaties van het framework Framework was standaard gemaakt voor soort kogel per unit Importeren model Geen XML ondersteuning Benodigde klassen waren niet extendable Vieze hacks Dan gaan we nu echt naar UDK. UDK is een professionele tool, kost voor commercieel gebruik tienduizenden euro’s, en bedrijven zijn er vaak maanden mee bezig om de software te doorgronden voor ze daadwerkelijk aan een spel beginnen. Een duidelijk nadeel van udk, is het gebrek aan documentatie, dat vooral beschikbaar is voor betalende gebruikers. Ook heeft het als framework de nodige limitaties. Een van die limitaties waar we omheen hebben moeten werken, is dat elke unit maar één soort kogel af kan schieten, en de boot zoals wij die hadden, was 1 unit, maar het was wel de bedoeling dat we meerdere soorten kannonnen af konden vuren. Het was bovendien lastig om de modellen van blender te importeren. Udk biedt ondersteuning voor professionelere tools als maya en 3ds max, maar niet voor blender, alleen via een omweg. Geen ondersteuning voor XML, en sommige van de klassen die we graag wilde gebruiken konden we niet extenden. Dit alles resulteerde in een aantal vieze hacks. Maar udk was slechts een van de problemen. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Contact met Alkmaar Cajo versus XML Vertaalserver Meerdere klantwensen Van dezelfde klant Ons eerste bezoek aan alkmaar, was enigzins ontluisterend. Terwijl wij voor onze server een prachtig xml protocol hadden bedacht, ging het er in alkmaar heel anders aan toe. ‘wij gebruiken cajo’. Wat is cajo? ‘cajo is java exclusive, en het idee is om complete objecten over het netwerk te sturen, en vervolgens die objecten aan te passen’. Maar dat werkt niet met ons in c# geschreven udk. ‘nope’. Uitiendelijk kwamen we tot de overeenkomst dat alkmaar een vertaalserver zou gaan schrijven met onze input en dat wij een xml protocol op zouden stellen. Tijdens een aantal presentaties die we te zien kregen vand e verschillende gropeen, bleek bovendien dat iedereen een ander idee had over wat de klanteis precies inhield. Uitiendelijk bleek dat de klant tegen iedere groep apart zijn wensen had aangegeven, en dat die groepen ieder met een andere intepretatie aan het werk waren gegaan. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Programmeren in UDK Flash HUD integreren in UDK Input krijgen naar Flash De input tegelijk met UDK Terug naar delft, terug naar udk. Ik zal één voorbeeld geven, om alles wat minder algemeen te maken. Ik heb al verteld, dat we flash gebruikten om een hud te maken, bijvoorbeeld een chat venster. Dit chat venster in UDK intregeren, dat was qua code al een aardige klus. Het is meer dan een kwestie van een regel met ‘embed flash hier’. Dan heb je flash, in je udk, maar het zou voor een chat leuk zijn als je dan ook input kan krijgen uit dat schermpje, en deze input kan synchronisteren met wat er gebeurd in udk. Dit bleek allemaal niet zo goed mogelijk, wat resulteerde in een scherm met meerdere muizen. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Resultaat Na een aantal weken hard gewerkt te hebben, is dit uiteindelijk het resultaat. Niet goed genoeg. Dus besloten we, om iets heel anders te gaan doen. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
And now for something completely different Hoofdstuk 3 Zijn er tot nog toe vragen? And now for something completely different
jMonkey SDK Gebasseerd op NetBeans Ondersteuning voor Cajo Multiplatform en ondersteuning voor webstart Reflective water Asset importing Node support Nifty GUI integratie Sommige UDK delen herbruikbaar Jmonkey is een open source game engine, geschrevem in java en gebasseerd op net beans. Dankzij java, is het ook compatibel met het in alkmaar gebruikte cajo, zodat zij konden stoppen met de vertaalserver, en wij hun implementatie konden gebruiken. Bijkomend voordeel van java is dat het werkt op ieder platform en bovendien via het web toegankelijk is. Mooi water is natuurlijk belangrijk als 98% van je spelwereld bestaat uit water, en daar komt reflective water om de hoek kijken, zie heir een voorbeeld. Asset importing is ook handig voor het importeren van onder meer modellen, en jmonkey pakte onze blender moddellen wel. Node support (?). Bovendien bevat jmonkey een implementatie van nifty gui, een handige tool waarbij je gui’s kan maken aan de hand van xml. Gelukkig waren sommige delen uit udk herbruikbaar, zoals enkele assets en een paar blokken logica. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Ontwikkeling in jMonkey Laat in het project Voortgang jMonkey loopt voorspoedig Implementatie boten, wapensystemen, chat, logging in 1 week tijd Voortgang Cajo server gaat minder soepel We waren pas laat in het project overgestapt op jmonkey, maar al gelijk bleek dat dat een goede keus was. Mede dankzij een ervaren persoon in onze projectgroep, haddden we in een week tijd al dingen als boten, wapensystemen, chat en een deel van logging af, allemaal in slechts 1 week tijd. Het werkte nog niet allemaal perfect, maar we waren al verder dan we met udk in al die weken gekomen waren. De voortgang in alkmaar, helaas, ging minder soepel. Het werk aan de cajo server ging niet echt soepel, en vanuit alkmaar horenden we ook weinig positiefs. Zijn er tot nog toe vragen over jmonkey? How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
An Offer You Cannot Refuse Hoofdstuk 4 Moving on naar het laatste hoofdstuk An Offer You Cannot Refuse
Het contract Nog later in het project “Een applicatie in een visueel rijke omgeving” “Deze client moet communiceren met een server uit alkmaar” “Klantcontract van Alkmaar is leidend” “Eigen server is géén eis” “Als Alkmaar een deel van de server niet implementeert, is het geen eis om de functionaliteit in de client te hebben” “Functionaliteit na 20 juni toegevoegd aan de server, wordt genegeerd” Nog wat later in het project, bleek dat het wel eens handig zou zijn om een contract te tekenen met de klant, over wat er nou werkelijk van ons verwacht wordt, en wat wij van de klant kunnen verwachten. Uit dat contract, kwamen ondermeer de volgende dingen naar voren, die ik hier grotendeels letterlijk heb neergezet. Visueel rijke omgeving. Dat wisten we al. server communicatie met alkmaar, dat wisten we ook. Klant contract met alkmaar is leidend. Logisch. Eigen server, is geen eis. Kijk eens aan. Maar wat dan, als de server in alkmaar faalt? Daarvoor de volgende clausule. “Als Alkmaar een deel van de server niet implementeert, is het geen eis om de functionaliteit in de client te hebben” “Functionaliteit na 20 juni toegevoegd aan de server, wordt genegeerd”. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Cajo of ca-nooo? Problemen in Alkmaar Server komt niet op tijd af Implementeerbaarheid is vrijwel nul Netwerkfunctionaliteit van de baan Contractueel voldoen we aan eisen Al snel bleek, dat alkmaar diep in de problemen zat. De manier waarop cajo werkt, ging toch iets anders dan ze in alkmaar dachten. Er zat een fundamentele fout in hun implementatie. Lang verhaal kort: de server kwam na de deadline van 20 juni. Omdat alkmaar koos voor een fat server, zaten wij met een lege, kale client, die niet kon communiceren met een server- want de versie die wij hadden werkte niet. Echter, volgens contract voldeden wij aan de eisen. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Kunstmatige intelligentie Terugplaatsen functionaliteit Singleplayer simulatie Artificial Intelligence Afronding Dit vonden we toch wel een beetje sneu voor onze klant, dus na een nieuwe overeenkomst, besloten wij om de functionaliteit die we eerder al hadden gebouwd, zoals bewegen en loggen, terug te plaatsen. Het zou een singleplayer simulator worden, met een simpele AI in plaats van verschillende clients. Daarna hebben we het project afgerond, getest, nog wat documentatie gemaakt, om uiteindelijk hier het resultaat te presenteren. How It All Began | Age of UDK | And Now For Something Completely Different | An Offer You Cannot Refuse
Demonstratie http://kalpha.com/simulator/ Uiteraard kunnen jullie de simulatie ook zelf spelen, via dit adres, maar eerst vragen we nog even jullie aandacht voor onze demonstratie, terwijl we live overschakelen naar een krachtigere laptop.