• 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.

charsace

Member
2D character controller rework for Unity. The code is rough, but I can position the rays where I want and give each different lengths.

Code:
[Serializable]
public class Ray2DPropertyList
{
	//public CollisionSides
	//[List]
	public List<Ray2DProperties> nestedRay2DProperties;
}

[RequireComponent(typeof(Rigidbody2D))]
public class CharacterController2D : MonoBehaviour {


	public Vector3 velocity;
	public Vector2 rayOffset;
	public LayerMask platformLayerMasks;
	[SerializeField]
	public Ray2DProperties rayProp;

	public Ray2DProperties rayProp2;
//	[SerializeField]
	//public List<Ray2DPropertyList> rayProperties;
	public Ray2DPropertyList feet;
	public Ray2DPropertyList head;
	public Ray2DPropertyList sides;


	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () 
	{
		UpdateControl();
		velocity *=Time.deltaTime * 3;
		//CastARay();

		HorizontalCollisionCheck(ref velocity);
		VerticalCollisionCheck(ref velocity);

//		Debug.Log(velocity.x);
		transform.Translate(velocity);
	}

	void DrawDebugLine(Ray2D r)
	{
		Debug.DrawLine(r.origin,new Vector3(1 + r.origin.x, r.origin.y,0));
		//Gizmos.DrawLine(r.origin,new Vector3(1 + r.origin.x, r.origin.y,0));
	}

	void VerticalCollisionCheck(ref Vector3 rawVelocity)
	{
		int directionCheck = (rawVelocity.y<0)?-1:1;
		Vector2 rayPosition = new Vector2(transform.position.x, 
		                                  transform.position.y);

		if (directionCheck<0) 
		{
			int rayCount = feet.nestedRay2DProperties.Count;
			for (int i = 0; i < rayCount; i++) 
			{
				Vector2 tempPos = rayPosition;
				tempPos.x += feet.nestedRay2DProperties[i].rayPositionOffset.x;
				tempPos.y += feet.nestedRay2DProperties[i].rayPositionOffset.y;

				Ray2D r = new Ray2D(tempPos, Vector2.up * directionCheck);

				RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
				                                     Mathf.Abs(rawVelocity.y) + feet.nestedRay2DProperties[i].raylength, 
				                                     platformLayerMasks);

				if (hit) 
				{
					rawVelocity.y =(hit.point.y-r.origin.y)+ feet.nestedRay2DProperties[i].raylength;
					return;
				}

			}
		}

