General Thoughts
I’m writing this on Monday, but the changes I made were on Sunday. It was actually helpful to have a “Next Steps” section from my devlog. Looking at them now, I more or less completed them all.
Things Done
- I had to completely rewrite my typing system.
Before I explain my system, let me just first say what my typing system was. This is a typing game, where you will need to type the words that appear on screen, hovering above various enemies. Typing their corresponding word will kill that enemy. My typing system changed the letter that the player was typing in order to show progress. So if the word was “Weclome”, when the player typed “W” I would highlight that color so they know they typed it. With that out of the wayk, this is how my old system worked worked:
- I created a 3D label that the player would need to type that would hover over an enemy
- In a 3D Label in Godot, you cannot change the color of individual letters. So after each button press, I would remove a letter from the original 3D Label..
- Then I would create a new letter in its place, that had the changed color.
In theory this sounded great, and I would get to take advantage of a lot of built-in Godot node functionality, and hopefully skip a lot of work myself. Unfortunately, this was simply too slow. If you typed fast enough, my letter parser would fall behind and the label manipulation would begin to lag. This was very surpising to me. This is my first major step into a 3D game, but perhaps it’s a little naive to think that on-the-fly object creation and editing would be a lagless endeavor.
My solution:
- Create a 3D Sprite, with a simple animation of the letters being typed in.
- When a letter is pressed, search all enemy text to select a target.
- The 3D Sprite has meta data that says the actual word, and I just check that the user keeps typing the correct word and I increment the animation.
(My Sprite3D solution. To create this horrific webp, I recorded a video with OBS Studio, edited it down with Shotcut, and then converted it into a webp with ffmpeg. Why I go to such lengths to create a 3 second long animation no one will see is beyond me.)
So far it workds pretty flawlessly. I have setup multiple words, and there is no lag at all. I setup a simple Node Scene with a few exported vars so I can quickly setup new words. The only downside, which could be considered a major one, is I have to of course create a sprite for each word I want. If this was going to be a big serious game, I’d consider creating a small tool to generate letters. For now though, I think the MVP of the game will release faster if I just keep manually pushing them out.
I’m going to end this post again with notes from AI, even though my intent is pretty clear this time around. I need to add a character onto the 3D Sprite, so that it is attached to some sort of baddie. I need to choose a single font to use that I will use for all enemies moving forward. I still need to design the actual level, but I don’t want to go too ahead of myself.
That said, It’s actually about bed time for me so let’s wrap this up. This time, I am going to use Chat GPT 3.5-turbo. After here I’ll be using a lot of local models that I tinker around with, so I’m interested to see where this goes. If it becomes too unhelpful though, I may consider returning to previous models.
Finally, here is the prompt I have used, and will be using:
“I want you to analyze a body of text for actionable items. I am going to send you an entry for a game development log. This log belongs to a single developer. I want you to analyze the text to determine what the next steps should be, ending with a single motivating quote. If you understood this message, say “Ok!”. Afterward, I will send the text that will be analyzed”
Note From an AI:
Analysis of Game Development Log
In this game development log entry, the developer discusses changes made to their game’s typing system and shares insights into their progress. The existing typing system faced performance issues, prompting the need for a new approach. The developer outlines their previous and revised systems, highlighting the challenges faced and the solutions adopted.
Actionable Items and Next Steps
Attach Character to 3D Sprite:
- Task: Add a character model to the 3D Sprite representing the typing animation.
- Action: Integrate a character model into the 3D Sprite to visually depict the player’s character or protagonist.
Choose a Single Font:
- Task: Select a consistent font for enemy text and UI elements.
- Action: Evaluate and choose a suitable font that aligns with the game’s visual style and narrative.
Design the Actual Level:
- Task: Begin designing the core gameplay level involving enemy interactions and typing mechanics.
- Action: Initiate the level design process by outlining enemy placements, obstacles, and overall gameplay flow.
Consider Efficiency for Word Generation:
- Task: Optimize the process of generating sprite letters for words.
- Action: Explore automating the creation of sprite letters through a script or tool based on in-game words.
Develop a Game MVP:
- Task: Focus on creating a minimum viable product (MVP) to expedite the game’s release and gather feedback.
- Action: Prioritize essential features and gameplay elements to ensure a manageable scope for a faster release.
Motivating Quote
“Embrace the challenges of game development and keep iterating to create an experience players will enjoy. Your dedication and innovation will shape a game that stands out in the world of 3D gaming.”