• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

Indie Game Development Discussion Thread | Of Being Professionally Poor

Status
Not open for further replies.

chubigans

y'all should be ashamed
CF48A8C0ED97B9C819A140F84B37C3016FC1A2CA


A new screenshot from Castaway Paradise. Hope you like it.

Nice art style, I like it!


Question for everyone: how long do you take a break for once you're done with a game before jumping into another one? I'm finally done with one game and I have ideas for another, but I kinda want to play some Borderlands for a bit. :p
 

chubigans

y'all should be ashamed
Cool, a new indie thread, last one was great! I'll definitely will be following and maybe contributing some dev dreams/horrors too.

I was thinking maybe we could have a section that boosts GAF made indie games in the OP? Or maybe do a own thread for them all together?

I totally blowed my marketing for Fruitmatter, I've sold eight copies so far :I

I think the game could have been interesting to some gaffers, but atm there's really no way other than indie threads to spread the word. (I think this problem was talked in the last indie thread also)
Update! I tried using my credit card this time so it should work. :D

edit: worked! woo!
 

-COOLIO-

The Everyman
Cool, a new indie thread, last one was great! I'll definitely will be following and maybe contributing some dev dreams/horrors too.

I was thinking maybe we could have a section that boosts GAF made indie games in the OP? Or maybe do a own thread for them all together?

I totally blowed my marketing for Fruitmatter, I've sold eight copies so far :I

I think the game could have been interesting to some gaffers, but atm there's really no way other than indie threads to spread the word. (I think this problem was talked in the last indie thread also)

fm deserves way more than 8 copies. man marketing is hard, tried buying ads?
 

SovanJedi

provides useful feedback
So there's one part of being an indie gamer that doesn't seem to get nearly enough discussion here; the "being professionally poor" bit.

Can anyone suggest some nice and very cheap food products that aren't going to turn my insides into ash after a few meals?
 

-COOLIO-

The Everyman
So there's one part of being an indie gamer that doesn't seem to get nearly enough discussion here; the "being professionally poor" bit.

Can anyone suggest some nice and very cheap food products that aren't going to turn my insides into ash after a few meals?

indios, avoid the spikes, the toy princess is in another box.
 

eot

Banned
So there's one part of being an indie gamer that doesn't seem to get nearly enough discussion here; the "being professionally poor" bit.

Can anyone suggest some nice and very cheap food products that aren't going to turn my insides into ash after a few meals?

Most things that aren't animal products can be had for cheap. Baking your own bread is much cheaper than buying it, potatoes are cheap, lentils, cauliflowers etc. Buy a vegetarian cookbook. I make my own elderberry juice too, a day of work will last you an entire year.
 

bumpkin

Member
Are you ANDing the checks together?

A.left < B.right AND A.right > B.left AND A.top < B.bottom AND A.bottom > B.top

or something.

replace AND with && depending on the language.
I was originally trying to base some of what I was doing off of some tutorials I found for tile-based games (tonypa?) since my stage terrain is tile-based. His example code was utilizing a function to get the corners of a shape, and using those for part of the collision detection routine. It sort of worked for me, but in the end, I realized my situation was too different for me to adapt it in a way I understood. His movable sprite was exactly the same size as the tiles in his map; mine's not (or wouldn't normally be).

First - don't panic :)

Second - step through on debug and set watches or inspect your values at run time and you will no doubt find a logic error in there. If stepping through isn't supported start catching those fringe cases in condition statements and output some values in console to see why it may be dropping into a collision erroniously.

Last resort post your code and we'll help. :)
I went through and added a lot of debug messages to paint as clear of a picture as possible of what was going on prior to coordinate adjustments, with adjustments applied temporarily, and then after the adjustments are actually applied. I think I have it working to a point where my left and right collision checks are at least returning the correct results when they should. It's just not doing anything in response to the collisions yet.

You're doing things backwards. Don't try and check for all the ways boxes could be colliding. Check for the various ways they could be not colliding.

ie: if A.right < B.left then not colliding.

EDIT: I just realized you're the same person I told this to in the old thread. Feel free to ignore.
No worries, man. I appreciate the advice! I did actually change my function to do what you suggested previously. My problem now is just how I should be applying correction (post-collision resolution).

The way that it's working now, I'm figuring out what the sprite's position would be if it moved that frame, and checking for the next tile row/column intersections it would be entering. If it sees that a tile within that area is marked as being "solid" (aka not walk-able) and the would-be rectangle of the sprite collides within the rectangle of the given tile, it's telling me a collision is happening in my debug messages.

