Retro Game Clone
Opdracht?
Tijd: 2 weken
Hoeveel personen: alleen
Afgerond: April 2024
Maak een kloon van een retro game. Je mag zelf uitzoeken welke game je namaakt, maar het is de opdracht om hem zo precies mogelijk na te maken. Je hoeft niet de hele game te maken, je mag ook een stukje van een game pakken en dat na maken.
Realisatie
De eerste stap van dit project was het uitzoeken welke game ik na wilde maken. Ik kan Mario doen. nee, dat is te voor de hand liggend. Mijn docent stelde iets al Frogger voor, maar dat vind ik niet leuk, en ik wil wel graag iets maken dat ik leuk vind. Zelf kwam ik al snel bij Final Fantasy. Ik kan het eerste stuk van de over wereld en de eerste dungeon wel namaken, maar ik bedacht me al snel dat dat misschien iets te hoog gegrepen was. Er gebeurt simpelweg gewoon best veel in de achtergrond, en ik kan het niet precies namaken als ik niet precies weet wat er gebeurd. Toen dacht ik aan The Legend Of Zelda, daar gebeurt minder in de achtergrond. Maar die game heeft best veel animaties en daar gebeurt best veel op de voorgrond waar ik gewoon niet de tijd voor zou hebben. Dus ik ging op internet zoeken naar inspiratie voor een leuke game. Er zaten een paar potentiƫle tussen, maar uiteindelijk is mijn besluit gevallen op Castlevania.

In deze game gebeurd ook redelijk veel, maar op het eerste gezicht niet iets wat extreem moeilijk of extreem veel werk zou worden. Ik besloot het eerste level na te maken. Dus ik analyseerde de gameplay, vond een emulator online waardoor ik het spel makkelijk zelf kon spelen om het makkelijker na te kunnen maken. Het leek allemaal redelijk haalbaar. Dus eenmaal klaar met het ontwerp/ de analyse, begon ik aan het programmeren. Het leek een veel belovende start, het lopen ging goed, de sprong voelde juist, de aanval namaken kosten iets meer moeite dan verwacht, maar ook dat lukt. Al snel had ik een net product staan. Richting het einde van de eerste sprint realiseerde ik mij wel ineens iets waar ik in eerste instantie overheen gekeken had, namelijk de trappen. Het lijkt zo simpel, maar ik had nog nooit iets in die richting gedaan. Ik probeerde online op te zoeken of ik kon vinden hoe het werkte, maar nu schijnt dat Castlevania een hele specifieke manier van trappen heeft, die ik online bijna niet kan vinden. Na lang zoeken besloot ik dat genoegen moest nemen met een versimpelt systeem. In plaats van trappen heb ik gewoon hellingen gemaakt die net iets anders werken als het origineel. Ik heb online hulp gezocht met het maken van het systeem, en het eindresultaat is beter geworden als verwacht. Het lijkt nog aardig op wat het had moeten zijn.
Deze blokkade had alleen zoveel tijd gekost dat het mij nooit zou lukken om alle elementen die ik nog wilde toevoegen te programmeren. Dus ik moest een aantal dingen schrappen. Ik heb naar mijn mening de minst belangrijke dingen geschrapt, zoals: een puntensysteem, een timer en levens. Het enige waar ik wat minder blij mee ben, maar geen tijd meer voor had om het aan te passen, is de UI. ik heb het helaas niet voor elkaar gekregen om die precies zoals het origineel te krijgen in de tijd ik nog had, maar hij toont in ieder geval de benodigde informatie.
Aan het einde van de rit ben ik redelijk blij met mijn eindproduct, maar ik vind het wel heel jammer dat ik niet alles heb kunnen maken dat ik wilde maken. Al met als is het een goed presenteer baar product geworden, met genoeg uitdaging.
Voorbeeld

Zelf vind ik dit wel een leuk stukje code. Ongeveer halverwege het project kwam een docent naar mij en dacht dat het misschien wel leuk was als ik een interface ging toepassen in dit project. Ik had hier nog nooit van gehoord in de context van code, dus mijn docent legde het uit. Hij had online een voorbeeld gevonden met de een interface genaamd IDamageable war het idee is dat alle script die gebruik maken van dit interface, een functie bevatten genaamd TakeDamage. Het is eigenlijk een makkelijke manier om te checken of een object deze functie bezit. Dus dat heb ik dan ook toegepast. Het was ene beetje zoeken hoe het precies werkt, maar het is gelukt. In dit code voorbeeld valt de speler aan met een animatie. op een specifiek frame in de animatie voert hij deze functie uit. Het gameobject van de speler schiet ene RaycastAll vooruit en zet alle objecten die het raakt in een array. Dan kijkt voor alle geraakte objecten of ze een de IDamageable interface gebruiken. Als het object dit bevat wordt hij een een lijst gezet als een IDamageable object. Als alle geraakte objecten zijn gecheckt, wordt voor alle objecten die toegevoegd waren aan de lijst de TakeDamage functie, waarvan je nu zeker weet dat ze die hebben, uitgevoerd.