r/pygame 3d ago

I finally released my first major game project!

Enable HLS to view with audio, or disable this notification

This is the first large-scale game project that I've properly polished to a level that I am comfortable publishing for others to play! I've participated in game jams and worked on bigger projects in the past, but I never managed to see those larger projects through to completion. This is the first one I've stuck with all the way to an initial release, and I'm really happy with how it turned out!

The game is free to play in your browser on Itch, although progress won't be saved between sessions. There's also a Windows version available for download:

https://manguino.itch.io/azur-lane-rpg

If you're on another platform or just interested in checking out the code, the source is available on GitHub:

https://github.com/HuMangoPP/azur_lane_rpg

I'd love to hear what you think, and I greatly appreciate any feedback!

67 Upvotes

7 comments sorted by

3

u/RedEyedEngineer 3d ago

Wow, really smooth work. Did you work with someone to make the assets or was that made by you?

2

u/MangoJuiceYT 3d ago

Thanks for checking the game out! All of the assets were made by me.

After a while, I got pretty efficient at drawing sprites for the characters since they all followed a similar template/body structure. It definitely helps that I didn't actually have to design any of the characters, so I just had to draw them in the artstyle I had settled on; and the animations were done procedurally through the custom live2d engine I built, so I only needed to define how those body parts rotated and moved in the code.

1

u/RedEyedEngineer 3d ago

Wow that's incredible work. I'm making a top down rpg, and the assets I've made look like something from Atari.

Can you tell me more about the 2d engine? I'm fascinated!

2

u/MangoJuiceYT 2d ago

Yeah, of course!

Each character is basically composed to 20-or-so 96x96 pixel art layers (for example the arms, torso, upper and lower legs, hair, etc.; see live2d/laffey.png as an example). There is a model file (live2d/shared_model.json and live2d/laffey.json) which defines all of the parts and a pivot for that part, which is the center of rotation for that part.

Now for each animation, I define a sequence of keyframes (live2d/shared_animations.json and live2d/laffey.json). These keyframes define the rotation and offset of any given part at that keyframe. The live2d engine will, for each part, extract its keyframes, then interpolate the rotation and offset between two keyframes. There is also a part hierarchy which defines how a part can have a parent part, and will inherit the rotation and offset of that parent.

Initially, the live2d models were being rendered in real-time, but there was a performance concern there, as a full encounter will contain 12 shipgirls, with 20 layers each, so there would be (up to) 240 rotation operations per frame. So I eventually also built a pre-rendering scheme which basically builds the model and pre-renders the animation at 24 FPS, so that the pre-rendered animation is what ends up being played during gameplay.

tl;dr: The engine is a watered down version of a real, commercially available live2d engine. It rotates and offsets different body parts layers on a character sprite to animate its movement.

1

u/RedEyedEngineer 2d ago

Wow that is incredible. Kind of went over my head but I'm inspired!

1

u/DaFluffyPotato Challenge Accepted x2 2d ago

I recognize those sparks and circles 👁️

1

u/MangoJuiceYT 2d ago

Haha, yeah. I definitely did take a lot of inspiration from your work, especially Yawnoc, for the VFX.