Something that's tripping me up is since I'm iterating through the tiles it would be touching, it could say that the collision has happened multiple times. Does it make sense to set a flag outside of that loop to dictate whether or not a horizontal collision has occurred, and if/once that's been set to true, make the logic bail out of the loop?

Vertical collisions will be my next problem. That should be a pain with two things having the potential to start the sprite's descent; hitting something solid or having reached the maximum height of a jump.
 

bumpkin

Member
bumpkin how do you create your aabb? do you have a center and extents or points?
Points, I think? All of my positioning has the upper left corner as 0,0. The box is defined like so (pseudo-code below):

Code:
box.top = y
box.bottom = y + height
box.left = x
box.right = x + width
 

charsace

Member
Vertical collisions aren't going to be that much harder for you to figure out. You can just apply a downward force on the y axis when you jump or are falling.
 

bumpkin

Member
Vertical collisions aren't going to be that much harder for you to figure out. You can just apply a downward force on the y axis when you jump or are falling.
I'm not really tripped up on which force to apply when as I am to simply managing persistent force. That is, should I always be applying downward force -- aka gravity -- when the sprite isn't "jumping", and let the downward/bottom collision detection handle keeping it from falling through the floor and infinitely downward?
 

charsace

Member
I'm not really tripped up on which force to apply when as I am to simply managing persistent force. That is, should I always be applying downward force -- aka gravity -- when the sprite isn't "jumping", and let the downward/bottom collision detection handle keeping it from falling through the floor and infinitely downward?

If you are going for realistic physics then you should always be applying gravity. If you are going for more of a 16 bit platformer feel then you don't have to keep applying force. You should just have states. So when the state of the sprite is on the ground you shouldn't have to apply gravity. Only when you are in a jump state, fall state or any state where you aren't on the ground should you apply a gravity force.
 

bumpkin

Member
If you are going for realistic physics then you should always be applying gravity. If you are going for more of a 16 bit platformer feel then you don't have to keep applying force. You should just have states. So when the state of the sprite is on the ground you shouldn't have to apply gravity. Only when you are in a jump state, fall state or any state where you aren't on the ground should you apply a gravity force.
I think I follow... So when the user presses the specified key/button, that sets the sprite into a jumping state and I start applying upward movement. When the sprite either has a top-side collision or reaches the maximum height, I set it to a falling state and start applying downward movement. And when the sprite is in a falling state and a bottom-side collision occurs, I set it to a grounded state and stop applying any vertical force.
 

Blizzard

