Jump to content

  • Log In with Google      Sign In   
  • Create Account


monachus

Member Since 08 Dec 2007
Offline Last Active Sep 24 2013 02:30 AM
-----

Topics I've Started

The Lean Design

01 June 2012 - 02:29 AM

Have you read The Lean Startup, or heard of it?
If you haven't, it is collection of simple concepts: Launch a minimium version of your product, learn from consumer behaviour and modify or produce more. Iterate indefinitely. The Lean Startup is a fad, but there are lessons to be learned from it and I think that game design can benefit from them.

I'm working on my first indie game and the idea is still not completely defined. I am working on the minimum possible version 1.0.
I am doing this because it is fun but I also want to make money. I believe that if the process of designing my game follows these principles I will have a better chance of success and end up with a better game.

An (exceptional, but still...) example I like to think about is Minecraft. It was developed in an open fashion with continuous feedback from it's exploding community; very similar to the 'lean startup' ideas on how things should be done.

I don't think this design strategy could work for all games. And I don't presume that it leads to minecraft-level success; but I think that it may work for certain games, especially in the mobile space like in my case. It is certainly better than working on something for a year or more only to find out that people don't like your idea and they don't want to play your game.

I just wanted to share these thoughts and read your opinions. =)

pyCave, a 3D tunnel game.

08 March 2009 - 12:44 PM

Hi! I just wanted to show off the first beta version of my game: pyCave. It is a clone of SFCave, an old game for the palm pilot. Other similar games are the 'Helicopter Game', or Jetman (on facebook). I tried to keep it close to the original. The game is finished in the sense that it is playable and fun, but there is still some work to be done. I want to add more effects and make a decent ship with an actual texture. It is written entirely in Python and I implemented shadow maps for eye-candy. If you are on Windows, you don't need python to play it, everything you need is enclosed in the zip (which by the way is a little heavy at 16MB.. sorry about that) Screenshot: Windows version Linux version PyCave's site Please check it out! I hope you like it; Let me know what you think =) (Edit: I changed the links to a newer version that fixes a compatibility issue with the Zip file, and reduces the size.) [Edited by - monachus on March 9, 2009 12:43:34 AM]

Music on an arcade game

21 July 2008 - 06:23 PM

(This question isn't about composition or anything related to the creation of sound, I thought Game Deign was a better category for it. The moderator can move it if they think otherwise) I am finishing an arcade game (SFCave/Jetman clone) and my brother is composing some music for it that will be great for the menus. Now I'm faced with the decision of adding the music to the game itself. I know how annoying the background music on arcade games can be. Lately when I play simple games downloaded from the Internet, I tend to just mute the sound. The music my brother is writing is an upbeat techno track, the kind that I would find very annoying. What is the best background music for an arcade game? Would it be better to leave the actual game without music and just add some sound effects? Do I leave the techno music with a low volume? Do I tell my brother to write another (more mellow) track for the game? Just write your opinions on arcade game music so I know what the general views are :). It may be that it's just me and everyone else loves loud techno music for arcade games.. Thanks!

OBJ loader problems

20 January 2008 - 08:11 PM

I have some problems when importing models into OpenGL using my own obj loader. The vertices are perfect but the normals and the texture coordinates are doing strange things.

Here is the rendered model:


and here is a screenshot of the imported model:


I don't know what is it that i'm doing wrong. As you can see, the lighting is not completely wrong, but some vertices are brighter or darker than they should be. The texture seems to look better as the resolution of the model goes up. When it is a cube, instead of a jagged smiley face you get two black stripes.

I've gone over and over the code and I can't find the issue.
Here is my obj loader (It uses my own tga loader, which I know it works.) It is all written in Python:

