All Activity

This stream auto-updates     

  1. Past hour
  2. One other suggestion I have is to make sure that you use a sync interval of 0 when performing GPU profiling. When VSYNC is enabled, the driver will always wait until the next sync interval (every 16.6ms for a 60Hz monitor) before presenting the next buffer in the swap chain. Because of this, the GPU will typically have to stall so that it can wait until a swap chain buffer is finished being used for presenting, and can therefore be re-used as a render target. This still can show up in your timestamp queries, which will give you misleading results. You may be able to avoid capturing that stall in your timings by excluding the first draw or copy operation that touches the back buffer, but it's easier to just disable VSYNC.
  3. Tips on Building Portfolio

    It's fine to use an engine like Unreal, or Game Maker. You could consider creating a mod as well. Do you know what you want to specialize in? Now is the time to pick a discipline and become an expert to be able to compete for industry jobs.
  4. I'm Very Confused About Career Directions...

    I would hold off on graduate school. The game industry is super competitive if you are looking to start a career in games its best to pick a specialty. If you are interested in art you could also consider a career as a Tech Artist or Tech Animator.
  5. Hi everybody! I wanted to take a minute and let people know that I recently wrote a book about how to get a job in the game industry and what life is like for professional game developers. Its full of super helpful information for anyone who wants to have a successful career working in video games. It's called 'How to Score a Video Game Career.' If you are interested you can check it out here: Thanks! Mike
  6. Ship boarding in a pirate game?

    Anything is possible with pirates, there was one real-life incident where a pirate captured a ship just to steal the hats of the crew because he thought it was funny. I'm not making that up, that really happened. Real pirates always wanted to keep a ship they thought was a good one, which generally meant a fast one. If they weren't interested in the ship, they would usually just take the cargo and allow the crew to leave with their now mostly empty ship. Most real pirates during the "golden age" of piracy were veterans of the 7 Years War who, after the war, decided that they would rather use their skills learned during the war to live free and independently as a pirate than return home to live under the rule of a king. Most pirates were not the ruthless killers that most believe they were. If they kept a ship it was because it was a good one, and they had enough men to man it. So you might make only half the ships worth keeping, and that will solve half of your issue;-)
  7. Today
  8. You might find an old copy of Front Page Sports: Football, made by Sierra in the mid-1990s. That game had playbooks and coaching profiles. The playbook allowed you to establish which plays your team used, and the coaching profile (which was very extensive), allowed you to essentially create your own AI for how the plays would be called. We played it online, in coach mode, but sometimes when two players wouldn't be able to arrange to actually play that week they would just send in playbooks and coaching profiles and allow the AI to resolve their game for them.
  9. Video Game Writing Preferences?

    The important thing is that when something really great pops into your head, that you write it down somewhere... anywhere... to put into your primary documentation later. Having worked on the same universe for over 20 years now, it has become a part of my life to drop whatever I am doing, wherever I am, to write any good ideas down that come too me. No matter where I am, and what I am doing. I learned that lesson the hard way many, many years ago after having thought of things during the day that I thought were really important and then not being able to remember them later that night when I got home. I call this "percolating". A primary document has to exist so that it can "percolate" over time. Little by little, it builds up into something great over time by all the little details that get added in this way. The more of it that exists, the more there is to inspire such ideas to begin with. So you want always want to keep the main document as complete as possible. Until you write it down, you are still thinking about it. Once it's written down you can move on to thinking about other aspects of it, and the depth of it all just keeps "percolating" over time. Eventually you get to the point that you are working out the types of minor little details that other stories just don't have because they were written "all at once" and that person didn't have time to contemplate the minor details, or realize relationships between existing elements of the story that weren't immediately obvious when you first wrote it. Most people probably don't have 20 years to let their story "percolate", but even over a period of 6 months to a year this would still wind up adding a lot, or changing a lot for the better that otherwise would never have changed. And this process never ends until it is published.
  10. DX12 Android Online Game Bot !?!Help!?!

    Even if the Android game is ran through an emulator on windows? Btw, Thank you. At least someone who can help me instead of complaining about my "Low-Level Effort" in my post. All I'm trying to do is get started.
  11. DX12 Android Online Game Bot !?!Help!?!

    Not for Android, no. DLL Injection is strictly for Windows programs. I don't know how feasible it is for you, but you can probably get the APK off your device using adb (not sure about this). APK files are just zip files, so extract it. Then it will depend on how the program was written. If it's C++, you'll have to get good reading assembly. If it's Java, you can use a Java decompiler on it. If it's C# then you can use a C# decompiler on it. I do this at work to analyze the APKs we create before we publish them to make sure we're not wasting space on anything stupid. After that, it's pretty much up to you to figure out how to find what you want to automate and put it back together into a working APK. I've never done that. It's also unlikely that a decompiler will give you something that you can actually compile again. You also will not be able to sign the APK using the original signature, but you will probably be able to sign it yourself as long as nothing bothers to validate the signature. If that fails, your next option (if it's a properly constructed client/server game) is to intercept the network traffic and automate the request/responses using a standalone program that you create from scratch. This will only work if the game and server are not using SSL in a way that prevents proxy interception (and I know from experience that a lot of games do not bother).
  12. Video Game Writing Preferences?

    I've used Twine, it's pretty good I just find myself getting lost in my own writing with all of the dialogue branches.
  13. Video Game Writing Preferences?

    I always have a notebook nearby that I write notes in, but if I wait more than a few hours to type it over into a word doc I can't read my own handwriting. My formal training was in screenwriting. My first script ever was on a word processer where I had to set all my own margins and spacing. Then I got my first copy of Final Draft in 1997 and haven't used anything else, except for one project where I used Celtx because it has a nice two-column script template. Since I've been trying to get into games, all I've worked on so far is RPG quests and I was writing those with Twine until one of the programmers on the project built us a custom tool. I have a customized template in Final Draft that I use for comic scripts, and I think I'm going to use that for a narrative heavy project game I'm about to start on.
  14. Persuasive Games

    Yes I do and that is why I played it to the end to see the effect. All it did was ruin what could have been a good game. The way to explain it: It is like telling someone that killing is wrong, then you go and kill one of there family members to make a point. The game started so good. With the character selection and art style I was expecting a much better game. The first scene could have been used to see what the player thinks is OK for a government to do. Then instead of linking to a web page it could have added events later to the game, that show the bad side of the sides the player doesn't agree with. The packing scene could have been much better with more realistic designs. Clothes are heavy and so are most important items. limiting the player to weight and then later making them use the items they packed, would have made them consider things more. The 2 item limit was just dumb. The escape scene that makes you choose between family, friend and neighbours was silly. The player was under the impression that they where escaping alone, now there is these people they don't know but should care for because of some kind of classification. Studies show that when a person is forced to choose people to sacrifice, most people would select them self. There is so much more in the game that just breaks the game play, but mostly it's the player choices not mattering.
  15. Hi, New here. I need some help. My fiance and I like to play this mobile game online that goes by real time. Her and I are always working but when we have free time we like to play this game. We don't always got time throughout the day to Queue Buildings, troops, Upgrades....etc.... I was told to look into DLL Injection and OpenGL/DirectX Hooking. Is this true? Is this what I need to learn? How do I read the Android files, or modify the files, or get the in-game tags/variables for the game I want? Any assistance on this would be most appreciated. I been everywhere and seems no one knows or is to lazy to help me out. It would be nice to have assistance for once. I don't know what I need to learn. So links of topics I need to learn within the comment section would be SOOOOO.....Helpful. Anything to just get me started. Thanks, Dejay Hextrix
  16. Which is better? (2d, android)

    The second one again. if you want to change the look of the spheres I have a little quick trick for you, click on the spoiler if you want to see it: Good question why did you start with color theory and not a fundamental of art? Please don't start with this! Unless you plan on diving into the deep end of art and learning the frustrating way. Learning monochromic first, before moving to color theory is a better idea. Before that shape and form should be well known and before that silhouettes. Basics on lights and reflections also helps with color theory. Reasons color theory doesn't always work: I am not saying color theory is bad. I am saying that it's a bad place to start. Please don't go around the web spreading color theory like it is some kind of magic way of making things look good. On the other hand if people wish to research color theory here is a good tool: Learning this way will be harder but worth more in the end. @zarloo you have the critical mindset needed for art. However not everyone wants to be a artist, forcing art principles on someone will only frustrate them. Hope to see more of you around, the forum could do with more artists.
  17. Football Dash now on iOS (1 million downloads)

    That's sweet! I've only used construct 2 for a short amount of time but it is a pretty cool program for sure! I can imagine all the work for one person, are team consists of two people which is still pretty small. But overall your game is really cool and judging by the downloads it looks like it was a hit on the play store!
  18. To receive from a TCP stream, you need to always have a read request outstanding. Inside the completion callback, you should put the data you received into an incoming buffer, and queue another receive request. Note that data will come in "chunks" that may have no relation to how it was sent -- TCP is not a packet based protocol, and reading from a TCP stream is a bit like reading from a file that returns some random number of the next bytes from the file each time you read some. Thus, you need to continually look at the head of your received buffer, and see if there's a full packet in there, and if so, decode and remove that packet from the buffer. Typically, you will prefix each (binary( packet by the length (number of bytes) in the packet, or you will terminate each (text) packet with a special character sequence, like \r\n. The fact that you immediately call await kind-of eliminates the benefit of the asynchronous TCP, though. The whole point is that, each time through your main loop, you will "read whatever is there" and append to the end of your incoming buffer, then you will decode any whole packets found at the head of the buffer. If you instead dedicate a thread to reading, you can read in blocking fashion, and then do the same decoding, although you then have the problem of sending the ready packets across threads to be correctly processed by your game logic.
  19. This is definitely good. I'd be interested in music/sound effects that provide suspenseful/horror themes.
  20. I have a very simple vertex/pixel shader for rendering a bunch of instances with a very simple lighting model. When testing, I noticed that the instances were becoming dimmer as the world transform scaling was increasing. I determined that this was due to the fact that the the value of float3 normal = mul(input.Normal, WorldInverseTranspose); was shrinking with the increased scaling of the world transform, but the unit portion of it appeared to be correct. To address this, I had to add normal = normalize(normal);. I do not, for the life of me, understand why. The WorldInverseTranspose contains all of the components of the world transform (SetValueTranspose(Matrix.Invert(world * modelTransforms[mesh.ParentBone.Index]))) and the calculation appears to be correct as is. Why is the value requiring normalization? under); ); float4 CalculatePositionInWorldViewProjection(float4 position, matrix world, matrix view, matrix projection) { float4 worldPosition = mul(position, world); float4 viewPosition = mul(worldPosition, view); return mul(viewPosition, projection); } VertexShaderOutput VS(VertexShaderInput input) { VertexShaderOutput output; matrix instanceWorldTransform = mul(World, transpose(input.InstanceTransform)); output.Position = CalculatePositionInWorldViewProjection(input.Position, instanceWorldTransform, View, Projection); float3 normal = mul(input.Normal, WorldInverseTranspose); normal = normalize(normal); float lightIntensity = -dot(normal, DiffuseLightDirection); output.Color = float4(saturate(DiffuseColor * DiffuseIntensity).xyz * lightIntensity, 1.0f); output.TextureCoordinate = SpriteSheetBoundsToTextureCoordinate(input.TextureCoordinate, input.SpriteSheetBounds); return output; } float4 PS(VertexShaderOutput input) : SV_Target { return Texture.Sample(Sampler, input.TextureCoordinate) * input.Color; }
  21. Well, if you're serious about joining this project, don't wait long to tell me. I'm already vetting a couple of people and I only really need one other technical co-founder.
  22. DX11 Using GPU Profiling to find bottlenecks

    No problem, Infinisearch. I used the information from the posts above to write my own GPU profiler using the links provided by MJP. I wrote two classes. The class GPUInterval is an interval you are interested in, e.g. the time that is used to render a scene. The class GPUProfiler is a container for a set of GPUIntervals and does all calculations. namespace Engine.Game.Profiler { public class GPUInterval { private readonly SharpDX.Direct3D11.Device _device; private readonly SharpDX.Direct3D11.DeviceContext _deviceContext; private SharpDX.Direct3D11.Query _startQuery; private SharpDX.Direct3D11.Query _endQuery; public string Name { get; private set; } public double Duration { get; private set; } public GPUInterval(SharpDX.Direct3D11.Device device, SharpDX.Direct3D11.DeviceContext deviceContext, string name) { _device = device; _deviceContext = deviceContext; Name = name; // Create timestamp query. _startQuery = new SharpDX.Direct3D11.Query(_device, new SharpDX.Direct3D11.QueryDescription() { Type = SharpDX.Direct3D11.QueryType.Timestamp, Flags = SharpDX.Direct3D11.QueryFlags.None }); _endQuery = new SharpDX.Direct3D11.Query(_device, new SharpDX.Direct3D11.QueryDescription() { Type = SharpDX.Direct3D11.QueryType.Timestamp, Flags = SharpDX.Direct3D11.QueryFlags.None }); } public void Start() { _deviceContext.End(_startQuery); } public void Stop() { _deviceContext.End(_endQuery); } public void Calculate(long frequency) { long startTime; while (!_deviceContext.GetData(_startQuery, out startTime)) System.Threading.Thread.Sleep(1); long endTime; while (!_deviceContext.GetData(_endQuery, out endTime)) System.Threading.Thread.Sleep(1); Duration = ((endTime - startTime) * 1000.0) / frequency; } } } namespace Engine.Game.Profiler { public class GPUProfiler { private readonly SharpDX.Direct3D11.Device _device; private readonly SharpDX.Direct3D11.DeviceContext _deviceContext; private SharpDX.Direct3D11.Query _disjointQuery; public List<GPUInterval> Intervals { get; private set; } public GPUProfiler(SharpDX.Direct3D11.Device device, SharpDX.Direct3D11.DeviceContext deviceContext) { _device = device; _deviceContext = deviceContext; // Create disjoint query. _disjointQuery = new SharpDX.Direct3D11.Query(_device, new SharpDX.Direct3D11.QueryDescription() { Type = SharpDX.Direct3D11.QueryType.TimestampDisjoint, Flags = SharpDX.Direct3D11.QueryFlags.None }); // Create intervals list Intervals = new List<GPUInterval>(); } public void StartFrame() { _deviceContext.Begin(_disjointQuery); } public void EndFrame() { _deviceContext.End(_disjointQuery); // Retrieve frequency. SharpDX.Direct3D11.QueryDataTimestampDisjoint queryDataTimestampDisjoint; while (!_deviceContext.GetData(_disjointQuery, out queryDataTimestampDisjoint)) System.Threading.Thread.Sleep(1); // Calculate the duration of all intervals. if (!queryDataTimestampDisjoint.Disjoint) { foreach (var interval in Intervals) interval.Calculate(queryDataTimestampDisjoint.Frequency); } } } } I created four GPUIntervals to check the same regions I mentioned in my initial post: The entire render function Rendering the scene (drawing models, setting constant shaders, ...) Rendering UI Calling SwapChain.Present Here are the numbers for a random frame while the game is idling: Entire render function = 16.35 ms Render scene = 15.00 ms Render UI = 0.26 ms SwapChain.Present = 1.08 ms These numbers are no big surprise, because the render scene does all the work. However, it is interesting that rendering the UI (which has A LOT of elements) and presenting the Swap Chain is fine. Tomorrow, I will investigate the different parts of my scene rendering. I will keep you updated!
  23. good info, this is exactly the info/opinions that I am looking for in my study. This is the expert knowledge/opinions that I need, are you sure you do not wish to participate in my study?
  24. Screenshots 2016

  25. DX11 Using GPU Profiling to find bottlenecks

    Yeah sorry about that, I didn't really read your post I was more interested in the responses. So I just assumed... again my mistake, sorry.
  26. disable email notification

    Thanks... it seems that I didn't scroll down.
  27. These two settings under your Profile menu -> Account Settings -> Notification Settings should do the trick. Scroll down to see individual controls for notifications and emails.
  1. Load more activity