Overview
Celestes is an online multiplayer collectible card game (CCG) set in a fantasy universe. The game features strategic gameplay where players collect and build decks of cards, each representing characters, effects, and abilities. Key aspects include gameplay mechanics: players engage in tactical battles using their customized decks, requiring strategic planning and foresight. Card Variety: A diverse range of cards allows for extensive deck customization and varied playstyles. Art and Design: High-quality artwork enhances the visual appeal and immersion of the game. Community Engagement: daily and weekly rewards keep the player community active and engaged.
How we built it
Unity 2D gaming engine to design and build a WebGL package to be run on a browser on a React website, use of Amazon web services through API calls and SDKs from inside the game build itself or the browser.
Challenges we ran into
Literally so many. The hardest was integrating all the different tools and making sure they worked within the limitations of a browser. I had to stop, step back, and rethink a problem many times. I ran into a major hurdle when I was unable to make the Cognito login through the Webgl build due to its limitations. At first, I thought this hurdle would be project ending so I was very relieved when I was able to solve it. One thing I couldn't find an optimum solution for was figuring out how many players were logged in! I settled for an approximate estimate. It would be nice to have an easy way to see how many users are logged in to Cognito. A lot of testing was involved to make sure all lambda functions worked. CloudTrail and CloudWatch were key in this process.
Accomplishments that we're proud of
Beautiful art generated using Midjourney. Very cool in-game animations like the black hole inspired by real physics and implemented using DOTween animated shaders. Secure purchase web-socket design integrating Xsolla and API Gateway. Accurate and temper-proof in-game currency delivery using authentication token validation inside lambda functions called by API Gateway. Communication between the website and Unity WebGL build is achieved through functions stored inside original external library and react-unity-webgl library.
What we learned
Perhaps a game that is fun for me isn't necessarily fun for everyone. AWS and Unity Services' fees can add up quickly even with no users. Leaving a server on in Unity Services so players can be quickly matched can be expensive. The option to only turn on the server when a matchmaking ticket is initiated saves a lot of money but adds up to 5 minutes of wait time to find a match if the player is the first one online on the server.
What's next for Celestes
Migrate game server hosting to AWS as well. I am not sure which service would be best for this though and how easy it would be compared to Unity's Multiplay Hosting as it is easily integrated with their other services. Create a campaign to ease players into many card effects and game strategy aspects. Further testing of all features especially the purchases through Xsolla which appear to work inside Canada only. Make assets available in S3 and download them when required so that the first load does not take as long. This is also necessary to make the transition to mobile apps as app stores have app size restrictions.
Built With
- amazon-web-services
- amazonq
- apigateway
- aws-.net-sdk
- aws-api
- aws-javascript-sdk
- c#
- certificatemanager
- cloudformation
- cloudfront
- cloudwatch
- codebuild
- codepipeline
- cognito
- dynamodb
- iam
- javascript
- lambdafunctions
- lambdalayers
- react
- route53
- s3
- unity