Welcome!

Hey, I'm Skylar, a kid aspiring to become a competent programmer. This blog is here to detail my dabbles in development.

My dream is to one day become a professional programmer and do some game development in my spare time.

Thanks for visiting my blog, and I hope you'll come back!

Pages

UPS Iteration 2

Well here's a video of Iteration 2:



Look at the video description for more information!

UPS Iteration 1

I just posted a new video on youtube showing Iteration 1 of my entry to Moosader's Unintuitive Physics Competition. Hopefully soon, I'll have iteration 2, which should have much more to show off =D!


Anyways, here's the link.

Charge On Hiatus Temporarily...

I'm starting to work on my entry for LusikkaMage's (AKA Moosader, Rachel, etc) Unintuitive Physics competition.


The reason I won't be working on Charge, is because every time I have a project using my framework, I tend to change things with my framework to improve it. If I do that with two separate projects, then there will be problems because I'll have two separate versions, which both have important changes that the other doesn't have.

I really want to avoid this, so I'm just going to try to as quickly as possible get my entry done, then move the changes back.

But rest assured, I doubt this will happen again. As soon as I'm done with my entry, I'll begin working on the MusicBank, and Text System. Once those are done, I'll compile the framework into a lib.

So my entry, for any that don't know, is going to be called Unintuitive Pickin' Slime. It's nothing special. Basically, every 5 seconds a new slime will spawn. For each slime you collect, you get a point, but each slime has an effect. Gravity will change directions, your controls will be swapped, directional speed will change, etc.

The graphics will suck. As of now, the player is only a simple ball. And I probably won't do anything else with it graphics wise. I would love to add animations, and the like, but I'm imagining the problems, and how much time I have to complete the game, and I don't really want to go that in-depth for something such as this.

Once I finish the first iteration (hopefully today), I'll make a video. But that's all for now I suppose, later.

New Video

Just wanted to say that I uploaded a new video =D!


It's a bit long, but here it is:

Configuration File Added to the Framework!

Well, for the past few days, I've been trying to get my framework to support reading in an ini file for configuration properties such as window width and height.


I used minIni, and compiled it into a static library. When trying to put it into play, I kept getting a strange access violation.

After much code reviewing, I found out that I had used or, instead of and (|| vs &&). So when one thing became true (in which I wanted EVERYTHING to be true), it short circuited and returned a true value, and didn't even run the other functions.

This caused a lot of things to not be initialized when they were used, and that's what caused the access violation.

So to go back and touch up on the ResourceSystem, I'm going to actually flesh out the SoundBank some time in the near future, then add a MusicBank, and a FontBank. The former two will be quite easily implemented, but I need to put some thought into the latter. To make a font bank, I need to make a text system of sorts.

With the text system, I REALLY want to implement a system so that I can confine the text to a box.

Once I'm done with this, I'll clean up the framework, and perhaps release it =D.

But anyways, onto Charge... The next thing for Charge is to finish up the WeaponSystem, so that different leveled weapons work right. I also need to fix the bullet speed and direction, which will allow some more interesting weapons. After that, I want to create power up system, and sync it with the weapon system and EnemySystem.

I'm still unsure of how I should make my LevelSystem, but I definitely need to put some more thought into it before I jump head first into it.

Once I have these 3 things done, I'll begin fleshing out each enemy, then programming their specific AI. That's probably what will take the most time, because I'll have to implement some sort of shared memory probably, but that won't be too hard to do, due to the flexibility of the 'engine'.

Well that's all for now, I have to research a college and work on a Calculus project, so peace out =D

Resource System Mostly Done =D




So really, the Resource System is just a front to access the ImageBank and SoundBank. I've finished the ImageBank, and have it exactly how I want it =D.

So basically, when you want a surface you do this:

FF::Surface* pSurf = FF_ResourceSystem->GetImageBank().GetSurface("Ship");

So then I have it loop through each file extension I support, in a certain order. If the load fails, then it moves on to the next one.

If it happens to get through all the extensions, and doesn't load any of them, then instead of returning you the image you probably expected, it will give you a bitmap that says the word "Error".

So this ImageBank guaruntees that only one of each image is loaded, and that it's all cleaned up =D.

Oh, it also has a cap of 100 images as of now. But that can be easily adjusted =D.


The SoundBank isn't finished yet. Really the code will be the same, I just need to look at the Mixer Documentation and find out what formats I need to support.

The only other thing I really think I may need, is something to manage Music. I'm not sure if it needs it's own bank, because there can only be one piece of music playing at a time. But then again, when music changes, I don't really want lag from loading the new piece.

