Thursday, December 3, 2020

Sharing three sons' NaGaDeMon experiences

This is my final post in my series (1, 2, 3) for National Game Design Month 2020. Like last year, I was not the only person in my family who was working on NaGaDeMon projects. My three older sons each worked on projects, and two of them saw these through to completion. I encouraged each to write a reflection about the experience and worked with them on the structure and form of a good reflection.

I am proud of their dedication, and I am pleased to share their reflections and project links below.

#1 Son (13) Project: Sprite


Reflection:

I wanted to make a multiplayer game that my brothers and I could play together over the Steam Link. I knew I wanted there to be spinning swords and the NaGaDeMon as the final boss. I also wanted to make the game in Godot.

This was the first project in which I used the Light2D node, and I think that it worked out quite nicely. The light node requires a texture as an emission shape, so I had to make a circular image that faded into oblivion at the edges. Initially, I tried using Gimp, but couldn't figure out how to make what I wanted. I went back to Piskel and made a suboptimal image there. Because Piskel is a pixel-based editor, I was only able to make concentric rings with the alpha value increasing towards the center instead of a smooth gradient. The bright side is that I learned how to make colors translucent in piskel, which is something I must have done accidentally before and didn’t know how to undo.

Because I wanted to be able to play my game over Steam, I had to export it to a Windows executable and then add it to the Steam interface, which were both new to me. I never got the casting to steam link to work quite right, but I think it was a problem with the steam link and not my code, because it works well on the computer directly. I had trouble with the enemies spawning inside of walls, so I learned how to make a raycast via accessing the game physics and get the collision point where I then could spawn the enemy.

I wasn’t able to make the sword spinning work perfectly until the very end of the month. I initially had it set up so that if you moved the stick right, the sword rotated counter-clockwise, and when you moved it left, it rotated clockwise. That worked well, but it was hard to control. Then I changed it to having the sword point in the direction the stick is pointing.

Many of my variable names were repetitive and/or vague and had inconsistent privacy (in Godot, an underscore in front of the variable name), which made it hard to tell at a glance what was going on and made it hard to remember which variables were which. I also used a lot of serial if statements, which are really hard to read when there is more than one condition or it’s inside of some other function. I did learn something else cool, which was how to typehint a function return (In Godot it is [-> variable type] at the end of the function before the colon).

If I were to do it again, I would ask how to make a better light image in Gimp instead of making something in Piskel. I should export more of my values to variables so that my code is more readable. I would also make the enemy-spawning lightning bolts extend to where the enemy is being spawned, rather than being a static length. I wanted to make the final boss have multiple lives and attack methods, but never got around to that.

I had a problem with my sword rotating towards the direction the stick is pointing. My code was basically “if value > current_value, rotate counterclockwise. Else, rotate clockwise.” Dad pointed out that if value = 360 and current_value = 1, the sword would rotate the 360 degrees counterclockwise instead of one degree clockwise because value is greater than current_value. Dad found a piece of code that was totally beyond my comprehension, but worked perfectly. I would like to learn more about radians for my next rotation project, because when we incorporated the code from the internet, we had some trouble with mixed degrees and radians.

I had a lot of fun making this game, and I learned some neat things as well. I look forward to incorporating them into other projects.

The code for the seamless rotation is here: https://godotengine.org/qa/41043/lerping-angle-while-going-trought-shortest-possible-distance

#2 Son (10) Project: The Magic Amulet

Reflection:
Hi! I am writing this reflection on The magic amulet, my NaGaDeMon game. I had four main goals going into this project: I wanted to make a backstory, I wanted the character to wield some kind of weapon that can spin, I wanted to make death animations, and I wanted the enemy spawners to go with the back story. I managed to incorporate all of those into my game.

I had a lot of fun creating the art for The magic amulet. The kobold knight was some thing I have been wanting to put into a game for a while now, and I like the animation I put on his cape. I had a lot of fun with the animation on the enemy chaos wisps.

This is my second NaGaDeMon project, my inspiration for this game actually came from another one of my construct games. The magic amulet is not finished because I got tired of working on it and decided I would like to start a new game. thank you for reading this reflection on my game.

#3 Son (8) Project: Keep


Reflection:
The layout went pretty well, But I had some trouble with the guy.

I learned some new coding techniques like: making two layouts use the same event sheet, making you pick up things, and making your money show up on the screen.

Next time I would make the enemy move on the screen.

Something I would do differently next time is: I would make the enemy move on the screen.
Dad's Note: This son had done a project last year too, but was interested neither in writing about it nor releasing it. This year, he was excited to be a full participant. To help with his reflection, I gave him the same kind of format I give my university students during sprint reviews: What went well? What did you learn? What would you do differently? What still puzzles you? You can see echoes of these questions in the structure of his response.

No comments:

Post a Comment