		if (directionCheck>0) 
		{
			int rayCount = head.nestedRay2DProperties.Count;
			for (int i = 0; i < rayCount; i++) 
			{
				Vector2 tempPos = rayPosition;
				tempPos.x += head.nestedRay2DProperties[i].rayPositionOffset.x;
				tempPos.y += head.nestedRay2DProperties[i].rayPositionOffset.y;
				
				Ray2D r = new Ray2D(tempPos, Vector2.up * directionCheck);
				
				RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
				                                     Mathf.Abs(rawVelocity.y) + head.nestedRay2DProperties[i].raylength, 
				                                     platformLayerMasks);
				
				if (hit) 
				{
					rawVelocity.y =(hit.point.y-r.origin.y)- head.nestedRay2DProperties[i].raylength;
					return;
				}
				
			}
		}
	}

	void HorizontalCollisionCheck(ref Vector3 rawVelocity)
	{
		int directionCheck = (rawVelocity.x<0)?-1:1;

		Vector2 rayPosition = new Vector2(transform.position.x, 
		                                  transform.position.y);

		int rayCount = sides.nestedRay2DProperties.Count;
//		Debug.Log(sidesCount);

		for (int i = 0; i < rayCount; i++) 
		{
//			Vector2 tempPos = rayPosition;
//			if (directionCheck>0) {
//				tempPos.x += sides.nestedRay2DProperties[i].rayPositionOffset.x;
//				tempPos.y += sides.nestedRay2DProperties[i].rayPositionOffset.y;
//			}
//			if (directionCheck<0) {
//				tempPos.x -= sides.nestedRay2DProperties[i].rayPositionOffset.x;
//				tempPos.y += sides.nestedRay2DProperties[i].rayPositionOffset.y;
//			}
//			tempPos.x += sides.nestedRay2DProperties[i].rayPositionOffset.x * directionCheck;
//			tempPos.y += sides.nestedRay2DProperties[i].rayPositionOffset.y;
			Vector2 tempPos = 
				new Vector2(rayPosition.x + 
			                              sides.nestedRay2DProperties[i].rayPositionOffset.x,
			                              rayPosition.y + sides.nestedRay2DProperties[i].rayPositionOffset.y);
			//tempPos.x=tempPos.x*directionCheck;

			Ray2D r = new Ray2D(tempPos, Vector2.right * directionCheck);
			RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
			                                     Mathf.Abs(rawVelocity.x) + sides.nestedRay2DProperties[i].raylength, 
			                                     platformLayerMasks);
			if (hit) 
			{
//				Debug.Log(rawVelocity);
				if (directionCheck<0) 
				{
					//rawVelocity.x =(hit.point.x-r.origin.x)-(-sides.nestedRay2DProperties[i].raylength);
					rawVelocity.x =(hit.point.x-r.origin.x)-(sides.nestedRay2DProperties[i].raylength*directionCheck);
					//rawVelocity.x = 0;
				}
				if (directionCheck>0) 
				{
					rawVelocity.x =(hit.point.x-r.origin.x)-sides.nestedRay2DProperties[i].raylength;
					//rawVelocity.x = 0;
				}
//				Debug.Log(hit.point);
//				Debug.Log(tempPos);
				//Debug.Log(r.origin);
				//Debug.Log(rawVelocity.x);
				break;
			}
		}

	}

	void CastARay()
	{
		//Vector2 temp = new Vector2(transform.position.x + velocity.x, transform.position.y + velocity.y);
		Vector2 temp = new Vector2(transform.position.x, transform.position.y);
		temp+=rayProp.rayPositionOffset;
		//temp+=rayOffset;
		Ray2D r = new Ray2D(temp, Vector2.right);
		//DrawDebugLine(r);

		RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction, velocity.x + rayProp.raylength, platformLayerMasks);
		//Debug.Log(r.origin.x + 1);

		if (hit) {
//			Debug.Log("It Hit!");
//			Debug.Log(hit.point);

			if(velocity.x>0)
			velocity.x =(hit.point.x -r.origin.x)-rayProp.raylength;// * Time.deltaTime;
			//transform.Translate(new Vector3(-(r.origin.x +1 - hit.point.x),0,0));
				}

		temp = new Vector2(transform.position.x, transform.position.y);
		temp+=rayProp2.rayPositionOffset;

		r = new Ray2D(temp, Vector2.right);
		hit = Physics2D.Raycast(r.origin, r.direction * -1, velocity.x + rayProp2.raylength, platformLayerMasks);
		if (hit) {
			//			Debug.Log("It Hit!");
			//			Debug.Log(hit.point);
			
			if(velocity.x<0)
				velocity.x =(hit.point.x -r.origin.x)+rayProp2.raylength;// * Time.deltaTime;
			//transform.Translate(new Vector3(-(r.origin.x +1 - hit.point.x),0,0));
		}
	}

	void UpdateControl()
	{
		if (Input.GetKey(KeyCode.A))
		{
			velocity.x = -1;	
		}
		else if (Input.GetKey(KeyCode.D))
		{
			velocity.x = 1;	
		}
		else
		{
			//velocity.x = 0;
		}

		if (Input.GetKey(KeyCode.S))
		{
			velocity.y = -1;	
		}
		else if (Input.GetKey(KeyCode.W))
		{
			velocity.y = 1;	
		}
		else
		{
			velocity.y = 0;
		}
	}

	void OnDrawGizmos() 
	{
		Vector2 temp;
//		Vector2 temp = new Vector2(transform.position.x+rayProp.rayPositionOffset.x, 
//		                           transform.position.y+rayProp.rayPositionOffset.y);//transform.position + rayProp.rayPositionOffset;
//		Gizmos.DrawLine(temp,new Vector3(rayProp.raylength + temp.x, temp.y,0));

		int max = sides.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+sides.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+sides.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(sides.nestedRay2DProperties[i].raylength + temp.x, temp.y,transform.position.z));
		}

		max = feet.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+feet.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+feet.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(temp.x,temp.y - feet.nestedRay2DProperties[i].raylength ,transform.position.z));
		}

		max = head.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+head.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+head.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(temp.x,head.nestedRay2DProperties[i].raylength +  temp.y,transform.position.z));
		}
	}
}
 

Vard

Member
I'm pretty proud of how our latest project turned out. It's an HTML5 action-based platformer playable on desktop and tablet browsers. You play as Bilbo Baggins and fight off the spiders of Mirkwood in order to save the company of dwarves. I had a lot of fun working on this one. Check it out!

The Hobbit: The Desolation of Smaug - The Spiders of Mirkwood
Link: http://spidersofmirkwood.thehobbit.com/

