Het spel
Het doel van dit project is om een UNIX/Linux remake te maken van het bekende DOS-spel "Stunts"."Het oorspronkelijke spel"
Het oorspronkelijke DOS spel (ontwikkeld door Broderbund en Mindscape) kan gedownload worden op verschillende abandonware-sites, bijvoorbeeld de XTC site.Stunts is een 3D racespel, met eenvoudige CGA/EGA/VGA graphics, zonder texture of "smooth shading", maar vanwege de spectaculaire stunts (loopings, bruggen om over heen te springen, etc.) was het een erg leuk spel. Een van de beste aspecten van dit spel is dat het een track-editor had. Doordat de banen opgebouwd zijn uit tiles kon iedereen zijn eigen banen maken.
Overeenkomsten / verschillen
UltimateStunts zal veel overeenkomsten hebben met Stunts:- Het is een 3D racespel
- Het is mogelijk (en relatief eenvoudig) om je eigen banen te maken
- De banen zijn opgebouwd uit grote blokken, de 'tiles'
- Het is mogelijk om het op relatief oude computers te spelen
- De spellen delen enkele ERG spectaculaire stunts
- Het is mogelijk om van de weg af te rijden (maar je krijgt er wel penalty tijd voor)
- Platform onafhankelijkheid: UltimateStunts is open source en het zal indien mogelijk platform onafhankelijke bibliotheken gebruiken.
- 3D geluid
- Betere banen: De baanafmetingen (l*w*h) zijn variabel.
- Betere graphics (gebaseerd op openGL), met texture, smooth shading, reflectie etc.
- Multiplayer: het oorspronkelijke spel ondersteunde max. 1 menselijke speler en 1 computer tegenstander. UltimateStunts wordt een IP-gebaseerd network spel, met een server en zowel menselijke en AI clients.
- Een uitgebreide set van tiles en banen. In feite kan je je eigen verzameling van tiles en banen uitbreiden met packages.
Gedetaileerde specificatie
Het spel
Het spel zal een driedimensionaal racespel worden, waarin het maken van je eigen banen en het doen van stunts essentiële delen van de gameplay vormen. De physics zullen quasi-realistisch zijn: gameplay is belangrijker dan realisme. De doelstellingen die een speler kan hebben zijn het verslaan van tegenstanders en een race, het behalen van een high score, en het maken van banen die (bijna) onmogelijk zijn om te rijden.Multiplayer
Spelers zullen in staat zijn om in hun eentje te rijden (om in de highscore lijst te komen), tegen computer tegenstanders, tegen vrienden in een split-screen sessie, of in een multiplayer sessie over een LAN of over het internet. Combinaties zullen ook mogelijk zijn, bijvoorbeeld om tegen computer tegenstanders te spelen over het internet.Netwerk
Wanneer er netwerk communicatie is betrokken bij een spelsessie, dan wordt een apart serverprogramma gestart op één van de computers. Het zal mogelijk zijn om de server te starten met een menu item in het client programma, maar het zal ook mogelijk zijn om het handmatig te starten op een "dedicated server". De server geeft niet alleen alle data door, maar treedt ook als scheidsrechter op. De spelsimulatie zal op de server draaien, en alle lokale simulators moeten synchroniseren met de server. De server beslist ook op welke track er wordt gespeeld, en welke auto's toegestaan zijn. Alle bestanden moeten beschikbaar zijn op de server, en als ze niet beschikbaar zijn voor één van de clients, dan zal die client in staat zijn om de missende bestanden automatisch te downloaden van de server.Graphics
Ultimate Stunts zal in staat zijn om hoge kwaliteit 3D graphics te leveren, maar het zal zeer flexibel zijn op dit punt. Om ook een speelbaar spel te leveren op platforms waar geen hardwareversnelling beschikbaar is, zal het mogelijk zijn om de complexiteit van de graphics terug te brengen tot een minimum. Aan de andere kant zal op high-end platforms geavanceerde technologie gebruikt worden.De tracks
De tracks zullen zijn opgebouwd uit vierkante tiles, net als in Stunts. De verschillen zijn:- De afmetingen van Ultimate Stunts tracks liggen niet vast. Tracks kunnen extreem groot gemaakt worden. Beperkende factoren zouden kunnen zijn: de grootte van integer waarden (data zal over het netwerk verstuurd worden als 32-bits integers; posities zijn vermenigvuldigd met 1000 om een nauwkeurigheid van 1 mm te krijgen), de nauwkeurigheid van floating point waarden (sommige berekeningen worden gedaan in absolute coördinaten), of het geheugengebruik. Het geheugengebruik van grote tracks zal niet extreem groot zijn, doordat per tile slects een paar integers opgeslagen zijn, om het tilemodel, de oriëntatie en de hoogte te definiëren.
- In Stunts is voor elke locatie op de kaart een landschap type en een tile type gedefinieerd. Dit maakt het niet mogelijk om tiles boven elkaar te plaatsen, en het geeft ook een beperking voor hoogteverschillen. In Ultimate Stunts zal de track een driedimensionale array van tiles zijn. In een track met n lagen kunnen maximaal n tiles boven elkaar geplaatst worden. Voor elke plaats in het driedimensionale grid zijn drie waarden gedefinieerd: één verwijst naar het tilemodel, één beschrijft de rotatie (0, 1, 2 of 3) van de tile, en de derde definieert de hoogte van de tile (gemeten in eenheden van 1 tile). Die laatste waarde maakt het mogelijk om heel grote hoogteverschillen te maken met slechts een paar lagen.
- De tiles die gebruikt kunnen worden in Ultimate Stunts zullen niet beperkt blijven tot een vaste set. In plaats daarvan wordt elke tile opgeslagen in zijn eigen bestand(en), en de track bestanden zullen verwijzen naar deze bestanden.
De track editor
De track editor zal een gebruikersvriendelijk programma worden voor het bewerken van tracks. Het zal mogelijk zijn om de track editor te starten vanuit een menu item in het hoofdprogramma. Doordat tracks in Ultimate Stunts meer 3D zijn dan Stunts tracks, zal de editor complexer zijn. Het zal geïnspireerd zijn door de rollercoaster editor in Rollercoaster Tycoon. Het basisidee is om een "cursor" te hebben aan het einde van de weg. De gebruiker kan delecteren of de weg naar links/rechts moet gaan, naar boven/beneden, of een stunt toegevoegd moet worden enzovoort. De track editor zou dan automatisch de juiste aanpassingen moeten maken aan de track. Uiteraard moet de track editor ook de geldigheid van de track controleren, en het onmogelijk maken om ongeldige veranderingen aan te brengen. De track editor moet de mogelijkheid hebben om originele Stunts tracks te importeren.Replays
Net als Stunts, zal Ultimate Stunts de mogelijkheid hebben om replays te maken en te bekijken (maar het zal niet mogelijk zijn om originele Stunts replays in te lezen). Ultimate Stunts replays zullen elke positie en oriëntatie bevatten van elk bewegend voorwerp in de scene, voor elk frame. Met de juiste conversietools kan deze data ook gebruikt worden in animatieprogramma's (zoals 3D Studio), bijvoorbeeld voor het maken van een intro video voor Ultimate Stunts. In Ultimate Stunts zal het ook mogelijk zijn om een replay als ghost player te gebruiken.De stunts3dedit editor
Toen dit project begon waren er geen plannen voor een 3D editor, maar zodra complexe tiles nodig waren, werd er één gemaakt om de moeilijkheid te verminderen van het schrijven van tile definities in text bestanden. De 3D editor zal zijn wat het nu is: een eenvoudige tool voor low-level polygoon manipulatie, met enkele high-level bewerkers. Een mogelijkheid die steeds belangrijker wordt is de mogelijkheid om externe bestandsformaten te importeren. Het gebruik zal als volgt zijn: maak een model in een externe 3D editor, importeer het in stunts3dedit, repareer enkele dingen, en sla het op voor gebruik in Ultimate Stunts.Systeemeisen
UltimateStunts is erg flexibel in zijn systeemeisen: het kan gespeeld worden op computers zonder hardwareversnelling, maar het is ook mogelijk om volledig gebruik te maken van de 3D technologie in moderne PC's.De volgende dingen zijn vereist om de windows binaries aan de praat te krijgen:
- Windows 95,NT of hoger (maar Wine, de windows-emulator in Linux, werkt waarschijnlijk ook)
- openGL (of Mesa) installatie (standaard op de meeste systemen)
- Het X window systeem
- openGL (of Mesa)
- SDL (oude versies gebruikten glut)
- BSD netwerk bibliotheek (altijd(?) aanwezig op BSD en Linux systemen)
Om het spel er goed uit te laten zien met een normale frame-rate, worden de volgende dingen aanbevolen:
- Pentium 200MHz processor of hoger (of iets vergelijkbaars op non-PC platforms)
- Een videokaart met hardware-versnelling voor openGL
- Geluid (door FMOD, of in toekomstige versies door openAL))
- Joysticks
De technologie
De belangrijkste ontwikkelplatforms zijn Linux en Cygwin (= in windows), maar ik probeer het portable te houden met andere unix-achtige omgevingen, zoals MacOS/X. Voor graphics en invoer wordt een openGL/SDL combinatie gebruikt. Netwerk-communicatie wordt gedaan met standaard UNIX (BSD) netwerk functies. Het communicatieprotocol zal UDP/IP gaan gebruiken. Geluid is geimplementeerd met de FMOD bibliotheek, maar zodra ik leer hoe ik openAL kan gebruiken, zal er een implementatie voor die bibliotheek toegevoegd worden.Het project zal een aantal verschillende programma's leveren. Dit zijn de volgende:
- Het UltimateStunts hoofdprogramma, levert graphics, geluid etc. Dit programma levert ook een gui.
- Een server programma
- Een AI client
- Een eenvoudige 3D editor, om tiles en auto's te bewerken, en om ze van andere bestandsformaten te importeren.
- Een baan editor
Netwerk en simulatie
De functionaliteit van de verschillende programma's die betrokken zijn in een spelsessie zal zeer flexibel worden, omdat de optimale configuratie afhangt van de netwerk parameters, zoals de bandbreedte. De volgende tekst beschrijft toekomstige versies, en is niet van toepassing op de huidige versie.In een lokaal spel, als er maar 1 computer meedoet aan de spelsessie, worden alle dingen (inclusief graphics, AI spelers en physics) gedaan door 1 programma. Als er meer dan 1 menselijke speler meedoet, in een netwerk-spel, worden de gegevens gedistribueerd door het serverprogramma. De physics simulatie wordt door het serverprogramma gedaan, maar (afhankelijk van de bandbreedte van de verbinding) doen sommige client programma's ook physics, om de trage synchronisatie met de server te corrigeren.
AI tegenstanders kunnen zowel binnen de server als in de UltimateStunts client gestart worden. Ze kunnen ook toegevoegd worden met het aparte AI-client programma. Experts die optimale prestaties willen kunnen het server programma zich ook laten gedragen als een client. Op deze manier kan het serverprogramma inloggen op een internetspel over een trage verbinding, en zich als een server gedragen tegenover verschillende spelers op een LAN. Dit geeft de mogelijkheid om een enkele client-server verbinding te gebruiken voor meerdere spelers.