scidave's Forum Posts

  • Interesting thread....

    I think what Arima was saying was that you "can't compete with Blizzard or any other big game company on scale". You could and many others have made a game than many would consider more fun or interesting than any big game developer. None of those games are considered great because they were massively multiplayer or had tons and tons of hours of varied gameplay though.

    I saw go for your big game and see what happens. However, the advice about starting small and doing prototypes is particularly good advice with Construct because of chance of certain bugs creeping in. Read about "Phenomenon 32" for one developer's experience.

  • Bump!

    I was reading some articles the other day and ran across this game (that I probably put a good 30+ hours into last year). It really gives me a deep appreciation for all the work/pain you went through to make this game a reality.

    If people haven't played it, it is definitely worth a look. Probably the largest most complex Construct game released to date. Just remember to back up your save files in case something goes bonkers! Great game...and I wasn't paid for this advertisement..

    http://www.jonas-kyratzes.net/games/phenomenon-32/

  • I just checked this out and looked through their programming examples.

    Very, very cool idea and is based off of Blitxmax supposedly. You do have to be able to program as all of the game making is in code and it takes quite a bit of code to make a simple game. For example: here is pong:

    Strict
    
    Import mojo
    
    Global SCREEN_WIDTH%
    Global SCREEN_HEIGHT%
    Global dt:DeltaTimer
    Global app:MyApp
    
    Function Main:Void()
    	app = New MyApp()
    End Function
    
    Class MyApp Extends App
    	Field ball:Sprite
    	Field playerBat:Sprite
    	Field cpuBat:Sprite
    	Field backgroundImg:Image
    	Global FPS:Int = 60
    		
    	Method OnCreate:Void()
    		' Store the device width and height
    		SCREEN_WIDTH = DeviceWidth()
    		SCREEN_HEIGHT = DeviceHeight()
    
    		Seed = Millisecs()
    		dt = New DeltaTimer (60)
    		
    		' Load the image
    		backgroundImg = LoadImage("bg.jpg")
    		
    		' Create the ball
    		ball = New Sprite(LoadImage("ball.png", 1, Image.MidHandle), SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
    		ball.dx = RndMin(-5,5,2)
    		ball.dy = RndMin(-5,5,2)
    				
    		' Create the player
    		playerBat = New Sprite(LoadImage("bat.png", 1, Image.MidHandle), 30, SCREEN_HEIGHT / 2)
    		playerBat.setRGB(255,0,0)
    		playerBat.speedY = 1
    		playerBat.maxYSpeed = 7
    		
    		' Create the AI
    		cpuBat = New Sprite(LoadImage("bat.png", 1, Image.MidHandle), SCREEN_WIDTH - 30, SCREEN_HEIGHT / 2)
    		cpuBat.setRGB(0,0,255)
    		cpuBat.speedY = 0.2
    		cpuBat.maxYSpeed = 5
    		cpuBat.scaleX = -1
    		
    		' 60 FPS please
    		SetUpdateRate FPS
    	End Method
    	
    	Method OnRender:Void()
    		DrawImage backgroundImg, 0, 0
    		playerBat.draw()
    		cpuBat.draw()
    		ball.draw()
    		drawGUI()
    	End Method
    	
    	Method drawGUI:Void()
    		DrawText self.playerBat.score, SCREEN_WIDTH / 4, SCREEN_HEIGHT - 50
    		DrawText self.cpuBat.score, SCREEN_WIDTH - SCREEN_WIDTH / 4, SCREEN_HEIGHT - 50
    	End
    	
    	Method OnUpdate:Void()
    		dt.UpdateDelta
    		controls()
    		ai()
    		ballUpdate()
    		collisions()
    	End Method
    	
    	Method collisions:Void()
    		if rectsOverlap(ball.x - ball.w2, ball.y - ball.h2, ball.w, ball.h, playerBat.x - playerBat.w2, playerBat.y - playerBat.h2, playerBat.w, playerBat.h)
    			ball.dx = Abs(ball.dx)+0.5 * dt.delta
    		End
    		if rectsOverlap(ball.x - ball.w2, ball.y - ball.h2, ball.w, ball.h, cpuBat.x - cpuBat.w2, cpuBat.y - cpuBat.h2, cpuBat.w, cpuBat.h)
    			ball.dx = -(Abs(ball.dx)+0.5 * dt.delta)
    		End
    	End
    	
    	Method ballUpdate:Void()
    		ball.move()
    		if ball.x < 0
    			self.cpuBat.score+=1
    			resetBall()
    		End
    		if ball.x > SCREEN_WIDTH
    			self.playerBat.score+=1
    			resetBall()
    		End
    		if ball.y < 0 or ball.y > SCREEN_HEIGHT
    			ball.dy = -ball.dy
    		End
    		
    		ball.rotation-=ball.dx * dt.delta
    	End
    	
    	Method resetBall:Void()
    		ball.x = SCREEN_WIDTH / 2
    		ball.y = SCREEN_HEIGHT / 2
    		ball.dx = RndMin(-5,5,2)
    		ball.dy = RndMin(-5,5,2)
    	End
    	
    	Method controls:Void()
    		If KeyDown(KEY_UP)
    			playerBat.dy-=playerBat.speedY
    			if playerBat.dy<-playerBat.maxYSpeed then playerBat.dy = -playerBat.maxYSpeed
    		else If KeyDown(KEY_DOWN)
    			playerBat.dy+=playerBat.speedY
    			if playerBat.dy>playerBat.maxYSpeed then playerBat.dy = playerBat.maxYSpeed
    		else
    			playerBat.dy*=0.95 ' friction to slow it down
    		End
    		
    		if playerBat.y < 0
    			playerBat.y = 0
    			playerBat.dy = 0
    		End
    		if playerBat.y > SCREEN_HEIGHT
    			playerBat.y = SCREEN_HEIGHT
    			playerBat.dy = 0
    		End		
    		playerBat.move()
    		
    	End
    	
    	Method ai:Void()
    		if ball.dx > 0 then
    			if ball.y < cpuBat.y
    				cpuBat.dy-=cpuBat.speedY
    				if cpuBat.dy<-cpuBat.maxYSpeed then cpuBat.dy = -cpuBat.maxYSpeed
    			End
    			if ball.y > cpuBat.y
    				cpuBat.dy+=cpuBat.speedY
    				if cpuBat.dy>cpuBat.maxYSpeed then cpuBat.dy = cpuBat.maxYSpeed
    			End
    		else
    			cpuBat.dy*=0.95 ' friction to slow it down
    		end if
    		if cpuBat.y < 0
    			cpuBat.y = 0
    			cpuBat.dy = 0
    		End
    		if cpuBat.y > SCREEN_HEIGHT
    			cpuBat.y = SCREEN_HEIGHT
    			cpuBat.dy = 0
    		End		
    		cpuBat.move()
    	End
    	
    End Class
    
    Class Sprite
    	Field x#,y#
    	Field dx#, dy#
    	Field speedX#, speedY#
    	Field maxXSpeed#, maxYSpeed#
    	Field image:Image
    	field scaleX# = 1, scaleY# = 1
    	field rotation#
    	field red%, green%, blue%
    	field w%, h%
    	field w2%, h2%
    	field score%
    	
    	Method New(img:Image,x#, y#)
    		self.image = img
    		self.x = x
    		self.y = y
    		self.w = img.Width()
    		self.h = img.Height()
    		self.w2 = self.w/2
    		self.h2 = self.h/2
    	End
    	
    	Method setRGB:Void(r%,g%,b%)
    		self.red = r
    		self.green = g
    		self.blue = b
    	End
    	
    	Method move:Void()
    		self.x+=self.dx * dt.delta
    		self.y+=self.dy * dt.delta
    	End
    	
    	Method draw:Void()
    		SetColor red, green, blue ' doesnt work with images!?!??!
    		DrawImage(image, x, y, rotation, scaleX, scaleY)
    		SetColor 255, 255, 255
    	End
    End
    
    Function rectsOverlap:Int(x0:Float, y0:Float, w0:Float, h0:Float, x2:Float, y2:Float, w2:Float, h2:Float)
    	If x0 > (x2 + w2) Or (x0 + w0) < x2 Then Return False
    	If y0 > (y2 + h2) Or (y0 + h0) < y2 Then Return False
    	Return True
    End Function
    
    Function RndMin:Float(min#,max#,minAmount#)
    	local rv# = Rnd(min, max)
    
    	While Abs(rv) < minAmount
    		rv = Rnd(-min,max)
    	Wend
    	return rv
    End
    
    Class DeltaTimer
    	
    	Field targetfps:Float = 60
    	Field currentticks:Float
    	Field lastticks:Float
    	Field frametime:Float
    	Field delta:Float
    	
    	Method New (fps:Float)
    		targetfps = fps
    		lastticks = Millisecs()
    	End
    	
    	Method UpdateDelta:Void()
    		currentticks = Millisecs()
    		frametime = currentticks - lastticks
    		delta = frametime / (1000.0 / targetfps)
    		lastticks = currentticks
    	End
    	
    End
    
    [/code:176ym61k]
    
    Still, I was very impressed by the claims.  Will be an interesting project to watch!
  • Is pyc. to .exe including broken?

    It shouldn't be, but I haven't tested with the latest build. If Rojo did it then it should work.

    How can I figure out which pyc. and pyd. files I need if I gonna use other pygame modules? (py2exe and cx_freeze generates too many files)

    This is a tricky one. If your program doesn't use much Python then you may be able to not include any other .pyc and just include the .pyd module that relates... For example, if you use ctypes then you would include _ctypes.pyd. The reason why I listed checking all of the .pyc files is that if you have a complex program it requires lots of dependencies and it is easier to have a slightly larger .exe than to manually fix all of the dependencies (i.e.get an error, check another .pyc, build and then resolve next error). For .pyd one way to solve that is to just remove them one by one until you get an error. That is what I usually do...takes a few minutes but you only have to do it once.

    What Rojo did with the "py" directory is he included what you need to get Pygame working (much better than me I might say). So if you use his approach, you don't need to bother with my library_pygame.zip or pygame_modules.zip. Of course, if you add new Python or Pygame functionality then you should use cxfreeze to match ROjos method. Whatever stuff that cxfeeze says you need you should bundle that into a py.zip file like what Rojo did. You may get a few extra files, but it shouldn't be too many.

    ROjo are you using a different method?

  • Try this first:

    http://www.box.net/shared/kcoxzzt7bz

    Unzip everything in the "library" sub directory under library_pygame.zip into your Construct/Python folder. Then go ahead and re-export your .cap file and click all of the embedded .pyc files.

    Then in your directory where you have exported the .cap file copy everything from the pygame_modules.zip file into the same directory as the .exe.

    If that doesn't solve it then, I'll go ahead and work up an example....but as far as a .cap goes it would be a basic .cap with the library_pygame.zip file.

  • I really liked the smoothness of the graphics. Felt really professional. I wanted more game...would be cool to expand this into locations to travel to and planets/new enemys.

  • You can't ever fully know if someone is passively monitoring network traffic. However, you could modify the chat client/server to support encryption. That way people monitoring would see that something is happening, but they wouldn't know what you are saying.

  • Hopefully there is really nice documentation on writing C++ plugins then. That was one thing that was missing in 0.x. I was able to kinda figure stuff out from simple plugins, but a good API or document would be much better!

  • Try these two references and then let us know if you still have problems...

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • I'm concerned about this as well. One of the big draws to me of Construct 0.x was that you could use Python to add extra functionality without writing a plugin with C++. It would be nice to standardize on one scripting language (Python, Lua, etc) that could be used across all of the different platforms. Maybe not necessarily to make only plugins, but for other functionality as well.

  • I don't know what to do with the python26.dll file. I've read that I have to copy it somewhere in this thread: viewtopic.php?f=3&t=6193

    Bit I don't know where I have to copy it to..

    You should copy it into the same directory that your game .exe is in. What type of error are you getting? What version of Construct are you using?

  • I like this new model. Although I'm still attached to Python and will continue to mess around with 0.x I'd like to see Construct 2 succeed so will look forward to being an early adopter. I think people get too hung up on if the project will still be around 5 years from now. I know we have probably all spent more money on less worthy projects/events.

  • I think Lucid is on to something with just about everything he said... I REALLY like the idea of paying for extra plugins, etc. Great way to keep income coming in and interest in the project.

    Kinda like the old salesman tactic. Once you get somebody to buy, then you offer them just a little more for a few bucks, and then a little more... and before they know it they have paid double what they would have originally spent. Not that you are trying to trick anybody, but it is a logically way to keep revenue coming for those interested in the project as well as get the baseline money for those that want to just buy it once without nags/ads, etc.

    Edit: Second what toralord said...their ideas sound ALOT better than what was orginally proposed.

  • I think "subscription" is a bad name..has negative sound to it. I think pay $40 (or whatever you decide) for the product + two years of upgrades sounds a whole lot better. At the end of the two years if you choose to use the old product and not buy again then that is on you. You OWN it.

    The HTML5 market is going to get VERY competitive in the next couple of years though..so to be successful I really hope you have plans to do an .exe exporter soon. I will definitely buy it though!!

    Having programmed quite a bit myself I'm appalled as well at anybody who would think that because somebody likes to program they should do it for free. People pay more for a fancy night out on the town than the cost of this software. They either are so young they don't have to take care of themselves or are delusional. People got to it eat.....

    p.s. As far as the development model goes, I can see how having lots of minor upgrades would continue to encourage everybody to "subscribe" vs buy it once (unlike GM where everything is stable and solid before they release). So you do have an advantage there. I think I would be reluctant to pay 150+ for a lifetime license not knowing what would happen 6-7 years down the road though. Although allowing you to put existing money towards a longterm indie license isn't bad.

    Neo1000 You seem to think that it is bad to be successful and make money off of a project. Although, I personally doubt 40K folks are going to jump right on this myself with it in Alpha...if they did I would be happy for Ashley.

  • Just create a global variable called "playerName". On the start screen, have an input box that requests the player type in their name name and you store that string in the global variable. Then in any action that requires the player's name you reference the global.

    I don't have Construct on this computer so can't post a .cap.