(edit: i didn't use the source tag)
from OpenGL.GL import *
from tga import *

#Each member is and index to vertex, normal and texture arrays.
class ArrayIndex:
	def __init__(self):
		self.vert = 0
		self.texcoord = 0
		self.normal = 0
		
class Vertex:
	def __init__(self,x,y,z):
		self.x = x
		self.y = y
		self.z = z
class TexCoord:
	def __init__(self,u,v):
		self.u = u
		self.v = v

class Mesh:
	def __init__(self,texName,objFile,texFile):
		
		self.numTriangles = 0
		self.has_texcoords = True
		
		self.texName = texName
		
		self.vertArray = []
		self.textArray = []
		self.normArray = []
		
		self.index = []
		self.readObjFile(objFile)
		if texFile != 'none':
			self.loadTexture(texFile)
		self.createDisplayList()	


	#This function returns numbers found in lines of .obj files
	#line to iterate, i is the character from where to start
	#returns the number and the place where it ended. -1 if the line finished
	def iterateLine(self,line,i):
		num = ''
		while True:
			if line[i] == '\n':
				i = -1
				break
			
			if line[i] == ' ':
				i += 1
				break
			else:
				num += line[i]
				i += 1
		
		
		return (float(num),i)
		
	
	def readObjFile(self,fname):
		
		num_vertices = 0
		num_texCoords = 0
		num_norms = 0
		file = open(fname,'rt',)
		print 'MESH: Reading file' , fname , '...'
		lines = file.readlines()
		file.close()
		
		#Indices start at 1. 42 is our magic number at [0]
		self.vertArray.append(42)
		self.normArray.append(42)
		self.textArray.append(42)
		#self.index.append(42)
		
		for line in lines:
			#Found a vertex
			if line[0] == 'v' and line[1] == ' ':
				
				#Res: Tuple: a) Value of x y or z coordinate
				#	b) Index of next value (or -1)
				res = (0.0, 2)
				vert = Vertex(0,0,0)
				
				for i in xrange(3):
					res = self.iterateLine(line,res[1])
					#self.vertArray.append(res[0])
					if i == 0:
						vert.x = res[0]
					if i == 1:
						vert.y = res[0]
					if i == 2:
						vert.z = res[0]
						num_vertices += 1
						self.vertArray.append(vert)
						
			if line[0] == 'v' and line[1] == 't':
				res = (0.0, 3)
				tex = TexCoord(0,0)
				
				for i in xrange(2):
					res = self.iterateLine(line, res[1])
					if i == 0:
						tex.u = res[0]
					if i == 1:
						tex.v = res[0]
						num_texCoords += 1
						self.textArray.append(tex)
			#Found a normal
			if line[0] == 'v' and line[1] == 'n':
				res = (0.0, 3)
				norm = Vertex(0,0,0)
				
				for i in xrange(3):
					res = self.iterateLine(line, res[1])
					if i == 0:
						norm.x = res[0]
					if i == 1:
						norm.y = res[0]
					if i == 2:
						norm.z = res[0]
						num_norms += 1
						self.normArray.append(norm) 
				
			#Found a face
			if line[0] == 'f' and line[1] == ' ':
				self.numTriangles += 1
				num = ''
				indexType = 'vert'
				#vertex, texcoord, normal
				v = t = n = 0
				i = 2
				
				#This loop reads the line
				while True:
					#A space means we have the 3 indices
					if line[i] == ' ':
						n = int(num)
						
						tmp = ArrayIndex()
						tmp.vert = v
						tmp.texcoord = t
						tmp.normal = n
						
						self.index.append(tmp)
						num = ''
						v = t = n = 0
						i += 1
						indexType = 'vert'
					
					#A new line means we have 3 indices and no more within the line
					if line [i] == '\n':
						
						n = int(num)
						
						tmp = ArrayIndex()
						tmp.vert = v
						tmp.texcoord = t
						tmp.normal = n
						self.index.append(tmp)
						
						break
					
					#We've got an index for a vertex, texCoord or Normal. Reset the number
					if line[i] == '/':
						if indexType == 'text' and self.has_texcoords == True:
							if num != '':
								t = int(num)
							else:
								self.has_texcoords = False
							#indexType = 'norm'
						if indexType == 'vert':
							if num != '':
								v = int(num)
							else:
								print 'objLoader: ERROR. No vertex information.'
								return
							indexType = 'text'
						num = ''
						
						i += 1
						
					#We're in the middle of a number, add the digit.
					else:
						num += line[i]
						i += 1
				
					
					
					
		print 'MESH: Loaded ', num_vertices, 'vertices,',num_texCoords,'texture coordinates and', num_norms, 'normals.'			
		print 'Model has', self.numTriangles ,'Triangles'			
				
		
	def loadTexture(self,fname):
		self.texture = TgaTexture(fname)
		self.texture.newGLTexture(self.texName)
		
	def createDisplayList(self):
		print "MESH: Creating display list..."
		self.list = glGenLists(1)
		glNewList(self.list,GL_COMPILE)
		
		glBegin(GL_TRIANGLES)
		for i in xrange(self.numTriangles * 3):
			
			index = self.index[i]
			vIndex = index.vert
			nIndex = index.normal
			tIndex = index.texcoord
			
			vert = self.vertArray[vIndex]
			norm = self.normArray[nIndex]
			tex = self.textArray[tIndex]
			
			glVertex(vert.x, vert.y, vert.z)
			glTexCoord2f(tex.u,tex.v)
			glNormal(norm.x,norm.y,norm.z)
			
		glEnd()
		glEndList()
		print 'Done.'
			
	def drawGeometry(self):
		glEnable(GL_TEXTURE_2D)
		glBindTexture(GL_TEXTURE_2D,self.texName)
		glCallList(self.list)
		glDisable(GL_TEXTURE_2D)
		
	def freeList(self):
		glDeleteLists(self.list,1)



Hope you can help =) Thank you

[Edited by - monachus on February 6, 2008 9:11:58 PM]

PARTNERS