vXuKV3M.jpg
 

SHARKvince

Neo Member
I don't really have any experience with laptops for gaming, so I'm asking this here in hope for a response. Does anyone know what kind of laptop I should get if I wanted to use it for game development? To give somewhat of an idea, our currently biggest game is probably going to be on a graphical level similar to Gravity Rush, but we'd need to be able to run it in at least 720p/60fps, preferably higher on a computer. Does that sound possible on a laptop? I've done some research, and am mostly reading that even with high-end mobile GPUs, you'd have to play most games on low settings and you'd still end up with a terrible framerate... (the reason I'd prefer a laptop is flexibility - I'm moving a lot, and it's a nightmare to travel with my iMac already.)

We've been doing quite a bit of progress on our first project (Nightmarish Endeavours) already. We've set up our company officially and have been working with Sony for a bit :D they're incredibly nice and helpful, and the PhyreEngine is awesome.
 

razu

Member
I don't really have any experience with laptops for gaming, so I'm asking this here in hope for a response. Does anyone know what kind of laptop I should get if I wanted to use it for game development? To give somewhat of an idea, our currently biggest game is probably going to be on a graphical level similar to Gravity Rush, but we'd need to be able to run it in at least 720p/60fps, preferably higher on a computer. Does that sound possible on a laptop? I've done some research, and am mostly reading that even with high-end mobile GPUs, you'd have to play most games on low settings and you'd still end up with a terrible framerate... (the reason I'd prefer a laptop is flexibility - I'm moving a lot, and it's a nightmare to travel with my iMac already.)

We've been doing quite a bit of progress on our first project (Nightmarish Endeavours) already. We've set up our company officially and have been working with Sony for a bit :D they're incredibly nice and helpful, and the PhyreEngine is awesome.


I have a 2012 Retina MacBook Pro and it's pretty awesomely powerful.
 

Five

Banned
I don't really have any experience with laptops for gaming, so I'm asking this here in hope for a response. Does anyone know what kind of laptop I should get if I wanted to use it for game development? To give somewhat of an idea, our currently biggest game is probably going to be on a graphical level similar to Gravity Rush, but we'd need to be able to run it in at least 720p/60fps, preferably higher on a computer. Does that sound possible on a laptop? I've done some research, and am mostly reading that even with high-end mobile GPUs, you'd have to play most games on low settings and you'd still end up with a terrible framerate... (the reason I'd prefer a laptop is flexibility - I'm moving a lot, and it's a nightmare to travel with my iMac already.)

We've been doing quite a bit of progress on our first project (Nightmarish Endeavours) already. We've set up our company officially and have been working with Sony for a bit :D they're incredibly nice and helpful, and the PhyreEngine is awesome.

No, it's possible to get a decent GPU in a laptop; it's just going to cost nearly twice as much as it might in a desktop. I recently dropped $1300 on a Lenovo IdeaPad and it's comfortably handling everything I throw at it.

But you're much better off looking and asking in this thread: http://www.neogaf.com/forum/showthread.php?t=504567
 

charsace

Member
Updated my 2d character controller. Think I have the collision with the static objects done with. Now to figure out how to do enemy collisions.

Code:
[Serializable]
public class Ray2DProperties
{
	public Vector2 rayPositionOffset;
	public float raylength;
}

[Serializable]
public class Ray2DPropertyList
{
	public List<Ray2DProperties> nestedRay2DProperties;
}

[RequireComponent(typeof(Rigidbody2D)),
 AddComponentMenu("Chars Engine Input/CharacterController2D")]
public class CharacterController2D : MonoBehaviour {


	public Vector3 velocity;
	public Vector2 rayOffset;
	public LayerMask platformLayerMasks;

	public Ray2DPropertyList feet;
	public Ray2DPropertyList head;
	public Ray2DPropertyList sides;
	public bool isGrounded;

	void Start(){
	
	}

	void DrawDebugLine(Ray2D r)
	{
		Debug.DrawLine(r.origin,new Vector3(1 + r.origin.x, r.origin.y,0));
	}

	void VerticalCollisionCheck(ref Vector3 rawVelocity)
	{
		int directionCheck = (rawVelocity.y<0)?-1:1;
		Vector2 rayPosition = new Vector2(transform.position.x, 
		                                  transform.position.y);

		if (directionCheck<0) 
		{
			int rayCount = feet.nestedRay2DProperties.Count;
			for (int i = 0; i < rayCount; i++) 
			{
				Vector2 tempPos = rayPosition;
				tempPos.x += feet.nestedRay2DProperties[i].rayPositionOffset.x;
				tempPos.y += feet.nestedRay2DProperties[i].rayPositionOffset.y;

				Ray2D r = new Ray2D(tempPos, Vector2.up * directionCheck);

				RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
				                                     Mathf.Abs(rawVelocity.y) + feet.nestedRay2DProperties[i].raylength, 
				                                     platformLayerMasks);

				if (hit) 
				{
					isGrounded = true;
//					Debug.Log("Is grounded: "+isGrounded);
					rawVelocity.y =(hit.point.y-r.origin.y)+ feet.nestedRay2DProperties[i].raylength;
					return;
				}

			}
		}

		if (directionCheck>0) 
		{
			int rayCount = head.nestedRay2DProperties.Count;
			for (int i = 0; i < rayCount; i++) 
			{
				Vector2 tempPos = rayPosition;
				tempPos.x += head.nestedRay2DProperties[i].rayPositionOffset.x;
				tempPos.y += head.nestedRay2DProperties[i].rayPositionOffset.y;
				
				Ray2D r = new Ray2D(tempPos, Vector2.up * directionCheck);
				
				RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
				                                     Mathf.Abs(rawVelocity.y) + head.nestedRay2DProperties[i].raylength, 
				                                     platformLayerMasks);
				
				if (hit) 
				{
					isGrounded = false;
//					Debug.Log("Is grounded: "+isGrounded);
					rawVelocity.y =(hit.point.y-r.origin.y)- head.nestedRay2DProperties[i].raylength;
					return;
				}
				
			}
		}
	}

	void HorizontalCollisionCheck(ref Vector3 rawVelocity)
	{
		int directionCheck = (rawVelocity.x<0)?-1:1;

		Vector2 rayPosition = new Vector2(transform.position.x, 
		                                  transform.position.y);

		int rayCount = sides.nestedRay2DProperties.Count;
//		Debug.Log(sidesCount);

		for (int i = 0; i < rayCount; i++) 
		{
			Vector2 tempPos = 
				new Vector2(rayPosition.x + 
			                              sides.nestedRay2DProperties[i].rayPositionOffset.x,
			                              rayPosition.y + sides.nestedRay2DProperties[i].rayPositionOffset.y);

			Ray2D r = new Ray2D(tempPos, Vector2.right * directionCheck);
			RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction,
			                                     Mathf.Abs(rawVelocity.x) + sides.nestedRay2DProperties[i].raylength, 
			                                     platformLayerMasks);
			if (hit) 
			{
//				Debug.Log(rawVelocity);
				if (directionCheck<0) 
				{
					rawVelocity.x =(hit.point.x-r.origin.x)-(sides.nestedRay2DProperties[i].raylength*directionCheck);
				}
				if (directionCheck>0) 
				{
					rawVelocity.x =(hit.point.x-r.origin.x)-sides.nestedRay2DProperties[i].raylength;
				}
//				Debug.Log(hit.point);
//				Debug.Log(tempPos);
				//Debug.Log(r.origin);
				//Debug.Log(rawVelocity.x);
				break;
			}
		}

	}

	public void Move(Vector3 rawVelocity)
	{
//		HorizontalCollisionCheck(ref rawVelocity);
//		VerticalCollisionCheck(ref rawVelocity);

		if(rawVelocity.x!=0)
		{
			HorizontalCollisionCheck(ref rawVelocity);
		}
		if(rawVelocity.y!=0)
		{
			VerticalCollisionCheck(ref rawVelocity);
		}

//		Debug.Log("Is grounded: "+isGrounded);

		transform.Translate(rawVelocity);
		velocity = rawVelocity;
//		Debug.Log(gameObject.name + " Character Controller2D Velocity: " + velocity);

		isGrounded = false;
	}

	void OnDrawGizmos() 
	{
		Vector2 temp;

		int max = sides.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+sides.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+sides.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(sides.nestedRay2DProperties[i].raylength + temp.x, temp.y,transform.position.z));
		}

		max = feet.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+feet.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+feet.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(temp.x,temp.y - feet.nestedRay2DProperties[i].raylength ,transform.position.z));
		}

		max = head.nestedRay2DProperties.Count;
		for (int i = 0; i < max; i++)
		{
			temp = new Vector2(transform.position.x+head.nestedRay2DProperties[i].rayPositionOffset.x, 
			                   transform.position.y+head.nestedRay2DProperties[i].rayPositionOffset.y);	
			Gizmos.DrawLine(temp,new Vector3(temp.x,head.nestedRay2DProperties[i].raylength +  temp.y,transform.position.z));
		}
	}
}
 

