|July 12 2015
Posting this one late.
Didn't do anything on this project for most of the day.
Possibly convinced a former coworker to join the IGMC 2015.
I play Xbox with him each weekend (that we both are available to), so I can pester him and remind him.
At the end of the day, I did go through my DAZ3D assets, and categorize them.
I made note of which ones I want to focus on for the IGMC 2015.
DAZ3D allows the content creators to categorize their own material, so sometimes I can't find an asset I purchased because the artist categorized it differently than I would have.
Now, with my lists made, I can find the assets, regardless of default categorization.
Some assets are also for associated software, that while it will work in DAZ3D, does not include the meta data that makes it easy to find.
|July 11 2015
Started writing some of the dialog between the main character, and the Doc (character that provides new items and upgrades).
I doubt I could write compelling dialog if I just tried to write it all at once, so I'm hoping that by writing bits as they come to me, I'll be able to write a better sounding story.
Keeping this blog does that too, allowing to write an idea when I think of it, thus allowing my mind to move on to the next idea.
I was brainstorming this game for a while, and had many notes, but sometimes new ideas didn't get written down.
It is often said you need the right tools for the job.
I feel that you need the right tools for you.
Consider task [A], which can be done with tools [X], [Y], and [Z].
[Z] is the best tool available for task [A], but it is unintuitive for you to use.
You really like tool [X], you find it intuitive, and know how to use it very well.
Thus, I dare say [X] is the best tool for you to do the job.
I learned several game engines (DirectX 5 days) before finding Flash (this is 15+ years ago).
I find Flash intuitive (little less so after Adobe took over).
Thus, I am choosing to use Flash, rather than learn a new game engine (including Adobe's GamingSDK that uses Flash).
I don't consider myself a "fan" of shooter games, nor horses.
That's a reason I think I can make this game.
If this was a tactical game, or related to a subject I really cared about, then I may get too caught up in details to ever finish it.
I did the green screen effect with a batch file and ImageMagick:
for %%X in (*.png) do convert %%X -channel alpha -fx "b - g + 1" -channel green -fx "min(g,b)" A_%%X
based on the math shown in: http://www.imagemagick.org/Usage/photos/#green_screen
[I didn't read it in detail, so I can't explain the math, but I'll know where to look to find out]
Then I just put the batch file in each directory, ran it, and then I'd have Alpha friendly versions.
Then I just wait for all the CMD windows to close to know when it is finished.
I'd like to think that multicore processors make this a shorter task.
Somewhat ironically (unless you read the math), if run on files that are already properly Alpha blended, it basically turns the background to black (because Alpha goes to opaque).
I do really like ImageMagick, and the options it opens with that "fx" operator are fantastic.
The default version that comes with many Linux distributions is often missing that 'one feature' I need for a task, but online forums help to find a way around that.
So, it is nice to be using it on Windows with the latest version.
When tinkering earlier, I would render all the frames, even ones that aren't part of animation.
So, when I imported them into Flash, I remembered some things I learned back in the Flash 7 days.
To import an image series, just import the first frame and Flash will import all the following onto their own frames, but if you select all the images it will put all of them on the same frame.
I put them into a Graphic, then used a MovieClip that only uses the frames from the Graphic that I was going to use.
Flash is smart enough to realize which frames were not actually being used, and doesn't include them in the .swf file.
If I put them in the Movie Clip directly, Flash wouldn't be able to determine which may or may not be used, since a Movie Clip can be affected by runtime code.
This time I exported just the frames I'm going to use, so I could put them directly into the Movie Clip.
But, I'll still use the Graphic inside a Movie Clip, in case I change my mind on some frames later (maybe to reduce file size, or change animation timing).
Also, this allows me to fix centering on a per-animation basis, rather than per-frame.
To work with centering, I put two small spheres on the DAZ 3D stage (with full matte ambient coloring).
Then, I render that from each camera vantage, creating a series of alignment images.
I then use those alignment images to figure out what offset is needed to bring the 3D world-center to the origin (0,0) in Flash.
Knowing which camera I used for each animation sequence, I can then adjust each animation by the correct amount.
I also noticed that Flash stores the images uncompressed in the .fla file, but compresses them back down during export to .swf file.
This means that the 30MB or so of original .png images becomes __GB of .fla files, but goes back to 30MB or so as .swf files.
When tinkering, I was using my laptop, which veritably died with such large files, but my desktop (recently upgraded, but not "super powerful") handled it much better.
Because of this, I am putting only one asset per file, making sure the Movie Clip for the asset has an Export Linkage to allow me to instantiate it via code in other Flash programs (like the game).
Thus, the .swf movie itself does nothing by itself, but allows me to use the asset in the game via code.
Also, when I want to do a Fore/Aft version for layering, I can't use "Duplicate", I'm guessing because it is too much data. So, I do a "Save As" and do the two layers as different files.
Got the asset files created for the basic horse.
Running into a bit of trouble with getting Flash to dynamically load the asset files.
Finally found how things changed from AS2 to AS3.
Using the "Loader" object to load the SWF files, then I can call the classes.
The event callback Event.COMPLETED doesn't fire, so I check the bytesLoaded each cycle.
Dynamic text defaults to the current font, which isn't embedded by default.
This made my first attempt at a loading indicator a bit off.
Also, I think it defaults to int math, so I had to fiddle with that a bit.
So, after a couple hours of "I'm almost done", I finally am for tonight.
This demonstrates the animation sequences.
Customization (colors and on/off) will take some more UI, so I'm just calling it a night.
|July 10 2015
I'm going to start gathering some horse related quotes for use during loading screens.
And there will be loading screens.
When played online, it'll mean only downloading the assets that your horse is customized with, the zones you've unlocked, and the enemies you'll encounter.
For Android/iOS it may mean downloading everything in order to play anything, but then little extra loading time. May have to add a small minimum delay to allow seeing the loading screen.
Must remember to hide the DAZ Horse 2 tail segments, so that they don't accidentally override the intended tail imagery.
started animations at frame 30 (due to zeroing issues yesterday)
* 30-48 are poses
* 55 is tucked for flying
* 57-89 are running sequence (57 & 89 are dups)
* 91-103 wing sequence (91 & 103 are dups)
Using 640x480 for in-game graphics, twice that for "poses" used in character customization.
Using #00ff00 for elements that need to be transparent in the final renders
Even with "NotePad" on the computer, traditional sticky notes are still useful to not have to switch windows.
For some reason, my camera settings keep getting cleared.
I think it may be due to having them point at other objects, then when that object changes or goes away, the camera goes wonky.
For some reason, the text editing of parameter values will lose focus, so then the keyboard keys I hit will mess with my cameras.
This is causing me to have to redo my cameras over and over.
When saving Render settings with a Render Range of frames, it only saves even frames, and all my animations start/end on odd frames, so I have to manually adjust the frame numbers for every render.
25MB to 40MB of rendered images for the horse, tail, wings, mane, and horn.
Variance comes from how I have the wings divided into fore/aft
Used a "green screen" technique, turning the horse and background #00ff00 so that things like the hidden parts of the mane don't get rendered.
Used a plane to slice the horse in half to hide the far wing, since not all of the far wing can be hidden (the stubs are part of the root object, and not separately capable of being hidden).
So, just rendered the initial horse assets.
Still need to turn the green screen to alpha. It's easy to do in GIMP, so finding a batch mode will be key. Maybe using ImageMagick instead of GIMP.
Then, put them into Flash.
Enemy assets won't be nearly as bad, a they won't have user customization, and much simpler animations (if any).
One thing that always bugs me in a game is when an enemy asset is re-used, with just a different color scheme.
I figure it wouldn't be too bad if the different colors resulted in minor changes in the enemy difficulty.
MMORPGs are really bad about this.
But, one example that comes to mind are the raptors in WoW, as there is some color of raptor at every level, and the colors get re-used.
You can fight a red raptor at level 6, then again at 24, and again at level 36. Each color seems to be like that.
So, the enemy species ultimately means nothing, nor does the color, when it comes to combat power.
Games like STO similarly have you fight against "the most powerful starships" at level 10, even though intrinsically they should be powered at the level cap.
But, fighting old ships, or weak ships, likely gets boring, so they throw weak versions of powerful ships into the mix, for story purposes (and to make it more exciting).
I think I've acquired enough assets that I won't have to re-use an asset, at least not within the story mode.
I hope to let the player discover new enemies, even after beating the story, even if playing in zones they already were in.
I want to let the enemy fit the difficulty, rather than the difficulty just make an enemy tough (and a different color).