clyde

Amateur Game Making Night

Recommended Posts

I'm starting to get a pipeline set up where by I go from Spriter, a simple animation program, to Unity. The Spriter dudes provide a plug in to do this, which is pretty sweet, I just made a little script that converts from Unity sprites to 2D toolkit sprites.

 

The result is an in-engine walking dong man. Terrible unlooped gif and cartoon penis inside:

8YAA9di.gif

Share this post


Link to post
Share on other sites

Allright, here's my Ludum Dare game: http://dinosaursssssss.itch.io/anti-matter edit: heres a version that im updating and bug fixing : http://maximum-extreme.com/antimatter/ It's a...I donno, tower defense tug-of-war I guess. I wanted the player to lose most of their planets, and have to win them all back. I'm mostly happy with how it came out, though it definitely needs some rebalancing. I had a good time making the music, even though it isn't that great I don't think...Bosca Ceoil is a really nifty little tool. I got the hang of using it, but I still don't really know how to make a fun tune. It also felt good to make my own models rather than mashing together primitives in unity or getting stuff off the asset store; my needs for this weren't that crazy, but I feel like I scoped well and I'm happy with the results. This is something I'd like to keep poking at, so if anyone has feedback I'd love to hear it. And heres a picture! BUw2CC7l.png

 

edit: I made some gifs (including a sorta-timelapse of development) and included more screenshots in this imgur gallery. http://imgur.com/a/vtyi0#0

Share this post


Link to post
Share on other sites

Prototype for Unity is free if you download it during September. I played around with it a bit. I think it will be useful to be because if I experiment in 3d, it'll be lazily made blocky things and I don't want to learn Blender. Another thing I like about it is that you can put a texture on a single face easily.

Share this post


Link to post
Share on other sites

Prototype for Unity is free if you download it during September. I played around with it a bit. I think it will be useful to be because if I experiment in 3d, it'll be lazily made blocky things and I don't want to learn Blender. Another thing I like about it is that you can put a texture on a single face easily.

 

I used Prototype before switching to UE4. Fantastic tool, especially combined with Progrids.

Share this post


Link to post
Share on other sites

Yeah that's a cool promotion. I already purchased it before (was only 20 bucks or so) and it was really nice to quickly draw out a room, and with the new features I expect it will be even better. As a man of very limited 3D skills I think I'll use this someday to make a simple and stark scifi game.

Share this post


Link to post
Share on other sites

Here is a script from my dancing girls game. I thought that amateurs might appreciate looking at some script written at my level after six months or so. 

 

using UnityEngine;
using System.Collections;

public class AssignedPositions : MonoBehaviour {

//For assigning ints to each dancer.
	public static int npcCount;
	int npcNumber;
	
	Transform _transform;

//Here are the dance formations. They are empty parents with four empty gameObjects as children that act like baseball bases.
	public GameObject largeSquare;
	Transform[] largeSquares= new Transform[4];
	public KeyCode largeSquareKey;

	public GameObject smallDiamond;
	Transform[] smallDiamonds=new Transform[4];
	public KeyCode smallDiamondKey;

	public GameObject horizontalLine;
	Transform[] horizontalLines=new Transform[4];
	//This must be assigned because I use the none value.
	public KeyCode horizontalLineKey;

	//This allows me to check to see if the new keycode is the same as the old one so that it won't do it a million times when it's pressed down.
	KeyCode currentKeycode;
	
	//Since horizontal lining is assigned to a key combination it needs more stuff
	//Whether or not it is currently in that formation
	bool horizontalLining;
	//An optional key.
	public KeyCode switchPositionKey;

	//Because switching positions isn't assigned to a particular key, I have to make it a switch.
	bool switchingPosition;


	//My first enum. I forgot this was here. determines what's happening with the accordion.
	enum PushPull {still, pushing, pulling};
	PushPull pushPull_this=PushPull.still;
	
		
	//Taking account of the gameObjects that make the danceFormation bases.
	Transform target_transform;
	//An array of the current formation
	Transform[] currentTarget_array;
	Vector3 targetLocation;
	
	bool targetReached;

//Dancer attributes
	//Speed of dancers.
	float speed;
	public float minSpeed=0.6f;
	public float maxSpeed=1;