Raonak

Banned
Got a new version of Nax of the Universe out.

The main addition is MUSIC! yay! Really makes it feel more complete. I'm likely gonna change the music later though. But for now, it works.
Another addition are cinematic sequences to the start/end of the first level.
Plus controller support is fixed again.


And the smallest, but biggest change. Particle effects. When you hit enemies, particles will pop. adding a more satisfying feel to the combat.

http://dreammodule.com?nax=about
 

Jobbs

Banned
Got a new version of Nax of the Universe out.

The main addition is MUSIC! yay! Really makes it feel more complete. I'm likely gonna change the music later though. But for now, it works.
Another addition are cinematic sequences to the start/end of the first level.
Plus controller support is fixed again.



And the smallest, but biggest change. Particle effects. When you hit enemies, particles will pop. adding a more satisfying feel to the combat.

http://dreammodule.com?nax=about

First of all, let me say that I like your idea here, and the timing of the attack combos seems spot on. You've got that down pretty well. What kind of setup are you using to make the game? What platform?

I realize you didn't ask for a crit, so apologies in advance, but I'm curious about the game so here are my concerns:

1) Can you face up and down? Judging by the videos, it seems you can't. At first, at least, this makes me wonder if there's some potential oddness there. I realize that drawing all those melee combos from 2 additional angles (up and down) adds a lot of work, but it also may be strange that you can move up and down but can only attack to the side. Or not. I could be totally wrong, I haven't actually played it. Maybe it works.

