Game Making Drive Week 3
November 4th update:
Worked to change a few more things in the console. Thought I was done with it, but turns out I wasn’t. Eliminated 30 lines while adding in 2 new features (gotta love redundancy). Should be able to release the updates over vacation this week.
November 5th update:
November 6th update:
Got a request from Archeia to create an enemy scan script. Started a little bit of work on it, mostly designing the layout. We went through a few before finally picking one we both liked. Started a few preliminary things before going to sleep.
November 7th update:
Continued the enemy scan screen. Focused on the top two windows first. Went through a few iterations with this before finally creating a way for it to be customized by the user. Also went through two versions of the affinities window. Started coding the methods used to allow players to “discover” affinities.
November 8th update:
November 9th update:
Began working to modify my pop-ups script. Removed the stuff not related to pop-ups and prepared it for more work. Did a lot of math today. Added a hash to tell it what “style” each pop-up would use. Also created a better method for handling new pop-ups.
November 10th update:
Today I worked even more on my pop-ups script. While I liked the arc style of pop-up for damage numbers, I felt the arc was too steep. The first thing I did make the arc a little more rounded. Now to calculate each point on the arc I had been getting points on an ellipsis based on given angles for the vertical and horizontal plane. To modify the arc I changed the angle that was being used to calculate the horizontal distance. Since this was never as large as the vertical distance, this actually produced a much rounder and more visually appealing arc. The next thing I did to this was add a second arc that was half the size of the first arc. This made it appear that the pop-up was “bouncing”. I did have an issue with this because I wasn’t giving it the proper X origin, so every time it started the second bounce it would reset the position of the pop-up. Once I solved this and tested it a few more times, I moved on.
The next thing I did was add pop-ups that moved straight up. The first was fairly simple. I just took the max height and multiplied it by a value based on the current frame of the pop-up (they all vanish after 70 frames). The second one took a little longer. I started with the current frame and raised it to the 12th power. This would cause it to fly up quickly, and then move more slowly as it reached the top. This caused a pop-up that could be used with more impact.
Finally, I decided on a pop-up that would give a different type of impact. I simply placed the sprite where it belonged and then zoomed it in to 300%, and then rapidly zoomed it back out to 100%. I figured this would make a good “shield” type effect pop-up.
Once all these were done I turned my attention to optimizing the pop up methods. There was a lot of repeat in the methods, so I made a single one that could handle all the different pop-ups and output the proper type of pop-up based on the given information. This would also make it easy to implement pop-ups in other scripts, which I then started working on.
Since I now had all my methods squared away, I moved on to adding pop-ups to my enemy scan script. I wanted it to display “weak” or “resist” depending on how damaging the attack that just hit it was. I had to re-arrange a few things in the old script to allow it to work properly and then was able to pretty easily get it to work. I then began testing it. I noticed while testing it, however, that the “weak” pop-up and any pop-ups with similar pop-up styles would cover each other up. Since I wanted all the information to be visible I came up with a way to solve this problem.
My solution to pop-ups covering each other was to have each subsequent pop-up to be offset -y a few pixels. Thinking about it, though, I didn’t want to offset pop-ups of different styles since they most likely would not be on top of each other very often. For this reason I converted the array that stored all the pop-up sprites into a hash with each key being the name of a style, and associated an array with each key. Now when a new pop-up was sent to the battler sprite, it would sort them into the array automatically. I then redid the method that updated pop-up sprites in order to allow it to call each array properly, and I updated the returned y position to account for the ID of the array in relation to the pop-up sprite.
Considering how I was drawing the sprites, I didn’t want lower sprites to be removed from the array the moment they were done updating. This required a few different changes to how sprites worked. First of all, I set a “loop value” for how many times the pop-ups would offset before returning to the bottom. This prevented them from going off screen. Then I made it so a finished sprite would be disposed and it’s position in the array set to nil rather than removed. I made a section of the update to check all the elements at the start of the loop point and remove them if they were all nil values. To prevent bugs with the array not being immediately optimized, I had the script check for the first available nil spot in the array when a new pop-up was created and place the new sprite there instead of adding a new spot. The main reason for this, there might be a pop-up still playing 2 offsets up. If I did NOT check for nil spots, the next pop-up would display 3 offsets up instead of in either of the 2 open spots at the bottom. This did take me a long time since there was a lot to do for it, but it was fun to see so many pop-ups at the same time.
After this was done I added methods that would allow state and buff/debuff pop-ups to be displayed. When looking at the default methods, I found that there would be no easy way to do this. Despite the fact I never like to, I was forced to overwrite some existing methods. I toyed with it a bit and got these to pop-up with their names fairly easily. Buy why stop here? Things must always be complex with me.
The next step was too get state notebox tags to work. This took a little longer. I had to do some testing to make sure the regular expressions I was using would get the proper values I wanted when they were used. I then needed to move around a lot of stuff to tell the script how to find the values in the states and what to do with them.
Once this was done, I needed to redo the comments and prepare the script for upload. I also prepared the enemy scan script for update and in the process found a bug related to how weak and strong affinities were discovered. I fixed this and finished preparing them both for upload. Finally, I uploaded both of them for use.
November 11th update:
November 12th update:
I worked to fix an issue someone had been having with my scan enemy screen. In the process I added several new features and visuals and updated it to version 1.2.
November 13th update:
Didn’t have much time in the morning to work on anything. Ended up finding time in the evening to do a few updates. Considered I would need my scrolling states script shortly so I made sure to make the necessary updates to it. Mainly, this involved having it grab the rectangle of the bitmap the states were about to be drawn on to prevent it from cutting off images. Also tweaked how state arrays were stored to prevent stacking and allow easier management of the states arrays.
Once this was done I looked at updating my battle engine. I’d completed most of the changes already, but had them in a separate script to allow easier access to them. I implemented these into the main script and looked to see what else I could add right away. Decided changing an actor’s attack while a certain weapon was equipped could be useful, so I implimented this.
November 14th update:
Again, didn’t have much time to work on anything. Later in the day I looked up a few Win32API commands for later use. Need to figure out what kind of data I need to send to then and what kind of data they return.
November 15th update:
Okay, I’m finally starting a project of my own (sort of… I’m doing it with someone else). Began getting scripts together that we would need for the project. Currently picked through the scripts relating to my battle engine. Made a few changes to passive skills, skill costs, and grade victory screen, which will be detailed when I make the updates for those.
Also discussed more of the story. The particular story we’re going with is going to be… futuristic/sci-fi on an underdeveloped planet…. So essentially Star Ocean…. Also worked with him to get a few of the character designs out of the way.