	//This is for flipping the sprite
	Vector3 rotationRight;
	Vector3 rotationLeft;

	Animator animator;

	//Giving them various pushiness
	Rigidbody2D theRigidbody2d;
	float startingMass;

	//A timer to reposition when pushed out of way.
	float repositionTimer=0f;
	//How many times they can try to reposition themselves.
	int attemptsLeft;


//Wandering. This doesn't apply to when they are dancing. This is their idle state.
	GameObject wanderTarget;
	bool wandering;
	//Once they get there they stand there for a moment.
	bool waitingToWander;
	float wanderTimer=0f;
	float wanderCycle=1;
	

//---------------------------------------------------------------------------------------------------------
//Here are the methods.
	void Awake()
	{
		//Assign each dancer a number.
		npcNumber=npcCount;
		npcCount=npcCount+1;
		
		//Create a target for them to wander to, it will be placed later.
		wanderTarget=new GameObject();
	}
	
//This assigns the bases of each dance formation into an array of Transforms.Dance formations are organized in the inspector as an empty parent with the bases being their children.
	void GetPositionList(GameObject positionGroup, Transform[] positionArray)
	{
		//Get Transform of the formation (parent)
		Transform positionGroup_transform=positionGroup.GetComponent<Transform>();
		int loopCounter=-1;
		//Fill an array for each with all the children's transforms. 
		foreach(Transform child in positionGroup_transform)
		{
			loopCounter=loopCounter+1;
			positionArray[loopCounter]=child;
		}
	}

	void Start () 
	{
		_transform=this.GetComponent<Transform>();
		
		//Assign each formation's children to their arrays.
		GetPositionList(largeSquare, largeSquares);
		GetPositionList (smallDiamond, smallDiamonds);
		GetPositionList(horizontalLine, horizontalLines);

		//Dancer speed is procedurally generated
		speed=Random.Range (minSpeed, maxSpeed);

		//Rotations I want the sprites flipped to when walking to the right or left.
		rotationRight=_transform.rotation.eulerAngles;
		rotationLeft=rotationRight;
		rotationLeft.y=180;

		animator=this.GetComponent<Animator>();

		//Kinda a hack solution to make some of them more pushy than others
		theRigidbody2d=this.GetComponent<Rigidbody2D>();
		startingMass=Random.Range(1, 9);
		theRigidbody2d.mass=startingMass;

		

		//This makes it so I can pretend that their first wandering state came after a moment of waiting like all others.
		//They start in a wandering state.
		targetReached=true;
		wandering=true;
		waitingToWander=false;
	}
	

	void Wander()
	{
		if (targetReached)
		{
		//If they find their target, I want them to wait a bit.
			if(waitingToWander==false)
			{
				//How long they will wait once they reach their target.
				wanderCycle=Random.Range(1f, 4f);
				waitingToWander=true;
			}
			if (waitingToWander)
			{
				//Debug.Log ("NPC "+npcNumber+" is waiting" + wanderTimer+" of " +wanderCycle);
				wanderTimer=wanderTimer+Time.deltaTime;
				if(wanderTimer>wanderCycle)
				{
					//reset everything
					targetReached=false;
					waitingToWander=false;
					wanderTimer=0f;
					
					//Put their wander target somewhere.
					wanderTarget.transform.position= new Vector3(Random.Range(-8f, 8f), Random.Range(-5f, 0f), 0f);	
					//Make the wanderTarget their target that can be applied to Move()
					target_transform=wanderTarget.transform;
					//Just in case it's off...
					wandering=true;

					//I'd also like them to put their arms back down.
					LowerArms();
				}
			}
		}
	}
	
	void LowerArms()
	{
		animator.SetBool ("rightArmLift", false);
		animator.SetBool("rightArmLower", true);
		animator.SetBool ("leftArmLift", false);
		animator.SetBool("leftArmLower", true);
	}