2) While the rythm and combos of the game look very good, I feel the art style could use some work. The color scheme is too bright and rich and, at least for me, is a bit off putting. The super bright rich slime green assaults the eyes; When the "canvas" of the game is so bright and rich, there's no where to go. You can't add in contrasting elements when everything is already set to 11. Say, for example, I wanted to add glowing rich green orbs into my game. If everything on screen is already the richest possible glowing green, well, then there's nothing I can do.

What are your plans for this game? Is this an open exploration type game?
 

V_Arnold

Member
Raonak, keep up the work, it is getting better and better indeed! I also think that the green color is pretty much oversaturated and kinda hurts my eyes, but that is a problem that can be overcome once you get to the point of polishing/setting visual content themes.
 

charsace

Member
I have a question. can I speed up a jump takeoff, and limit the height? Say if I apply 30f to a jump, but I don't want the apex of the jump to be more than 10f off the ground.
 

Blizzard

Banned
I don't have any screenshots or videos right now, but I finally started working some more on development stuff. I got something running on the Wii U, and I'm hoping to use the Christmas break to spend some time working on the main game ideas and maybe starting on prototyping for real.

SOME DAY, maybe progress. :p
 

missile

Member
I shall investigate... as soon as I get this coursework done.

Calculating frenet frames and generalised cylinders anyone? haha
Frenet sucks while the second derivative vanishes, which is a problem while
tracking a coordinate frame along many different curves / segments. For
example, no Frenet frame long straight lines! Hence, if a curve straightens
the Frenet frame vanishes. Other solutions are required in this case. The
Frenet frame is sort of an ideal case from a mathematical point of view, yet
for computer graphics resp. video games we need more general methods which
are able to deal with less assumptions.


Merry Christmas!
 

friken

Member
I have a question. can I speed up a jump takeoff, and limit the height? Say if I apply 30f to a jump, but I don't want the apex of the jump to be more than 10f off the ground.

I'm not sure what your are developing in. In Unity, I use lerp/slerp a lot for smoothing out movements. I also using tweening library for some stuff. Check out hotween or itween for unity.
 
Starmap update, zoom out/in test in the galaxy map, travel time between star systems take a lot of time and resources and that will be a key element in the game play of Junkcraft Armada.

zoomTestFinal_zps420feb4d.gif
 

Bamihap

Good at being the bigger man
I’m not usually one who likes to look back at the past. I’ve got more of a “what’s next?!” mentality. But reflecting on your progress does have it advantages. It’s also super cool! Just look at this visual history of Castaway Paradise. 1.5 years of improvements captured in one image.

History_CastawayParadise.png


I will remove the image if it's too big. But with all the gifs around here, I don't think it is.
 
D

Deleted member 22576

Unconfirmed Member
Hey everyone.
I've put about 4 hours into Gamemaker tutorials so far this week. It's pretty exciting. I'm about to do the particals tutorial in a few minutes after I feed myself, etc. I have to say its a pretty revelatory experience seeing all the lights and switches come on. After I was working yesterday I started thinking of all the creative ways to use each attribute and stuff. I'm even working on a design doc. :eek:

Well, if I stick with it I'm sure I'll be around to post more of my experience but so far its been really satisfying.
 

friken

Member
Hey everyone.
I've put about 4 hours into Gamemaker tutorials so far this week. It's pretty exciting. I'm about to do the particals tutorial in a few minutes after I feed myself, etc. I have to say its a pretty revelatory experience seeing all the lights and switches come on. After I was working yesterday I started thinking of all the creative ways to use each attribute and stuff. I'm even working on a design doc. :eek:

Well, if I stick with it I'm sure I'll be around to post more of my experience but so far its been really satisfying.

Welcome to the addiction of game development :) I haven't played with Gamemaker, but it sounds pretty good. The design you are dreaming up, what kind of game?
 
D

Deleted member 22576

Unconfirmed Member
Well, eventually I want to make a really simple narrative driven bowling game. I dunno. The scope of what I have in my head is like, exponentially more complex than making bombs explode or bananas bounce around once they hit the wall.


Anyway, as for this week I'm just gonna make one of the really simple gamemaker tutorial things but with all my own assets. I just got a 5$ pixel art app for my iPad which is also pretty damn fun to play around. Later on once I shower and dress I'm gonna go buy some graph paper.


996702_10201156887588470_673368251_n.jpg


https://dl.dropboxusercontent.com/u/84806007/Winter's Lost Heart/index.html

Made this "interactive holiday card" in Construct 2 over the last few days.

Merry Christmas/holidays/Tuesday indie dev GAF!

Whoa cool, just played this and it was super cool. The character is awesome looking. Great design.
 

friken

Member
Krex vs SunDagger:

Krex ship is now playable, with long range flak cannons. Aim the broadside launchers and fire away. The longer you hold fire the further they go. Release to pop the flak.

SunDagger, Attached to the power of the stars, when they run out of power they dive through a star to recharge. Dive deep enough and pull star plasma to toss at your foe.



Next up, to add ramming to the front of the krex ship. Going to try two different methods and see what we like best. Either momentary forward burst of speed to ram, or launching the front 'claw' section forward to bite/chomp on impact. Not sure which will turn out better.
 

fin

Member
Been a long time since a SSS.

iIVAYxnKOl6Hl.png


Been like a year since the game jam but Instance is almost done. I'm like 90% happy with all the levels. For an A+ grade on the entire game you're going to be using, at most, 262 clones in 50 levels, solving 128 puzzles. Got my level select working good, levels unlock when they should. My helper AI, Ivan, does what it should. A hard mode and expert mode (with perma death, you'll need to complete the whole game without killing a clone). Everything is in there, although still not 100% happy with the FPS on Android, but we'll see how IOS runs. Just picked up a Macbook Air and an IPad Mini for testing. I'm thinking next month it'll be good to go!
 
D

Deleted member 22576

Unconfirmed Member
So I have a question about Gamemaker's steps. The tutorials constantly refer to them but fail to give a concrete explanation of exactly what each step is.

The software first introduces you to the concept of steps when it has you make an alarm timer event spawn bombs in the second beginner tutorial. It says that there are 30 steps to each second, and has you make a new bomb spawn every 60 steps, or 2 seconds.

I guess what I'm puzzled on is how steps relate to framerate. My perception of it now is that internal game engine only works at 30 steps a second, but the actual framerate is much higher than that. Something about that just seems scary and incongruous to my fragile mind.
 

Five

Banned
So I have a question about Gamemaker's steps. The tutorials constantly refer to them but fail to give a concrete explanation of exactly what each step is.

The software first introduces you to the concept of steps when it has you make an alarm timer event spawn bombs in the second beginner tutorial. It says that there are 30 steps to each second, and has you make a new bomb spawn every 60 steps, or 2 seconds.

I guess what I'm puzzled on is how steps relate to framerate. My perception of it now is that internal game engine only works at 30 steps a second, but the actual framerate is much higher than that. Something about that just seems scary and incongruous to my fragile mind.

Steps are frames or ticks. Game Maker takes time T, runs step code, runs draw code, waits until T+1/30s, then loops. If you want to change the frame time, you can go into the settings tab of your level's room editor and change the Speed input, which defaults to 30.

Personally, the first thing I always do when working on a new game or new level is change the speed to 60. Game Maker used to be quite slow and handled 60fps poorly, but it's come a long way and computers have gotten better in the mean time.

It's important to note what your fps is for anything timing-based, though. The alarm you set for 60 steps might last two seconds in your game, but it would only last one in mine. If each of our games has a character move one pixel per step, mine is going to move thirty pixels per second more than yours.


There is no legitimate way for Game Maker to run with an unlocked frame rate. About the best you could do is set the game speed to something arbitrarily high like 120 and use delta timing to compensate, but then the game's built-in alarms and timing mechanisms would be messed up. So it's usually easiest to just let it stay at the locked frame rate.

edit: as another addendum, Game Maker will tell you the theoretical frame rate ceiling you could be hitting if you run in debug mode. It does this by measuring how much time it idled in a given step and extrapolating on that value. If, for example, your 30 fps game is idling for half of a step, then it will tell you that the game's FPS is 60. It's not actually running at that rate, however.
 
D

Deleted member 22576

Unconfirmed Member
So, I think I understand the jist of that I'm going to stew on it for a bit. I had no idea you could even change the amount of steps. Interesting.

I was just kinda puzzled because I'm using a 120hz monitor and my framerate in the menu thing says its running at that amount of refreshes but then I started to puzzle on what if I were to somehow be targetting a 120hz experience (which I'm not) and the game only allowed 30 steps per second then it feel rather imprecise. But if you can change that then I guess that answers that question.

