Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 02 Nov 2012
Online Last Active Today, 05:54 AM

#5213486 "Reverse" frustum culling?

Posted by on 28 February 2015 - 07:47 AM

I think your problem is identical to voxelising the frustum shape, so perhaps you could direct your google searches in that direction.


It's not something I know anything about really. Maybe picking a point that you know is inside the frustum and then flood-filling the voxel grid would be an OK approach (I'm sure it's far from optimal though!).

#5212235 How do game engineers pack their data?

Posted by on 22 February 2015 - 03:36 AM

This is a nice article on prepping data offline ready for efficient loading: http://www.gamasutra.com/view/feature/132376/delicious_data_baking.php?page=1


Another thing to think about is whether you want to use a 'push' or a 'pull' approach to loading resources.


The pull approach is perhaps more natural, you have a bunch of resources set out into a logical (to a human) folder structure (possibly in some sort of zip-esque archive format), then your game code requests the assets it needs in some arbitrary order and they get loaded. Sometimes when you're loading a model, it might contain dependencies on some texture or sound, so you fire off loads for them too.


The problem with the pull approach is that you're seeking all over the place. Which is fine for solid state storage (SSD, cartridges, mobile) is OK for hard disk drives, but is a total nightmare for DVD/Blu-Ray, etc, as the seek costs can be huge.


The push model is an approach where you create a single file for a collection of stuff that will get loaded together. So if your game is level based and non-streaming, your tools might construct a single level file containing all the appropriate models, sounds and textures. The game code will request to load the level file, and the load process will push each of the resources it comes across into the right subsystem.


I guess with the current crop of platforms, and the fact that games stream so much dynamically, the push vs pull choice is less important, and it's always possible to make the pull model work OK by carefully laying out resources on the storage media, but I think the push approach is the better one if you're planning out a system from scratch.

#5212110 Non axis aligned collision detection

Posted by on 21 February 2015 - 08:54 AM

Generally, the fastest collision algorithms are for simple geometric shapes (spheres, ellipses, orientated bounding boxes, capsules, cylinders, etc), if you really need arbitrary geometry, then it's a lot faster to implement collision for convex hulls, finally and slowest, if necessary you might need to collide against polygon soup.


So, your question is pretty broad. You need to work out what you can get away with for your use case. You might conclude that your characters are well represented by capsules and your environment is a polygon soup, then you'll need some sort of hierarchical representation of your environment to collect relevant triangles, and you'd need to google triangle vs capsule collision detection to find out how that's done.


This is an excellent book that I'd thoroughly recommend: http://realtimecollisiondetection.net/books/rtcd/


But if you're just looking for a quick plug-in solution, then you need to at least work out what shapes you're going to collide.

#5211373 Hiding savedata to prevent save backup

Posted by on 18 February 2015 - 02:16 AM

I totally get where the OP is coming from. I've played FTL on PC and cheated occasionally to backup saves. Now I'm playing on iOS where it's harder to cheat - it's still totally possible, but there's enough friction in the way of cheating that I don't bother. The game is a very different experience because the stakes are much higher when permadeath can't be circumvented.


IMO, your option #3 is the best. By having a save file and a corresponding registry entry (with a timestamp or hash or something), it's still easy for someone to cheat/transfer the progress, but I think the extra step of having to modify the registry adds just enough friction to the cheating process that I think that large numbers of people wouldn't bother.

#5206741 Interesting implementation employees?

Posted by on 26 January 2015 - 01:56 PM

In a theme park management game (might have been 'Theme Park') there was a negotiation mini-game for agreeing wages/supplier prices where you gradually reach out to shake each others hands. Give too much and you pay over the odds, give too little and the deal breaks down entirely.


You could include something similar for your hiring process perhaps.


PS - It was Theme Park. See the 2nd screenshot on this page (or maybe it's the 4th screenshot really given it's from the DS): http://www.gamingsteve.com/blab/index.php?topic=7952.0)

#5206148 RakNet still alive?

Posted by on 23 January 2015 - 01:05 AM

Yeah, seems disappointingly quiet.


It is a pretty mature, well documented piece of software so I don't think you should reject it completely just because there's no active support/development, but it's probably something to factor into your decision making.


I'm using it in my game, but only for my local multiplayer. For internet multiplayer I was planning to go with Raknet (and have working code for it), but ended up going with gamecenter instead. Although that decision was mainly to avoid the burden of paying for and running matchmaking facilities.

#5203315 How unreliable is UDP?

Posted by on 10 January 2015 - 01:39 PM

On iOS, there's a developer feature which lets you simulate packet loss, etc. It has various presets for 3G, edge, WiFi, etc. One of them is called 'Very Bad Network' and has the following (grabbed from the full list of presets here: http://jeffreysambells.com/2012/09/22/network-link-conditioner):

  • In bandwidth: 1000 Kbps
  • In packet loss: 10%
  • In delay: 500 ms
  • Out bandwidth: 1000 Kbps
  • Out packet loss: 10%
  • Out delay: 500 ms