	void MoveToPosition()
	{
		if (!targetReached)
		{
			animator.SetBool ("walking", true);
			
			//Straight up, move towards a target at the step increment.
			float step=speed*Time.deltaTime;
			_transform.position=Vector3.MoveTowards(_transform.position, target_transform.position, step);
			
			//This is to mirror the sprite image if they are walking left
			if (_transform.position.x<target_transform.position.x)
			{
				_transform.rotation=Quaternion.Euler (rotationRight);
			}
			else 
			{
				_transform.rotation=Quaternion.Euler (rotationLeft);	
			}

			//reset mass after they were able to be pushed.
			theRigidbody2d.mass=startingMass;
			
			//Check to see if it has reached the target.
			if(_transform.position==target_transform.position)
			{
				targetReached=true;
				animator.SetBool ("walking", false);
				//Making it so that others can push them out of the way to get in their place
				theRigidbody2d.mass=0f;
				wandering=true;
				//attemptsLeft is assigned by ChooseTarget(), so I can use this to see if they were recently assigned a position.
				if(attemptsLeft==2)
				{
					//Give them a longer amount of time that they are willing to wait once the target is reached.
					wanderCycle=Random.Range (10, 30);	
					waitingToWander=true;
				}
			}
		}
		//Reposition if knocked out of position
		if((targetReached)&&(_transform.position!=target_transform.position))
		{
			repositionTimer=repositionTimer+Time.deltaTime;
			if ((attemptsLeft>0)&&(repositionTimer>1f))
			{
				repositionTimer=0f;
				targetReached=false;
				MoveToPosition();
				attemptsLeft=attemptsLeft-1;
				//Debug.Log ("repositioning");
			}
		}
	}
	
	//The dancer chooses the base of the formation that matches their number.
	void ChooseTarget(Transform[] positionList)
	{	
		//Resets
		targetReached=false;
		attemptsLeft=2;
		wandering=false;

		//Keep a record of what formation you are part of in case SwitchPosition() is called.
		currentTarget_array=positionList;
		
		if(npcNumber<=positionList.Length-1)
		{
			target_transform=positionList[npcNumber];
		}
	}

	//Everybody switch your assigned numbers.
	void SwitchPosition()
	{
		if(npcNumber==npcCount-1)
		{
			npcNumber=0;
		}
		else
		{
			npcNumber=npcNumber+1;
		}
		//Refresh the target now that you have a new number.
		ChooseTarget(currentTarget_array);
	}

//Getting out of the horizontal line is particularly sticky so I need to call the request for the other positions when it happens.
//So I'm going to put them in a method that Update() will call.
//Edit: I fixed it, the problem was that I was checking for !largeSquare&&smallDiamond rather than !(largeSquare&&smallDiamond)
	void CheckForPositionInput()
	{
		if(ChangeWidth.changeInLength!=0)
		{
			
			if (currentKeycode==horizontalLineKey)
			{
				if (!((Input.GetKey(largeSquareKey))&&(Input.GetKey(smallDiamondKey))))
				{
					currentKeycode=KeyCode.None;	
				}
			}
			if (currentKeycode!=largeSquareKey)
			{	
				if(Input.GetKey(largeSquareKey)&&(currentKeycode!=horizontalLineKey))
				{
					currentKeycode=largeSquareKey;
					ChooseTarget(largeSquares);
					Debug.Log(currentKeycode);
				}
			}
			if (currentKeycode!=smallDiamondKey)
			{
				if (Input.GetKey(smallDiamondKey)&&(currentKeycode!=horizontalLineKey))
				{
					currentKeycode=smallDiamondKey;
					ChooseTarget(smallDiamonds);
					Debug.Log(currentKeycode);
				}
			}
			
			if (currentKeycode!=horizontalLineKey)
			{
				if (Input.GetKey(smallDiamondKey)&&(Input.GetKey (largeSquareKey)))
				{
					currentKeycode=horizontalLineKey;
					//I had to set the currentKeycode to an arbitrary value.It wouldn't have one because I use two keys for it, but I need to use the Keycode.None value later.
					ChooseTarget(horizontalLines);
					Debug.Log(currentKeycode);
				}
			}
		}
	}

// Update is called once per frame
	void Update () 
	{
		CheckForPositionInput();

		if(currentTarget_array!=null)
		{
			if((ChangeWidth.changeInLength>0f)&&(pushPull_this!=PushPull.pulling))
			{
				pushPull_this=PushPull.pulling;
				SwitchPosition();
			}
			
			if((ChangeWidth.changeInLength<0f)&&(pushPull_this!=PushPull.pushing))
			{
				pushPull_this=PushPull.pushing;
			}
		}
		if ((targetReached)&&(wandering))
		{
			Wander();
		}
		
		if (target_transform!=null)
		{
			MoveToPosition();
		}
	}
}
 

 