So if you made a game that ran at 120 ticks and ran it on a computer that could only render it at 40fps the game would just run in slowmotion?
 

Five

Banned
Basically, yeah.

If it helps, this is a grab from the game I'm working on running in debug mode. The game's running at a speed of 60, the monitor has a refresh rate of 59 hertz, but it's telling me 121. All it means is that ticks are taking 1/121s so I'm coming out ahead.

 
D

Deleted member 22576

Unconfirmed Member
So that just means that your ticks are calculated far before they're rendered?
 

Five

Banned
Yeah. If you look at the colored bar and white lines along the top of the screen, you can gauge how well the game is running and where the bottlenecks are. The white ticks are each 1/60s apart, making the screen 1/15s wide. The green bar is time spent polling IO. The red is running step code (including begin and end step code as well as movement, alarms and collisions). The yellow is time spent drawing stuff. The empty space is how long the GPU waited before getting to throw what it had drawn and buffered onto the screen, at which point the next tick begins.

Game Maker's manual (F1) goes into a lot more detail about this. You can search the index for debug mode or debugging.
 

charsace

Member
Basically, yeah.

If it helps, this is a grab from the game I'm working on running in debug mode. The game's running at a speed of 60, the monitor has a refresh rate of 59 hertz, but it's telling me 121. All it means is that ticks are taking 1/121s so I'm coming out ahead.

What software do you make your art in? I was thinking of going with vectors for my art.
 
D

Deleted member 22576

Unconfirmed Member
Ugh. I think that I'm probably due for some kahn academy equation refreshers. This is grinding my brain harder than I'm comfortable with. The tutorial isn't great but I also haven't thought in this mode for a while.

Completing the sidescrolling shooter tutorial and implementing the controls of the plane relative to the scrolling background is a little complicated.
 

Five

Banned
What software do you make your art in? I was thinking of going with vectors for my art.

I currently use Adobe Illustrator CS6, and have been using some version of Illustrator for the past ten years. I've heard great things about plenty of other software, such as Inkscape, but I haven't ever shopped around because Illustrator is industry standard. It wouldn't be effective for me if I was using Illustrator at my day job and something else at home.
 

razu

Member
Merry Christmas!

I have updated my website, vamflax.com, and I'm in the process of writing some general game development articles/tutorials.

Is there anything that you'd like to see on there?


Take it easy! :D
 

charsace

Member
I currently use Adobe Illustrator CS6, and have been using some version of Illustrator for the past ten years. I've heard great things about plenty of other software, such as Inkscape, but I haven't ever shopped around because Illustrator is industry standard. It wouldn't be effective for me if I was using Illustrator at my day job and something else at home.

Do you sketch in illustrator or in photoshop?

AI razu?
 

Five

Banned
Do you sketch in illustrator or in photoshop?

AI razu?

That depends. I'm far more creative when sketching by hand, so I like to do that for certain things. I used to sketch on paper a lot, but now mostly it's in PhotoShop with a drawing tablet. After sketching the drawings, I'll copy it over into Illustrator and recreate it there, usually using the pen and knife tools. Sometimes I'll use the pencil tool for blob shapes or to smooth out a set of points.

This is especially true of character designs and organic things. However, for mechanical things, it's not uncommon for me to draw the shapes in Illustrator without any sketching. There are multiple reasons for this: it's harder to freehand straight lines, accurate angles, divisions and circles. As well, mechanical things and illustrations that have to tile in the game need to have exact dimensions and proportions, meaning a sketch could only ever give me a general idea.
 