Banned
Bumpkin, one thing you may want to watch out for is whether you need hysteresis (if I'm using that term properly) to avoid bouncing back and forth when you touch the ground, for instance. Otherwise you might end up with an effect like in the original Scribblenauts where objects could jiggle around. The state approach you describe sounds like it'd be fine for a platformer.


Regarding indie developers and depressing topics, is anyone an indie/startup person in the U.S., and if so what do you do about insurance (especially the various health insurances)? I know one local guy started his own company but I think his wife kept her fulltime job, so he'd presumably get insurance that way. What about if you're on your own?
 

bumpkin

Member
Bumpkin, one thing you may want to watch out for is whether you need hysteresis (if I'm using that term properly) to avoid bouncing back and forth when you touch the ground, for instance. Otherwise you might end up with an effect like in the original Scribblenauts where objects could jiggle around. The state approach you describe sounds like it'd be fine for a platformer.
A platformer is pretty much the use case that I'm building. My biggest concern - other than it working right - is that the same logic can be applied to both the player's sprite and any of the AI-driven sprites. The more generically I can make any of the components, the better.
 

charsace

Member
I think I follow... So when the user presses the specified key/button, that sets the sprite into a jumping state and I start applying upward movement. When the sprite either has a top-side collision or reaches the maximum height, I set it to a falling state and start applying downward movement. And when the sprite is in a falling state and a bottom-side collision occurs, I set it to a grounded state and stop applying any vertical force.

That's one way to do it. Another way is to apply a big force when then jump button is pressed and while still in the jump state you apply gravity. Eventually the jump will reach an apex and the character will fall. You need to raycast too. You need to raycast because you need to check for platforms in front(maybe a ray behind too) so that you can start up the collision detection before you walk off a cliff.
 

flkk

Neo Member
Question for everyone: how long do you take a break for once you're done with a game before jumping into another one? I'm finally done with one game and I have ideas for another, but I kinda want to play some Borderlands for a bit. :p

By the time I'm done one game I've always already started the next two or three... During development when I'm at that point where all the exciting fun stuff has been implemented and it's just a seeminglessly endless mountain of ui, bugs and integrating art assets I get too excited for the next idea and just can't hold back. Like right now I'm working on a multiplayer game and spending most my time dealing with the serverside crap. Ugh. But I had an idea for a procedural dungeon generator for my next game I can't wait to make so I started experimenting with it a bit here and there. Helps remind me how fun game dev can be. I do play games regularly throughout development though, it helps motivate me to finish.
 

razu

Member
By the time I'm done one game I've always already started the next two or three... During development when I'm at that point where all the exciting fun stuff has been implemented and it's just a seeminglessly endless mountain of ui, bugs and integrating art assets I get too excited for the next idea and just can't hold back. Like right now I'm working on a multiplayer game and spending most my time dealing with the serverside crap. Ugh. But I had an idea for a procedural dungeon generator for my next game I can't wait to make so I started experimenting with it a bit here and there. Helps remind me how fun game dev can be. I do play games regularly throughout development though, it helps motivate me to finish.

Yeah man, I'm totally in the land of UI... Next game is having even less UI than this one, (that'll be a challenge in itself). But the urge to start new prototypes is IMMENSE! I actually have two prototypes that will be my next games, and I think it's working well, because my 'new' ideas are all for those games, keeping me from adding un-needed features to my current game.

As for a break. I don't know, this is my first game. But I think I'll take a month off of development, and just do promo stuff. The change will be good, and hopefully won't run into the middle of the night like development does... ;(
 
Yeah, I like working on two ideas at the same time. I'm trying to get a decent library together and having two consumers helps me, encourages me, to make my code as abstract / re-useable as possible and shove it in the library. Right now my primary is an exploration game, secondary a turn-based party-based dungeon crawler.
 

Pietepiet

Member
Question for everyone: how long do you take a break for once you're done with a game before jumping into another one? I'm finally done with one game and I have ideas for another, but I kinda want to play some Borderlands for a bit. :p

Go for it. If you can support yourself financially, go a head and take a break! I always feel kind of useless when taking breaks, but that's a dumb thing and I'm trying to tell myself it's okay to not do anything. Gotta relax every once in a while!
 

bumpkin

Member
That's one way to do it. Another way is to apply a big force when then jump button is pressed and while still in the jump state you apply gravity. Eventually the jump will reach an apex and the character will fall. You need to raycast too. You need to raycast because you need to check for platforms in front(maybe a ray behind too) so that you can start up the collision detection before you walk off a cliff.
Do you have any good examples of this? I don't think that I understand what you mean by "apply a big force".

The way things are working now -- and I'm not even sure this is the best way -- the movement on either axis is calculated by me multiplying a speed value by the delta time since the last frame. So when the update() function of my game loop runs, it checks to see if the "moveLeft" or "moveRight" flag for the player is true. If so, it passes that calculated value to my move function. In that function, I'm using the moveX and moveY values to adjust the sprite's rect to give me the "what if?" position of the sprite. It's that which I use to compare against the terrain tiles and do my checks for if they're solid, whether they intersect, etc. For the most part, that seems to work. It's just when I try to bring any vertical adjustments into the picture, things go to shit. What's frustrating is I don't understand why, no matter how many values I log. :(
 

razu

Member
I got business cards printed for Saturday's Indie Game Meet Em Up in London. I used beanprint.com and they arrived when they said they would, and they're pretty decent.



Happy :D
 
So I've been having fun poking around with the free edition of Construct 2. And I was actually considering picking up the license for it. But as of at least the last two days the http://www.scirra.com/ website appears to be totally borked. Probably just moving servers around or something, but seems kinda crazy to just have it totally down like that for >24 hours in this day and age. Anyone know what's up with them?
 

embalm

Member
We're looking for a 3D environment artist to join our team. To help decide who would be best for the job we are requiring a proof of concept. I thought there might be some GAF artists out there who may want to toss their 2 cents in.

The main pieces are buildings/towers for an RTS. I have tons of information on our games art style & what we want to see in the poc on the Unity forums, so I'll just link to that post. The first post describes the job, the second is the art direction, the third is proof of concept details.
http://forum.unity3d.com/threads/15...Medieval-Steampunk-and-Alchemy-Magic-inspired)

This would be for a paid position doing 9 to 12 buildings, with the possibility of doing terrain tiles and tons of other possible set pieces.
 

Popstar

Member
For anyone doing pixel art on a Mac, Pixen is 50% off ($5) until tomorrow.

You can also download the latest beta for free from its website if you can't afford $5 you cheapskate.
 
So I've been having fun poking around with the free edition of Construct 2. And I was actually considering picking up the license for it. But as of at least the last two days the http://www.scirra.com/ website appears to be totally borked. Probably just moving servers around or something, but seems kinda crazy to just have it totally down like that for >24 hours in this day and age. Anyone know what's up with them?

dns provider has an outage. they are working to get it back up. that includes emails too.
 

BlueMagic

Member
I was wondering, does anyone know how engines such as game maker, unity, etc. (or, for instance, C#, java) handle instance creation?
One of the points I'm missing in my little C++ engine would be a (probably simpler) version of that. Or are the new/delete operators enough?
 
I was wondering, does anyone know how engines such as game maker, unity, etc. (or, for instance, C#, java) handle instance creation?
One of the points I'm missing in my little C++ engine would be a (probably simpler) version of that. Or are the new/delete operators enough?

Should be more than enough, what else you had in mind?
 

Blizzard

Banned
I was wondering, does anyone know how engines such as game maker, unity, etc. (or, for instance, C#, java) handle instance creation?
One of the points I'm missing in my little C++ engine would be a (probably simpler) version of that. Or are the new/delete operators enough?
For C++, new and delete will allocate and release memory for objects. I wouldn't expect you would need to worry about efficiency or object recycling for that unless your game involves a huge number of objects, like 1000+, being spawned and/or destroyed often and repeatedly. If you DO have such a case, one thing that might help is the "flyweight" design pattern, though I don't think I've ever used it myself.
 

razu

Member
Shouldn't the camera spin around or something? Looks like you can't see where you're going half the time


A spinning follow cam would make a load of other problems, and this is simpler.

After a few goes at a level you know where everything is. The levels are tiny! :D
 

eot

Banned
A spinning follow cam would make a load of other problems, and this is simpler.

After a few goes at a level you know where everything is. The levels are tiny! :D

I agree with Dynamite's point. As a developer you're going to memorize the levels much more than a player would and telling them to get around camera issues through trial and error is bad game design. You could consider zooming out the camera a bit because the perspective seems to be quite narrow relative to how fast you're going, or you could make the zoom level depend on your speed like in the top down GTA games. Stuff like that can be really tedious to design and implement but in the end it's going to be critical to how much people enjoy your game. I don't mean to sound harsh btw :D just trying to be constructive.
 

razu

Member
I agree with Dynamite's point. As a developer you're going to memorize the levels much more than a player would and telling them to get around camera issues through trial and error is bad game design. You could consider zooming out the camera a bit because the perspective seems to be quite narrow relative to how fast you're going, or you could make the zoom level depend on your speed like in the top down GTA games. Stuff like that can be really tedious to design and implement but in the end it's going to be critical to how much people enjoy your game. I don't mean to sound harsh btw :D just trying to be constructive.


That's cool man, all feedback is welcome!

No-one testing the game, (on iPhone, iPad, Android phones and tablet), has ever said anything about the camera, (and they've complained about a lot of things!). Maybe video makes it feel more cramped than when you're playing...?

To get an idea of the scope of the game, give it a go in browser here: VAMflax.com The levels *really* are ridiculously tiny!

I've made a million chase cams in my day, the implementation is super-easy. But it kills the feeling of the physics and you have to tune 2 things at once, which leads to compromised core gameplay. I'm sticking with the fixed angle camera!
 

razu

Member
Love the cards, razu!

Thanks dude! That's "programmer typography" right there! :D

I got my T-Shirt today:



I put the text too low, but other than that, I like! That's from streetshirts.co.uk, BTW.


On the camera subject, I do set the camera at different angles and distances per level! So you can see far ahead on the bigger, high speed levels!
 

Ashodin

Member
So I just came up with an amazingly simple concept for a game. It's sort of based off another popular game, but does its own thing. I can't wait to show you guys what I came up with. It's so simple I can work on it immediately.
 

JulianImp

Member
Ok, which text box does GAF prefer?

I like #2 the most. #1's gradient border makes it harder to distinguish the text box from the background, and #3-4's dark blue-ish background color is too similar to the level's.

By the way, using rock tiles only on the borders of solid platforms looks quite good, and the graphics appear to tile well (except for a lone small square surrounded by black).
 

Ranger X

Member
I like #2 the most. #1's gradient border makes it harder to distinguish the text box from the background, and #3-4's dark blue-ish background color is too similar to the level's.

By the way, using rock tiles only on the borders of solid platforms looks quite good, and the graphics appear to tile well (except for a lone small square surrounded by black).

shit man, I can't unsee it now. lol
 

JulianImp

Member
shit man, I can't unsee it now. lol

Yeah, making tiles where you can't distinguish any glaring patterns is hard but, other than that small detail, there don't appear to be any obvious tiles in the set.

One suggestion I'd make is not relying on linear or circular gradients (mostly on the barrel and the fan/air extractor), since they stick out compared to the rest of the graphics (such as the computer panels and griders), which look more organic and seem as if they were shaded by hand. I was about to suggest using dithering instead, but after looking at the screenshot for a while I guess that'd stick out too much.
 

charsace

Member
Thanks dude! That's "programmer typography" right there! :D

I got my T-Shirt today:



I put the text too low, but other than that, I like! That's from streetshirts.co.uk, BTW.


On the camera subject, I do set the camera at different angles and distances per level! So you can see far ahead on the bigger, high speed levels!

Sweet.

Link on 2d physics for you bumpkin:
http://www.rodedev.com/tutorials/gamephysics/

And I need some help. I am working on collisions. I have aabb class working and I have aabb to aabb collisions working. I'm working on obb to obb collisions right now. I have everything working, except for calculating the minimum translation vector. I can't find anything on it on line.

Here is my code. The language is C#:
Code:
 public struct AABB
    {
        public Vector2 _center;
        public Vector2 _extents;
        public Color _debugColor;

        public Rectangle XNARec
        {
            get
            {
                return new Rectangle
                (
                    (int)(_center.X - _extents.X),
                    (int)(_center.Y - _extents.Y),
                    (int)_extents.X * 2,
                    (int)_extents.Y * 2
                );
            }
        }

        public float Right
        {
            get { return _center.X + _extents.X; }
        }

        public float Left
        {
            get { return _center.X - _extents.X; }
        }

        public AABB(Vector2 center, Vector2 extents)
        {
            _center = center;
            _extents = extents;
            _debugColor = Color.Black;
        }

        public bool IsColliding(AABB b)
        {
            return AABB.TestAABBCollision(this, b);
        }

        public static bool TestAABBCollision(AABB a, AABB b)
        {
            if (Math.Abs(a._center.X - b._center.X) > a._extents.X + b._extents.X) return false;
            if (Math.Abs(a._center.Y - b._center.Y) > a._extents.Y + b._extents.Y) return false;
            return true;
        }

        public bool IsColliding(AABB b, ref Vector2 MTV)
        {
            return AABB.TestAABBCollision(this, b, ref MTV);
        }

        public static bool TestAABBCollision(AABB a, AABB b, ref Vector2 MTV)
        {
            if (Math.Abs(a._center.X - b._center.X) > a._extents.X + b._extents.X)
            {
                MTV = new Vector2((a._extents.X + b._extents.X) - Math.Abs(a._center.X - b._center.X), 0);
                return false;
            }

            if (Math.Abs(a._center.Y - b._center.Y) > a._extents.Y + b._extents.Y)
            {
                MTV = new Vector2(0, (a._extents.Y + b._extents.Y) - Math.Abs(a._center.Y - b._center.Y));
                return false;
            }

            MTV = new Vector2((a._extents.X + b._extents.X) - Math.Abs(a._center.X - b._center.X),
                (a._extents.Y + b._extents.Y) - Math.Abs(a._center.Y - b._center.Y));
            //MTV = new Vector2((a._extents.X + b._extents.X) - (a._center.X - b._center.X),
            //    (a._extents.Y + b._extents.Y) - (a._center.Y - b._center.Y));
            if (a._center.X > b._center.X)
            {
                MTV.X = -((a._extents.X + b._extents.X) - Math.Abs(a._center.X - b._center.X));
            }
            else
            {
                MTV.X = (a._extents.X + b._extents.X) - Math.Abs(a._center.X - b._center.X);
            }

            if (a._center.Y > b._center.Y)
            {
                MTV.Y = -((a._extents.Y + b._extents.Y) - Math.Abs(a._center.Y - b._center.Y));
            }
            else
            {
                MTV.Y = (a._extents.Y + b._extents.Y) - Math.Abs(a._center.Y - b._center.Y);
            }

            if (Math.Abs(MTV.X) > Math.Abs(MTV.Y))
            {
                MTV.X = 0f;
            }
            else
            {
                MTV.Y = 0f;
            }
            //MTV = new Vector2(1, 1);
            return true;
        }

        public void DrawDebug(Texture2D t, SpriteBatch sb)
        {
            
            sb.Draw(t,
                new Vector2(_center.X, _center.Y),
                XNARec,
                _debugColor,
                0f, _extents, 1f, SpriteEffects.None, 0f);
        }

    }

I try to figure out the MTV in my static obb to obb collision class. I don't understand why my MTV calculation is off.

Ranger X I like 2 and 3.

Did the Mods archive the old thread. Can they?
 
Status
Not open for further replies.
Top Bottom