Share this post


Link to post
Share on other sites

A couple days ago I had an idea for a game that needed a procedurally generated spaceship interior. Here is where I am with that:

 

And today I put up a video of the adventure game that I'm hoping to get funded.

 

Share this post


Link to post
Share on other sites

Allright, here's my Ludum Dare game: http://dinosaursssssss.itch.io/anti-matter edit: heres a version that im updating and bug fixing : http://maximum-extreme.com/antimatter/ It's a...I donno, tower defense tug-of-war I guess. I wanted the player to lose most of their planets, and have to win them all back. I'm mostly happy with how it came out, though it definitely needs some rebalancing. I had a good time making the music, even though it isn't that great I don't think...Bosca Ceoil is a really nifty little tool. I got the hang of using it, but I still don't really know how to make a fun tune. It also felt good to make my own models rather than mashing together primitives in unity or getting stuff off the asset store; my needs for this weren't that crazy, but I feel like I scoped well and I'm happy with the results. This is something I'd like to keep poking at, so if anyone has feedback I'd love to hear it. And heres a picture!

 

Hey, this game is totally cool. My feedback is pretty simple. I think it would be cool if I could purchase towers faster at the start. Also I felt like I got victory out of nowhere, a better way to see the status of the tug of war would be cool. I really like the feeling of tower defense in an open 3D space.

Share this post


Link to post
Share on other sites

God damnit Lacabra, that spaceship is friggin' excellent! Stop making cool things with UE4 making me want to try UE4.

Share this post


Link to post
Share on other sites

That spaceship does indeed look excellent, but what's with the default UE furniture lurking outside?

Share this post


Link to post
Share on other sites

Thanks ya'll. :)

I just took the Minimal_Default map, took away the sun, added the space and threw in my Ship blueprint, so the chairs and stuff remain. I was also using those meshes to test auto-furnishing the rooms though.

 

Here's a video of me putting together a ship:

 

Next I'll probably do doors opening by proximity, rooms of variable size (probably just the current rooms joined together), and multiple levels of rooms (this already works, just there's no way to move between floors. Alien style ceiling/floor hatches I reckon).

Share this post


Link to post
Share on other sites
Things I did today on the procedural space thing:

 

-big wide hallways:


15079191617_306d58b7bb_k.jpg

 

-doors now open and close for you:


 

-ship can be multistorey with hatches in floor/ceiling:



 

-rooms can be procedurally furnished

BxuO_MjCIAAzYYD.jpg

Share this post


Link to post
Share on other sites

This is amazing!

 

Is the light supposed to dramatically flash everytime you cross over to a new section of the ship?

Share this post


Link to post
Share on other sites

Not so much! What's happening is the light's only on in the room you're in at the time, like David walking around the ship near the start of Prometheus. In some of those vids though, it probably goes from no lights on at all to a light coming on, because when the game starts none of the lights are on until you walk from one room into another.

Share this post


Link to post
Share on other sites

Have you considered making a system for lighting whole rooms and corridors instead of individual sections? That would probably feel better unless you're going for space horror.

Share this post


Link to post
Share on other sites

Friend and I were thinking of names for a ghost game for 7dfps:

 

He Seemed Like a Ghoul Guy at the Time
Ghoul Spot
Don't Play Me for a Ghoul
Ghouls Were Made to be Broken

Ghouls Rules

Let's All Jump in the Ghoul

 

Then it became about setting traps/tools and using the environment:

 

the Right Ghoul for the Job

GhoulKit

Aresnal of Ghouls

Ghoulbelt

Share this post


Link to post
Share on other sites

Ghoul Spot. Ghoul Spot.

You have to use Ghoul Spot.

Ghoul Spot! How.. can it NOT be called Ghoul Spot?

:tup: :tup: :tup:

Share this post


Link to post
Share on other sites

Ghoulian Logic

The Fall of Ghoulius Caesar

Too Ghoul for School

Animal Ghoulty

 

So far Ghoul Spot is the best yeah.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now