Lissar

Reluctant Member
Whoa cool, just played this and it was super cool. The character is awesome looking. Great design.

Thanks so much! I'm actually thinking about expanding it a bit into all four seasons, but that's going to have to wait until I finish other projects.



Trying to keep myself engaged with people and the work I'm doing by blogging about it. Wrote a post about puzzle design balance and planning:
http://cuneicorn.wordpress.com/2013/12/29/process-journey-expanded-edition-part-ii/

(Main site is through here: http://www.cuneicorn.com/ I just started a new site to keep track of my game stuff! Pretty excited about it).
 
D

Deleted member 22576

Unconfirmed Member
So, I spent much of today messing around with variables and scrolling backgrounds.
I decided to stop doing tutorials for the time being so I can apply what I've learned in the last 48 hours.

I hope to have a "demo" to show off relatively soon. I'm basically just redoing the "scrolling shooter" tutorial from scratch with my own assets and tuning. I'm finding myself writing like a paragraph in my notebook and then trying to whittle it down to whatever function I want to input into the "variable test" attribute.

I just spent about an hour trying to get these "obstacle" objects to scroll at the same speed as the background, disappear once they reach the end of the screen and then randomly regenerate just out of frame on the other side to scroll back to the edge.. rinse/repeat. I'm sure you all get the idea. It was really simple in the tutorial but I guess the way I'm trying to do it on my own is more complex or I'm doing something wrong. I'm not quite sure, just stopped for the night.

I'm having quite a lot of fun. I definitely keep breaking my shit every 5 minutes but its ok.

So far I've made one pretty rad 80x80 background tile, a kind of awkwardly dimensioned "border" tile for the background, and then one 64x64 obstacle object. I'm using my iPad and I have to say its a pretty great workflow..

Just sketch out what I want on graph paper while my PC is showing examples on google, then on my iPad I can do pixel based rendition and shoot it to dropbox and then kaboom its in my game! I feel like a real game designer!


Hobbywise this is really fun because once you're done with the grindy math pro-grammatical stuff you can just kick back and draw sprites while you chill out and still feel like you're doing something productive.
 
Got some questions for you guys: What's the term used when 2D (or 2.5D) platformers have multiple x-planes to use for progressive movement? Examples of what I'm thinking of would be Kirby's Epic Yarn, Donkey Kong Country Returns, and I'm sure there's loads others... But the character transits from the initial x-plane platformer to one that's behind or in front of it from the camera's perspective.

1) What would the terminology be to refer to that implementation/structure?
2) Is that something that is difficult to code?
3) Any negatives to having a platformer behave this way?
 
I have a simple question, I'm using the GUI text game object to display text in game. What if I want to display the text in a dialogue box? Like in an RPG. Do I use GUI texture?
 

razu

Member
Do you sketch in illustrator or in photoshop?

AI razu?

Not really done all that much AI. Will be doing some on Chopper HD, so could write about how that works.

Brother-in-Law has a degree in AI, and I work with AI ppl, so perhaps they could write guest articles! :D
 

razu

Member
Got some questions for you guys: What's the term used when 2D (or 2.5D) platformers have multiple x-planes to use for progressive movement? Examples of what I'm thinking of would be Kirby's Epic Yarn, Donkey Kong Country Returns, and I'm sure there's loads others... But the character transits from the initial x-plane platformer to one that's behind or in front of it from the camera's perspective.

1) What would the terminology be to refer to that implementation/structure?
2) Is that something that is difficult to code?
3) Any negatives to having a platformer behave this way?

As in "parallax"?
You just move the planes at different rates.
 
I think he might be talking about something like moving in the z axis. Like I'm assuming he means something like Here, where Kirby walks in front of the building, opens the door, goes behind the building, then comes out on top of it.

If that's what you mean, that's not very difficult to do. Most 2D engines render sprites on top of each other according to what "layer" they're on and you should be able to handle collisions via layers. For 3D games, you could simply just move the character behind said object.
 
I think he might be talking about something like moving in the z axis. Like I'm assuming he means something like Here, where Kirby walks in front of the building, opens the door, goes behind the building, then comes out on top of it.

If that's what you mean, that's not very difficult to do. Most 2D engines render sprites on top of each other according to what "layer" they're on and you should be able to handle collisions via layers. For 3D games, you could simply just move the character behind said object.

That's what I meant. Very new to the lingo and whatnot, didn't know exactly how to describe it. Thanks for the info!

thanks @ razu, too :)
 
Status
Not open for further replies.
Top Bottom