This is obviously not real life evidence of anything whatsoever, but someone at Apple thinks that a bad network has 10% packet loss. Two machines both on a bad connection would have 20% packet loss on their communication (well 19%, I suppose).


I think if you can deliver a reasonable networked game experience under that sort of packet loss, then you're doing fine.

#5201720 What does the apple change february 1:st mean in practise?

Posted by on 04 January 2015 - 06:41 AM

If you have a large old-ish codebase you could be looking at a significant amount of work supporting 64 bit, so don't expect it to be a tickbox. Plus you may have headaches if third party libraries you use don't work in 64-bit.


Regarding the iOS8 SDK mentioned in the OP. It's a bit confusing, but when Apple talk about you using the iOS 8 SDK, it means that you must compile with up to date xcode. You can still compile with the iOS8 SDK but make it target iOS6 as its base SDK, so you don't necessarily need to replace your iPod4 because of the iOS8 SDK requirement. However, you do need to replace it so you can test your 64-bit compatibility.

#5201625 Job titles

Posted by on 03 January 2015 - 04:37 PM

You could use 'additional programming' to describe the people who only did a little bit. 


I'd say that you could get away with calling yourselves senior programmers with 5-6 years. It is a little bit of a stretch but hardly a complete piss-take. After all, you could be technical directors, heads of programming, CTOs or lead programmers, so describing yourselves just as senior programmers is showing some restraint.

#5201559 Stencil Clear doesn't work

Posted by on 03 January 2015 - 11:21 AM

I believe that glStencilMask can affect glClear/glStencilClear operation.


Try adding glStencilMask(0xff) before your glClear call.

#5201397 Coding on Mac OSX

Posted by on 02 January 2015 - 04:29 PM

I believe you can create a free developer account at developer.apple.com and then download old versions of xcode through the website.


If you prefer Visual Studio, you could try something like Parallels and run windows on a virtual machine on your mac, and use Visual Studio Express for free which is generally sufficient for most games development purposes.

#5201151 [SOLVED] Detail mapping + Parallax = Texture Swimming?

Posted by on 01 January 2015 - 11:57 AM

I would have thought you'd need:


(UV0 + parallaxOffset) * Tile


Rather than


(UV0 * Tile) + parallaxOffset


(I've ignored the offset seeing as you said it's zero in both cases, and I'm not sure what it represents)

#5198081 Rendering an atmosphere

Posted by on 14 December 2014 - 01:32 AM

My approach for rendering the atmosphere is to take the mesh (in my case, it's a subdivided cube warped into a sphere shape), calculate the silhouette by comparing adjacent faces and findings edges where one face points toward the camera and one point faces away, then I extrude out geometry for the atmosphere.




It's a lot of work to be doing on the CPU, but it means I'm filling a lot less pixels when I draw the atmosphere, and the technique also works with the oddly shaped planets I have in my game:





I think phil_t's approach is more elegant though.

#5197226 Planetary Annihilation networking

Posted by on 09 December 2014 - 12:53 PM

1. They mention the server ticks at 10fps. Do they mean that network updates are sent 10 times per second, or do they mean the server simulation loop runs at 10fps (and the network update is coupled with it)?
Yes. The servers simulation loop (the server's frame rate) is 10hz and network updates are coupled with it. However, they go to some effort to make sure they don't send updates for any entities that haven't changed.
2. I think the concept of "curves" is pretty cool... when applied to positions for example, they only send *new* keyframes and avoid sending redundant data. However, after reading I wasn't sure if they generate new keyframes at 10fps too, or if they have a different rate for generating those. I know special events like collisions can also generate keyframes, but I didn't understand if keyframe creation was generally done on each iteration of the game loop.
They would create new keyframes at 10fps, sometimes more than one keyframe (as in the bouncing ball example), but for many (probably most) objects, there wouldn't be a new keyframe to generate. Any object standing still sends no keyframes.
3. How does a client smoothly go from one position to the next? The server generates keyframes, but by the time the client receives them, they're old. Let's say the last packet on the client was generated by the server at t = 0.5 and received at t = 0.6. When the client's game loop runs, t = 0.67. How does the client compute the position at 0.67? Is it just extrapolating using the line equation (where the "true" line segment is from t = 0.4 to t = 0.5)?
The situation where t=0.67 when the latest receipt from the server is t=0.5 shouldn't happen in the general case. The client will try to keep itself at the server time + the average latency + a bit extra. Most of the time you're playing you will be interpolating toward the latest receipt from the server. Occasionally with a network hiccup you might accidentally catchup and overtake, I don't know what they do in that case. Probably they allow a little bit of running ahead with extrapolation, but if you end up too far ahead the time on the client probably slows then stops so you're not seeing too much made up stuff.
This also answers questions 4, 5, and 6, I think.
@Conk - From the article, it sounds like a pretty different approach to Supreme Commander. It isn't lockstepped at all, it's completely server-client in its approach
PS - Good article, thanks for sharing it gfxgangsta

#5196833 How is a game engine made?

Posted by on 07 December 2014 - 02:12 PM

If you want a good introduction on the topic, you could do worse than read Game Engine Architecture by Jason Gregory