But that's yet to be decided. At the moment, I'm thinking I'll make a bank for it, but with a much lower cap, like 25 or something.

But all I have to say is, it may have taken a while to get this resource management stuff figured out, but it is WELL worth it =D.

So now to explain the picture really quickly. Well I added another player character, but purposely passed in an image that didn't exist. So it returned the Error surface. It may be hard to see, but the Error is right next to the red star.

Well, I believe I'm going to make a video, hopefully it isn't super laggy like the last one I made =D

Resource Management

Well, since you couldn't tell from the last screen shot, I'll tell you that it was starting to get laggy. Every new bullet, and every new enemy each had it's own surface, which is quite ridiculous I must say. So right now, I'm adding a resource manager to my framework.


I'm thinking that the resource manager will have a graphics and sound component and will work something like so:

ImageBank->GetSurface("SomeImage");

So what I want it to do from here, is search to see if it has that image, if it does, return it, if not, I have it return NULL at the moment.

Ideally, I'd like to be able to not have to specify the extension, and write some code to search through the directory to find the file with that name, grab it's extension, and then load it in, so I don't have to worry about extensions and such. I'm finding this to be rather hard, as I want to maintain my code's portability, but any method I've find to search through a directory is platform dependent.

So I'm working on that now, if I can't find a good solution, I'll just skip it, and leave it as is, but for now, I'm determined to find a way!

CollisionSystem + EnemySystem Done!





Well, I told myself on Thursday, that I would finish programming an enemy, and then make a post. But then I realized, I might as well make the EnemySystem real quick as well. Making the EnemySystem carried on into Friday, and I thought to myself: "I want some collisions before I make a post!"

So I started creating a collision system. I had a few issues with iteration. I was removing elements in a iteration, making the iterator invalid.

So I finally fixed it all up and now it works wonderfully!

To make the enemy, I also made a StateMachine, and base state template.

So as of now, there are two simple states for testing purposes: MoveLeft and MoveRight.

Oh yeah, you can also press 'e' to add new enemies, which helps testing some =D.

So my next task is to make a LevelSystem. The LevelSystem will be able to Load levels from a file. I'm generally thinking the format will be something like:

Background filepath

Count 5

Enemy 4 100 20
Enemy 3 100 40
Enemy 2 200 60
Enemy 5 300 50
Enemy 1 120 50

So I'll be able to retrieve the background, the number of enemies in the level, and each enemy will be created based on the information in this. The different TYPES of enemies will be hard coded in, and so I imagine that there will only be 3 pieces of data needed: AI level (which determines the type), x and y coordinate to determine it's position. The LevelSystem will render levels, and scroll the background image =D

So after the LevelSystem is finished, I'm going to adjust the WeaponSystem to make it easier to create different weapon types. Then I'll create a Powerup System to work with the WeaponSystem to adjust it to different weapons.

I imagine I'll create some sort of life system for playables. I'll also have to sync that with the CollisionSystem to create Life, and Lives. Then I'll probably sync it with the power up system to add health power ups.

The last thing (programming wise) that I want to worry about, is the AI. I just want to get everything framed up, so I can go in, and not focus on so much speculation, and just worry solely about the AI. Because of how I want the game to play, I'm thinking of implementing some type of "Shared Memory".

So for those of you who don't want to go back and find out how I want the game to play, here's a little explanation.

There will be 5 enemy types:
-Grunt
-Drone
-Revenant
-Protector
-Mother Ship

So basically, the Grunt will have incredibly low AI. Most of what it does will be entirely random, but it will be so random that it can actually be slightly dangerous. The Revenant will have the highest overall AI, with bullet dodging, shooting, path execution, etc. The Drones will have AI in-between Grunts and Revenants. Basically some things it will 'intentionally' do and some things will just be random.

The Protectors and Mother Ships will have a sort of 'team playing' together, so I'll have to implement a way for them to work together. But basically, each Mother Ship will hold a timer, and when that timer goes off, it will create an enemy. It will be able to create any enemy type excluding itself. The Mother ship will NOT be able to shoot, but it will be able to dodge bullets like no other.

For the Protectors, my idea is to have them sense a player's bullet through shared memory, and then calculate who's closest, and calculate a velocity that will get the Protector to take a bullet. Aside from taking bullets, I suspect Protectors will be somewhat like Revenants.

So the object of each level will be to get rid of all enemies, so you must take out the Mother Ships. As the levels progress, more Mother Ships will be there, and they will create enemies faster.


So I think with all this, it will provide for some interesting game play... But for now, I've done what I need to for the day... Time to get ready for Prom tonight =D