Jump to content
  • Advertisement

Search the Community

Showing results for tags 'Optimization'.

The search index is currently processing. Current results may not be complete.


More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Community
    • GameDev Challenges
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Topical
    • Virtual and Augmented Reality
    • News
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical
  • GameDev Challenges's Topics
  • For Beginners's Forum

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Product Groups

  • GDNet+
  • Advertisements
  • GameDev Gear

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Website


Role


Twitter


Github


Twitch


Steam

Found 57 results

  1. Awoken

    More Adventures in Robust Coding

    Hello GameDev, This entry is going to be a big one for me, and it's going to cover a lot. What I plan to cover on my recent development journey is the following: 1 - Goal of this Blog entry. 2 - Lessons learned using Node.js for development and testing as opposed to Chrome console. 3 - Linear Path algorithm for any surface. 4 - Dynamic Path Finding using Nodes for any surface, incorporating user created, dynamic assets. 5 - short term goals for the game. -- - -- - -- - -- - -- - -- - Goal of this Blog entry - -- - -- - -- - -- - -- - -- My goal for this adventure is to create a dynamic path-finding algorithm so that: - any AI that is to be moved will be able to compute the shortest path from any two points on the surface of the globe. - the AI will navigate around bodies of water, vegetation, dynamic user assets such as buildings and walls. - will compute path in less then 250 milliseconds. There are a few restrictions the AI will have to follow, in the image above you can see land masses that are cut off from one another via rivers and bodies of water are uniquely colored. If an AI is on a land mass of one color, for now, it will only be able to move to a location on the same colored land mass. However; there are some land masses that take up around 50% of the globe and have very intricate river systems. So the intended goal is be able to have an AI be on one end of the larger land mass and find the shortest path to the opposite end within 250 milliseconds. Currently my path finding algorithm can find the shortest path in anywhere from 10 ms and up, and when I say up, I mean upwards of 30 seconds, and that's because of the way I built the algorithm, which is in the process of being optimised. -- - -- - -- - -- - -- - -- - Lessons learned using Node.js for development and testing - -- - -- - -- - -- - -- - -- As of this writing I am using Node.js to test the efficiency of my algorithms. This has slowed down my development. I am not a programmer by trade, I've taught myself the bulk-work of what I know, and I often spend my time re-inventing the wheel and learning things the hard way. Last year I made the decision to move my project over to Node.js for continued development, eventually it all had to be ported over to Node.js anyways. In hind sight I would have done things differently. I would have continued to use Chrome console for testing and development, small scale, then after the code was proven to be robust would I then port it over to Node.js. If there is one lesson I'd like to pass on to aspiring and new programmers, it's this, use a language and development environment that allows you, the programmer, to jump into the code while it's running and follow each iteration, line by line, of code as it's be executed, basically debugging. It is so easy to catch errors in logic that way. Right now I'm throwing darts at a dart board, guesses what I should be sending to the console for feedback to help me learn more about logical errors using Node.js, see learning the hard way. -- - -- - -- - -- - -- - -- - Linear Path algorithm for any surface. - -- - -- - -- - -- - -- - -- In the blog entry above I go into detail explaining how I create a world. The important thing to take away from it is that every face of the world has information about all surrounding faces sharing vertices pairs. In addition, all vertices have information regarding those faces that use it for their draw order, and all vertices have information regarding all vertices that are adjacent to them. An example vertices and face object would look like the following: Vertices[ 566 ] = { ID: 566, x: -9.101827364, y: 6.112948791, z: 0.192387718, connectedFaceIDs: [ 90 , 93 , 94 , 1014 , 1015 , 1016 ], // clockwise order adjacentVertices: [ 64 , 65 , 567 , 568 , 299 , 298 ] // clockwise order } Face[ 0 ] = { ID: 0, a: 0, b: 14150, c: 14149, sharedEdgeVertices: [ { a:14150 , b: 14149 } , { a:0 , b: 14150 } , { a:14149 , b:0 } ], // named 'cv' in previous blog post sharedEdgeFaceIDs: [ 1 , 645 , 646 ], // named 's' in previous blog post drawOrder: [ 1 , 0 , 2 ], // named 'l' in previous blog post } Turns out the algorithm is speedy for generating shapes of large sizes. My buddy who is a Solutions Architect told me I'm a one trick pony, HA! Anyways, this algorithm comes in handy because now if I want to identify a linear path along all faces of a surface, marked as a white line in the picture above, you can reduce the number of faces to be tested, during raycasting, to the number of faces the path travels across * 2. To illustrate, imagine taking a triangular pizza slice which is made of two faces, back to back. the tip of the pizza slice is touching the center of the shape you want to find a linear path along, the two outer points of the slice are protruding out from the surface of the shape some distance so as to entirely clear the shape. When I select my starting and ending points for the linear path I also retrieve the face information those points fall on, respectively. Then I raycaste between the sharedEdgeVertices, targeting the pizza slice. If say a hit happens along the sharedEdgeVertices[ 2 ], then I know the next face to test for the subsequent raycaste is face ID 646, I also know that since the pizza slice comes in at sharedEdgeVertice[ 2 ], that is it's most likely going out at sharedEdgeVertices[ 1 ] or [ 0 ]. If not [ 1 ] then I know it's 99% likely going to be [ 0 ] and visa-versa. Being able to identify a linear path along any surface was the subject of my first Adventure in Robust Coding. Of course there are exceptions that need to be accounted for. Such as, when the pizza slice straddles the edge of a face, or when the pizza slice exits a face at a vertices. Sometimes though when I'm dealing with distances along the surface of a given shape where the pizza slice needs to be made up of more than one set of back to back faces, another problem can arise: I learned about the limitations of floating point numbers too, or at least that's what it appear to be to me. I'm sure most of you are familiar with some variation of the infinite chocolate bar puzzle So with floating point numbers I learned that you can have two faces share two vertices along one edge, raycaste at a point that is directly between the edges of two connecting faces, and occasionally, the raycaste will miss hitting either of the two faces. I attribute this in large part because floating point numbers only capture an approximation of a point, not the exact point. Much like in the infinite chocolate bar puzzle there exists a tiny gap along the slice equal in size to the removed piece, like wise, that tiny gap sometimes causes a miss for the raycaste. If someone else understands this better please correct me. -- - -- - -- - -- - -- - -- - Dynamic Path Finding using Nodes for any surface - -- - -- - -- - -- - -- - -- Now that I've got the linear path algorithm working in tip top shape, I use it in conjunction with Nodes to create the pathfinding algorithm. Firstly I identify the locations for all nodes. I do this using a Class I created called Orientation Vector, I mention them in the blog post above. When they're created, they have a position vector, a pointTo vector, and an axis vector. The beauty of this class is that I can merge them, which averages their position, pointTo, and axis vectors, and it allows me to rotate them along any axis, and it allows me to move them any distance along the axis of their pointTo vector. To create shoreline collision geometry, and node collision geometry, illustrated above, and node locations along shorelines, illustrated below, I utilise the Orientation Vector Class. Firstly, the water table for the world is set to an arbitrary value, right now it's 1.08, so if a vector for a given face falls below the table and one or two vertors are above the table then I know the face is a shoreline face. Then I use simple Math to determine at what two points the face meets the water and create two OVectors, each pointing at each-other. Then I rotate them along their y axis 90 and -90 degrees respectively so that they are now facing inland. Since each face, which are shoreline faces, touch one another, there will be duplicate OVectors a each point along the shore. However, each Ovector will have a pointTo vector relative to it's sister Ovector during creation. I merge the paired Ovectors at each point along the shore, this averages their position, pointTo and axis. I then move them inland a small distance. The result is the blue arrows above. The blue arrows are the locations of three of the thousands of nodes created for a given world. Each Node has information about the shoreline collision geometry, the node collision geometry ( the geometry connecting nodes ), and the Node to its left and the Node to its right. Each face of collision geometry is given a Node ID to refer to. So to create the path-finding algorithm. I first identify the linear path between the starting and ending points. I then test each segment of the linear path for collision geometry. If I get a hit, I retrieve the Node ID. This gives me the location for the Node associated for a given face of collision geometry. I then travel left and right along connecting Nodes checking to see if a new Linear path to the end point is possible, if no immediate collision geometry is encountered, the process continues and is repeated as needed. Subsequently, a list of points is established, marking the beginning, encountered Nodes and end of the line of travel. The List is then trimmed by testing linear paths between every third point, if a valid path is found, the middle point is spliced. Then all possible paths that have been trimmed are calculated for distance. the shortest one wins. Below is the code for the algorithm I currently use. its my first attempt at using classes to create an algorithm. Previously I just relied on elaborate arrays. I plan on improving the the process mentioned above by keeping track of distance as each path spreads out from it's starting location. Only the path which is shortest in distance will go through its next iteration. With this method, once a path to the end is found, I can bet it will be shortest, so I won't need to compute all possible paths like I am now. The challenge I've been facing for the past two months is sometimes the Nodes end up in the water, The picture above shows a shoreline where the distance the OVectors travel would place them in the water. Once a node is in the water, it allows the AI to move to it, then there is no shoreline collision geometry for it to encounter, which would keep it on land, and so the AI just walks into the ocean. Big Booo! I've been writing variations of the same function to correct the location of the geometry shown below in Red and Yellow below. But what a long process. I've rewritten this function time and time again. I want it to be, well as the title of this Blog states, Robust, but it's slow going. As of today's date, it's not Robust, and the optimised path-finding algorithm hasn't been written either. I'll be posting updates in this blog entry as I make progress towards my goal. I'll also make mention what I achieve for shortest, long time for pathfinding. Hopefully it'll be below 250 ms. -- - -- - -- - -- - -- - -- - short term goals for the game - -- - -- - -- - -- - -- - -- Badly... SO BADLY I want to be focusing on game content, that's all I've been thinking about. Argh, But this all has to get wrapped up before I can. I got ahead of myself, I'm guilty of being too eager. But there is no sense building game content on top of an engine which is prone to errors. My immediate goals for the engine are as follows: // TO DO's // // Dec 26th 2017 // /* * << IN PROGRESS >> -update path node geometry so no errors occur * -improve path finding alg with new technique * -improve client AI display -only one geometry for high detail, and one for tetrahedron. * -create ability to select many AI at the same time by drawing a rectangle by holding mouse button. * -create animation server to recieve a path and process animation, and test out in client with updates. * -re-write geometry merging function so that the client vertices and faces have a connected Target ID * -incorporate dynamic asset functionality into client. * -create a farm and begin writing AI. * -program model clusters * -sychronize server and client AI. Test how many AI and how quickly AI can be updated. Determine rough estimate of number of players the server can support. * */ see the third last one! That's the one, oh what a special day that'll be. I've created a Project page, please check it out. It gives my best description to date of what the game is going to be about. Originally I was going to name it 'Seed', a family member made the logo I use as my avatar and came up with the name back in 2014. The project is no longer going to be called Seed, it's instead going to be called Unirule. [ edit: 02/02/18 Some new screen shots to show off. All the new models were created by Brandross. There are now three earth materials, clay, stone and marble. There are also many types of animals and more tree types. ] Thanks for reading and if you've got anything to comment on I welcome it all. Awoken
  2. MiniAlfa

    Horrible soundtrack

    I am now making an soundtrack for my game, but halfway i realized me it was horrible. Can somebody please give me some tips to improve it Ps: i have used Bosca Ceoil to make it. Pss: I'm not english, so don't get upset about my english 1.wav
  3. GRASBOCK WindyOrange

    #2 New System Works

    I finally got the new system working. I have never made that many mistakes in an algorithm at once, which explains why it took so long for me to post an update. Anyway. Now I can run more than 10000 Humans at once (however only random walking). The World has multiple Noisemaps overlapping each other generating a much more interesting terrain. The System allows for efficient pathfinding to be implemented. Now I will be able to do much more actual content. UI, Pathfinding and developing the systems which drive the simulation will be a big task. The 3 pictures show you the world at different states of expansion. The red dots being the humans, that explore the world and thus generate the new chunks when necessary. In case you have seen the pictures from my last entry and are wondering where the grass went. Sorry about that. It will come back eventually.
  4. I have spirtes that will be turned into animation images for the game actors. What would be the best way to change the weapon / armor for each actor? IE walking with sword swinging sword then when he equips axe walking with axe swinging axe ECT. Same for armor? Have sheets with the weapons and armor and then overlay them on to the base spirte when the user changes the weapon or have premade sheets with all of the various combos of armor / weapons that the solider can have and then just grab the ones needed for the current selection. I'm thinking the first option is better, but are there any other better ways?
  5. When I use the proptimizer tool in 3ds max and than export the file as a .fbx file, the file size seems to be bigger than the .fbx file that hasn't used the pro optimiser tool. This has confused me as I thought reducing the polygons would decrease the file size. I believe the problem comes down to having the mesh as an editable poly and than adding the modifier tool. So I have several meshes in a 3ds max scene. The meshes need to be combined into one. I do this by turning the meshes into editable polygons. After I turn each mesh into and editable polygon I'll add a modifier to each mesh.This modifier tool would be ProOptimizer or multi res. I'll than reduce the polygon count of each mesh. Once I have done that I use the attach option from the editable poly to combine the meshes into one. The issue is that once I click on edit poly after adding the modifier tool (prooptimzer or multi res) a message appears stating "Modifier depends on topology" and when I wish to continue by pressing yes the polygon count goes back up thus, the file size hasn't been reduced.1. 3ds max scene with multiple meshes2. change each mesh to an editable poly3. Add modifier tool to each mesh4. Modifier tool would be ProOptimizer or multi res5. reduce poly count of each mesh by using modifier tool stated in step 4.6. Use attach feature from edit poly to combine all meshes into one7. Upon selecting "edit poly" message appears on screen stating "modifier depends on topology"8. When yes is selected polygon count goes back up and as a result the file size has't been reduced.I am now looking into how to first reduce the poly count of each mesh and than combining them into one without the problem of the poly count going back up. Any support would much appreciated.
  6. It's for a 2D game, but the question is broader... Let's say I want to have some object (eg. a projectile) interact with some other object (eg. a button) so the projectile thrown by the player can trigger the button. I know there could be several ways of doing this, like the brute force o(n^2) method, the 'optimized' method using a QuadTree or spatial hash... But i thought about another method, and was wondering if it's a good idea or not : It consist of iterating two times over the active game object list: - the first looks for projectile objects, storing their pointers into some array - the second looks for button objects, checking if collision occurs with one of the projectiles in the array Other specific collisions checks could be done with this method, but that would need multiple pointer lists. Do you know how old games (like thoses on Genesis, we're talking about 8Mhz cpus...) achieved that ? Should I just implement some spatial hashing and checking all the collisions inside the restrained area, avoiding storing pointer lists ? My levels would have about 1000 objects, i'm not that much concerned about performance since I know how to optimize, but more on finding an elegant/simple way of doing this. I'd like keeping the code small and maintainable.
  7. How to unpack the frame buffer when packing by Compact YCoCg Frame Buffer?
  8. I'm making an small 2D engine using Kha and I have a timer class, which basically simply either waits a certain amount of time to call a function, or repeatedly calls a certain function after every x seconds. I simply want to know if I should have timers run on different threads. I'm aware that makes sense, but I might use many timers in a game for example, would that still be okay? Also I'm currently writing an animation components, which waits every x seconds to draw another image using the timer class. And in a normal 2D games, I would have many objects with animations on them, other than the other timers. So I just wanted to ask people who have more experience and knowledge than I have what I should do for timers: Either leave them on the same main thread, or make them run on different threads. Thanks in advance.
  9. I have been doing research into optimising 3d models in 3ds max. There seems to be so many different ways to optimise 3d models. I am unsure which method is the best and have been trying different tools such as the pro optimizer tool in 3ds max. Does anyone know the best way to optimise 3d models in 3ds max? I am trying to reduce the file size whilst maintain a high quality model. So produce a low polygon model which looks like a high polygon model.
  10. I've been doing some research on delta compression (used and described in the Quake3 doc http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking,), and I'm looking for some clarifications on that topic please if possible. I understand that the delta compressed state is the difference between any given world states, meaning that if we store the state of every entity in a world state at every tick, the difference would be only the states of entities that changed between these two world states. Now when sending back the delta state to the client, do we go as far as only mentioning the properties that changed? Let's say a character moved only on X axis but didn't move on the Y axis between two states, are we sending to the client the whole state (x, and y) or only the new x position? If that's the case and let's assume there are a few more properties that describes a character, how can the client identify which properties have actually changed when rebuilding the information from binary data.
  11. Hi, I am looking for a TCP or HTTP networking library similar to Lidgren (UDP). This is primarily for sending game map data and potentially other large messages from Server to Client. I do want to keep Lidgren for my chat messages, player position, small fast updates etc. I especially love the flow of data and the library usage in general, so any libraries of a similar style would be excellent. Preferably something open source, free and reliable. I also must be able to swap between localhost and an ip address with ease, like Lidgren, as I run a server for singleplayer/mp/lan. My game maps are similar to minecraft, but it is 2d and only one Z-level, so i'm sending a jagged array of Tile object data (currently only enum TileID.Grass) down the pipe to the Client. Problem is if i'm sending a large map 1024 x 1024 tiles down the to client that's quite a lot of data, and Lidgren is relatively slow to build the writes (before the message is even sent!). It is fine when i'm using smaller maps < 512 x 512 ( xTiles * yTiles ). I know about chunking and will look into implementing this later, whilst taking into account the user's position in the world to only send nearby chunks. An example of my code that can be slow: private void WriteWorld(NetOutgoingMessage outgoing) { try { var world = WorldManager.Instance.CurrentWorld; outgoing.Write(world.XTiles); outgoing.Write(world.YTiles); for (int x = 0; x < world.XTiles; x++) { for (int y = 0; y < world.YTiles; y++) { // Write Tile obj data outgoing.Write((int)world.Tiles[x][y]); // <-------- Slow here when xTiles and yTiles are each > 512 ! } } } catch (Exception ex) { // log send error } } I'd love to hear from you guys, especially if any of you have come across a similar challenge.
  12. So I have hundreds of moving objects that need to check there speed. One of the reasons they need to check there speed is so they don't accelerate into oblivion, as more and more force is added to each object. At first I was just using the Unity vector3.magnitude. However this is actually very slow; when used hundreds of times. Next I tried the dot-product check: vector3.dot(this.transform.foward, ShipBody.velocity) The performance boost was fantastic. However this only measures speed in the forward direction. Resulting in bouncing objects accelerating way past the allowed limit. I am hoping someone else knows a good way for me to check the speed with accuracy, that is fast on the CPU. Or just any magnitude calculations that I can test when I get home later. What if I used vector3.dot(ShipBody.velocity.normalized, ShipBody.velocity)? How slow is it to normalize a vector, compared to asking it's magnitude?
  13. Hello, I am trying to make a GeometryUtil class that has methods to draw point,line ,polygon etc. I am trying to make a method to draw circle. There are many ways to draw a circle. I have found two ways, The one way: public static void drawBresenhamCircle(PolygonSpriteBatch batch, int centerX, int centerY, int radius, ColorRGBA color) { int x = 0, y = radius; int d = 3 - 2 * radius; while (y >= x) { drawCirclePoints(batch, centerX, centerY, x, y, color); if (d <= 0) { d = d + 4 * x + 6; } else { y--; d = d + 4 * (x - y) + 10; } x++; //drawCirclePoints(batch,centerX,centerY,x,y,color); } } private static void drawCirclePoints(PolygonSpriteBatch batch, int centerX, int centerY, int x, int y, ColorRGBA color) { drawPoint(batch, centerX + x, centerY + y, color); drawPoint(batch, centerX - x, centerY + y, color); drawPoint(batch, centerX + x, centerY - y, color); drawPoint(batch, centerX - x, centerY - y, color); drawPoint(batch, centerX + y, centerY + x, color); drawPoint(batch, centerX - y, centerY + x, color); drawPoint(batch, centerX + y, centerY - x, color); drawPoint(batch, centerX - y, centerY - x, color); } The other way: public static void drawCircle(PolygonSpriteBatch target, Vector2 center, float radius, int lineWidth, int segments, int tintColorR, int tintColorG, int tintColorB, int tintColorA) { Vector2[] vertices = new Vector2[segments]; double increment = Math.PI * 2.0 / segments; double theta = 0.0; for (int i = 0; i < segments; i++) { vertices[i] = new Vector2((float) Math.cos(theta) * radius + center.x, (float) Math.sin(theta) * radius + center.y); theta += increment; } drawPolygon(target, vertices, lineWidth, segments, tintColorR, tintColorG, tintColorB, tintColorA); } In the render loop: polygonSpriteBatch.begin(); Bitmap.drawBresenhamCircle(polygonSpriteBatch,500,300,200,ColorRGBA.Blue); Bitmap.drawCircle(polygonSpriteBatch,new Vector2(500,300),200,5,50,255,0,0,255); polygonSpriteBatch.end(); I am trying to choose one of them. So I thought that I should go with the one that does not involve heavy calculations and is efficient and faster. It is said that the use of floating point numbers , trigonometric operations etc. slows down things a bit. What do you think would be the best method to use? When I compared the code by observing the time taken by the flow from start of the method to the end, it shows that the second one is faster. (I think I am doing something wrong here ). Please help! Thank you.
  14. Hi, I am trying to implement a custom texture atlas creator tool in C++, need suggestion regarding any opensource fast API or library for image import and export? Also this tool will compress the final output atlas image into multiple formats like DXT5, PVRTC and ETC based on user input, what should be the best way to implement this? Thanks
  15. Hi guys, There are many ways to do light culling in tile-based shading. I've been playing with this idea for a while, and just want to throw it out there. Because tile frustums are general small compared to light radius, I tried using cone test to reduce false positives introduced by commonly used sphere-frustum test. On top of that, I use distance to camera rather than depth for near/far test (aka. sliced by spheres). This method can be naturally extended to clustered light culling as well. The following image shows the general ideas Performance-wise I get around 15% improvement over sphere-frustum test. You can also see how a single light performs as the following: from left to right (1) standard rendering of a point light; then tiles passed the test of (2) sphere-frustum test; (3) cone test; (4) spherical-sliced cone test I put the details in my blog post (https://lxjk.github.io/2018/03/25/Improve-Tile-based-Light-Culling-with-Spherical-sliced-Cone.html), GLSL source code included! Eric
  16. Hi Forum, in terms of rendering a tiled game level, lets say the level is 3840x2208 pixels using 16x16 tiles. which method is recommended; method 1- draw the whole level, store it in a texture-object, and only render whats in view, each frame. method 2- on each frame, loop trough all tiles, and only draw and render it to the window if its in view. are both of these methods valid? is there other ways? i know method 1 is memory intensive but method 2 is processing heavy. thanks in advance
  17. Hi there. I am really sorry to post this, but I would like to clarify the delta compression method. I've read Quake 3 Networking Model: http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking, but still have some question. First of all, I am using LiteNetLib as networking library, it works pretty well with Google.Protobuf serialization. But then I've faced with an issue when the server pushes a lot of data, let's say 10 players, and server pushes 250kb/s of data with 30hz tickrate, so I realized that I have to compress it, let's say with delta compression. As I understood, the client and server both use unreliable channel. LiteNetLib meta file says that unreliable packet can be dropped, or duplicated; while sequenced channel says that packet can be dropped but never duplicated, so I think I have to use the sequenced channel for Delta compression? And do I have to use reliable channel for acknowledgment, or I can just go with sequenced, and send the StateId with a snapshot and not separately? Thank you.
  18. Welcome back colony managers, here comes a set of awesome new features improving your space colonization systems. This month we spent a lot of time into pimping the user interface of the game into it's 4th evolution and making it 4k ready by the way. With the remediation center a very important infrastructure building made it into this release and also the logistic center got a workover enabling you to fully automate repairing and cleaning processes. And there's more... TL;DR New user interface Remediation center & carbon sequestration Logistic center is now maintenance station Desertification threat and temple power Solar park and wind farm alignement Mountain variations Fixes & improvements New User Interface The existing user interface clearly did not meet the demands of our colony & planet simulation. It was very clumsy and reminiscent of a casual mobile phone game. So we rebuilt it, using the smaller and much clearer Roboto font for all text elements, while keeping our futuristic fonts for headers and elements that need highlighting. The new interface now has become much easier to read while taking less screen space and thisway giving even more focus to the planet itself. [gallery columns="2" ids="6249,6248,6254,6255"] If you are using a relatively small screen with a high resolution you can still zoom the interface up to 150% in the options. A side effect of our work is that the new user interface has a higher resolution and thus is ready for your 4K display. Remediation Center & Carbon Sequestration The new building remediation center comes with an additional worker drone and uses this drone to automatically start the clean up process for nearby fields. An powerful upgrade for the center is carbon sequestration - the technical separation and storage of CO2 emissions from surrounding buildings and power plants. Thanks to underground compression, the exhaust gases do not enter the atmosphere. The second ugrade for this building is "Advanced Remediation Process" it halves the cost of soil clean up in the area. Logistic Center is now Maintenance Station The logistic center is now called "Maintenance station" and automatically repairs nearby damaged buildings by default. It's upgrades are the fire station and "Advanced Repair Process", which halves the cost of repair processes in the area. Desertification Threat and Temple Power In the course of global warming there will be new deserts emerging next to others. Thereby the infertile wasteland is growing. The only way to prevent this is to plant forests onto desert fields so it can't spread. Trees will effectively stop the process of desertification. In the illuminati temple you can use gaian energy to create a field of desert anywhere around the world. Except on fields with forests on them. Solar Panels and Wind Farms They are aligning to the sun and the wind direction now. Mountain Variations Each mountain has two versions now to bring more variety into the game's look. These two versions are now put to the three edges of big mountains as well to make it easier to see whether a field is blocked by mountains. Fixes & Improvements Fixed animation problems: we had some seriously strange problems with sub models and animations. Mystery finally concluded! Ships and oilplatforms no longer visible under water, while being built. City expansion now also needs drones. Show diplomatic relation progress as ring (full ring reaches next diplomatic level) Fixed orientation angle of volcanoes and huge mountains on small planets Sandbox category for mushroom forests As always we wish you a good fun and hope you let us know if anything comes to your mind about the new features! Jens & Martin
  19. Hello! As far as I understand, the traditional approach to the architecture of a game with different states or "screens" (such as a menu screen, a screen where you fly your ship in space, another screen where you walk around on the surface of a planet etc.) is to make some sort of FSM with virtual update/render methods in the state classes, which in turn are called in the game loop; something similar to this: struct State { virtual void update()=0; virtual void render()=0; virtual ~State() {} }; struct MenuState:State { void update() override { /*...*/ } void render() override { /*...*/ } }; struct FreeSpaceState:State { void update() override { /*...*/ } void render() override { /*...*/ } }; struct PlanetSurfaceState:State { void update() override { /*...*/ } void render() override { /*...*/ } }; MenuState menu; FreeSpaceState freespace; PlanetSurfaceState planet; State * states[] = {&menu, &freespace, &planet}; int currentState = 0; void loop() { while (!exiting) { /* Handle input, time etc. here */ states[currentState]->update(); states[currentState]->render(); } } int main() { loop(); } My problem here is that if the state changes only rarely, like every couple of minutes, then the very same update/render method will be called several times for that time period, about 100 times per second in case of a 100FPS game. This seems a bit to make dynamic dispatch, which has some performance penalty, pointless. Of course, one may argue that a couple hundred virtual function calls per second is nothing for even a not so modern computer, and especially nothing compared to the complexity of the render/update function in a real life scenario. But I am not quite sure. Anyway, I might have become a bit too paranoid about virtual functions, so I wanted to somehow "move out" the virtual function calls from the game loop, so that the only time a virtual function is called is when the game enters a new state. This is what I had in mind: template<class TState> void loop(TState * state) { while (!exiting && !stateChanged) { /* Handle input, time etc. here */ state->update(); state->render(); } } struct State { /* No update or render function declared here! */ virtual void run()=0; virtual ~State() {} }; struct MenuState:State { void update() { /*...*/ } void render() { /*...*/ } void run() override { loop<MenuState>(this); } }; struct FreeSpaceState:State { void update() { /*...*/ } void render() { /*...*/ } void run() override { loop<FreeSpaceState>(this); } }; struct PlanetSurfaceState:State { void update() { /*...*/ } void render() { /*...*/ } void run() override { loop<PlanetSurfaceState>(this); } }; MenuState menu; FreeSpaceState freespace; PlanetSurfaceState planet; State * states[] = {&menu, &freespace, &planet}; void run() { while (!exiting) { stateChanged = false; states[currentState]->run(); /* Runs until next state change */ } } int main() { run(); } The game loop is basically the same as the one before, except that it now exits in case of a state change as well, and the containing loop() function has become a function template. Instead of loop() being called directly by main(), it is now called by the run() method of the concrete state subclasses, each instantiating the function template with the appropriate type. The loop runs until the state changes, in which case the run() method shall be called again for the new state. This is the task of the global run() function, called by main(). There are two negative consequences. First, it has become slightly more complicated and harder to maintain than the one above; but only SLIGHTLY, as far as I can tell based on this simple example. Second, code for the game loop will be duplicated for each concrete state; but it should not be a big problem as a game loop in a real game should not be much more complicated than in this example. My question: Is this a good idea at all? Does anybody else do anything like this, either in a scenario like this, or for completely different purposes? Any feedback is appreciated!
  20. Hello, I want to optimize the used memory in my game so that it supports low end devices - for instance iPhone 4s. I know that some of the main things I should look into are memory leaks, big textures and some game specific things, which occupy a lot of memory. To detect all that I am using MTuner on Windows and Instruments (Allocations) on XCode. What are you generally looking for when optimizing memory? What instruments are you using? My target platform is iOS.
  21. 【DirectX9 Get shader bytecode】 I hook DrawIndexedPrimitive HookCode(PPointer(g_DeviceBaseAddr + $148)^,@NewDrawIndexedPrimitive, @OldDrawIndexedPrimitive); function NewDrawIndexedPrimitive(const Device:IDirect3DDevice9;_Type: TD3DPrimitiveType; BaseVertexIndex: Integer; MinVertexIndex, NumVertices, startIndex, primCount: LongWord): HResult; stdcall; var ppShader: IDirect3DVertexShader9; _Code:Pointer; _CodeLen:Cardinal; begin Device.GetVertexShader(ppShader);//<------1.Get ShaderObject(ppShader) ppShader.GetFunction(nil,_CodeLen); GetMem(_Code,_CodeLen); ppShader.GetFunction(_Code,_CodeLen);//<----2.Get bytecode from ShaderObject(ppShader) Result:=OldDrawIndexedPrimitive(Self,_Type,BaseVertexIndex,MinVertexIndex, NumVertices, startIndex, primCount); end; 【How to DirectX11 Get VSShader bytecode?】 I hook DrawIndexed pDrawIndexed:=PPointer(PUINT_PTR(UINT_PTR(g_ImmContext)+0)^ + 12 * SizeOf(Pointer))^; HookCode(pDrawIndexed,@NewDrawIndexed,@OldDrawIndexed); procedure NewDrawIndexed(g_Real_ImmContext:ID3D11DeviceContext;IndexCount: UINT;StartIndexLocation: UINT;BaseVertexLocation: Integer); stdcall; var game_pVertexShader: ID3D11VertexShader; ppClassInstances: ID3D11ClassInstance; NumClassInstances: UINT begin g_Real_ImmContext.VSGetShader(game_pVertexShader,ppClassInstances,NumClassInstances); //<------1.Get ShaderObject(game_pVertexShader) .....//<----【2.Here's how to get bytecode from ShaderObject(game_pVertexShader)?】 OldDrawIndexed(ImmContext, IndexCount, StartIndexLocation, BaseVertexLocation); end; Another way: HOOK CreateVertexShader() but HOOK need to be created before the game CreateVertexShader, HOOK will not get bytecode if the game is running later,I need to get bytecode at any time like DirectX9
  22. Once I needed a program for packing an atlas with 3d models. I could not find one, so I made it. Now it has only basic functionality. Should I improve it further? Does it need someone else? Link to download(for Windows): https://drive.google.com/open?id=1CLizcUAOsYnbdfyKCYDcGxmso79GPBuv
  23. Which ASO Tools are Right for Your Game? When I started doing app store optimization (ASO) for my games, I was so overwhelmed by the numerous ASO tools available in the market… App Annie, Mobile Action, Meatti, Sensor Tower, App Radar, Priori Data, ASOdesk, Searchman, TheTool, Keyword Tool, AppKeywords.net, Apptentive, Appbot, AppFollow, Apptopia, APPlyzer, SplitMetrics, StoreMaven, Raise Metrics, TestNest, SearchAdsHQ, SearchAds by Mobile Action, adAhead, you name it. And as if things were not already complicated enough … These ASO tools provide very different features, pricing, options, … When deciding which ones to use, I was like… How to Choose your ASO Tools If you are looking for your best ASO tools, check out my findings below. I will first start with a categorization of ASO tools, and follow up with a big list of app store optimization tools. You can then choose your ASO tools based on the category and the details of individual tools. Free Bonus: Click here to get a free comparison spreadsheet of all top ASO tools. It can be printed nicely on one page, and you can easily sort the ASO tools by type, price, availability of free version, etc.It also includes 2 more ASO tools that are not covered in this post. Types of ASO Tools ASO tools come in many flavors and packages, and they can be grouped into the following categories: 1) App Keyword Optimization Tools ASO tools of this type help you optimize your app keywords to increase your app search traffic. The app keyword related features include app keyword suggestions, keyword optimization, keyword tracking, etc. ASO tools like Mobile Action, Sensor Tower, Meatti, App Radar, Priori Data, ASOdesk, Searchman, TheTool, Keyword Tool, and AppKeywords.net are some good examples. 2) Review & Sentiment Analysis Tools ASO tools of this type perform optimization of your user reviews and ratings. Tools like Appbot, Mobile Action, Meatti and TheTool analyze your user ratings and review contents, and tell you what your users like and don’t like. With this kind of sentiment analysis, you can then refine your product development roadmap to earn better ratings. For example, if you find out a lot of users are complaining about a specific issue, you can prioritize your effort to fix that problem, and tell the complaining users about the solution. Many users will appreciate your positive reaction to their comments, and give you better ratings. Related to this, AppFollow provides features that help you reply all comments in App Store and Play Store efficiently. On the other hand, ASO tools like Apptentive help you increase the chance of getting 5-star reviews. It optimizes your app’s rating prompt process by deciding who, when, and how to present your rating prompts. 3) A/B Testing Tools A/B testing enables you to test your mobile app just like a science project. It helps you test two or more app product pages and determine which one gives you a better download conversion rate. Tools like Splitmetrics, Store Maven, TestNest, and RaiseMetrics are some good A/B testing tools for your app product page. 4) Search Ads Optimization Tools These ASO tools help you optimize your advertising campaign on Apple Search Ads. They provide automation features and competitor data that help you run ad campaigns more effectively. Some tools also integrate with app attribution partners (Adjust, AppsFlyer, Kochava, TUNE, etc.) and allows you to optimize campaigns not only for installs, but also for in-app events. ASO tools like SearchAdsHQ, SearchAds by Mobile Action, and adAhead are some good examples. 5) App Store Intelligence Tools ASO tools of this type provide estimates of competitor performance and app market trends. For instance, they offer estimates on data on competitor apps. These estimates include app downloads, revenue, advertising spend trends, market penetrations, etc. The information can be useful to app product managers and marketing managers for doing competitive analysis and marketing planning. App Annie, Mobile Action, Sensor Tower, Priori Data, Apptopia, and APPlyzer are ASO tools that offer app store intelligence. Top ASO Tools Listed below are the top ASO tools in 2018. The list is organized according to the types of ASO tools discussed above. To make the list more authentic, I personally reached out to everyone of them and collect their views of how their tools can help their users. And I’m fortunate enough to receive some great answers! Lastly, I’ve prepared an one-page comparison spreadsheet with all the ASO tools. It is a printable version, and you can easily sort the ASO tools by type, price, availability of free version, etc. 1) App Keyword Optimization Tools Mobile Action Meatti Sensor Tower App Radar Priori Data ASOdesk Searchman TheTool Keyword Tool AppKeywords.net 2) Review & Sentiment Analysis Tools Mobile Action Meatti TheTool Apptentive Appbot AppFollow 3) A/B Testing Tools SplitMetrics StoreMaven Raise Metrics TestNest 4) Search Ads Optimization Tools SearchAdsHQ SearchAds by Mobile Action adAhead 5) App Store Intelligence Tools App Annie Mobile Action Sensor Tower Priori Data Apptopia APPlyzer A Side-by-Side Comparison of ASO Tools One Page Comparison Spreadsheet of all ASO Tools Mobile Data Intelligence & Actionable Insights Mobile Action Mobile Action is an intuitive App Store Optimization tool and a data company providing actionable insights for their users. It provides its users with the most accurate data possible but that’s what every ASO tool claims to do. In fact the difference of Mobile Action is its dedicated customer success team that provides instant support across the entire globe 24/7. Mobile Action got into business as a ASO agency so we know a great deal of stuff regarding App Store Optimization and we build our tools from the perspective of an ASO specialist. Aykut Karaalioglu, CEO Mobile Action ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $69/Month Boost App Downloads using Artificial Intelligence Meatti Meatti helps mobile app developers boost app downloads without spending a penny on advertising. Our Meatti platform analyzes data from millions of apps every day. Using the data and artificial intelligence, it provides app developers with the best keyword and optimization suggestions to gain more app downloads in a systematic way. Marcus Kay, CEO Meatti ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $24/Month Data That Drives App Growth Sensor Tower Sensor Tower provides mobile developers with powerful market intelligence and App Store Optimization solutions that enable them to easily surface competitive insights and achieve maximum organic growth on the App Store and Google Play. Randy Nelson, Head of Mobile Insights Sensor Tower ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $79/Month App Store Optimization made easy App Radar App Radar is an search engine optimization tool that helps app developers optimizing their apps being more visible within the app stores. With a direct integration into iTunes Connect & Google Play Console, App Radar makes the process of App Store Optimization easy like never before. Thomas Kriebernegg, CEO App Radar ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $150/Month Win Your Mobile Market Priori Data Priori Data App Intelligence enables you to research, benchmark, and track your competition all in one place. Create individual or team viewable watchlists and comparisons of apps in your competitive set, and track their rank, download, revenue, DAU, MAU, ARPDAU and retention performance on a daily basis. Set up smart alerts to get notified of any major shifts, and receive daily and weekly reports so that you never lose track of the big picture. Priori Data ASO Tool - Quick Facts: Free version / trial available? No Premium plan starts at: $99/Month Boost your organic downloads with Data-Driven Marketing Technologies ASOdesk Our dream is to make our customers more and more successful. App Store Optimization is a never-ending optimization process that can bring millions of free installs. Our clients have many opportunities to make their business more effective. Just in a couple of clicks our product is available for you and ready to help you to find new real users. Sergey Sharov, CEO ASOdesk ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $41.6/Month App Data Solutions to accelerate Ecosystem success Searchman SearchMan is the leading App Analytics Data & Technology company with over 100 000 companies actively using our solutions to help them succeed in the App economy. SearchMan’s parent company, AppGrooves was founded in San Francisco Bay Area by former executives of Rakuten, AdMob, Yahoo and many other startups. Our investors include 500 Startups, Digital Garage, and several internet luminaries whose experience includes Disney, Google, Yahoo, Gree, Ricoh, Hatena, and Rakuten. Searchman ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $25/Month Performance-Based Mobile App Marketing & ASO tool TheTool TheTool helps developers and marketers to track and optimize their App Store Optimization strategy in 91 countries or globally, carry out keyword research, benchmark ASO KPIs with competitors, understand the impact of marketing actions on installs, conversion rate and revenue; and, ultimately, grow the organic installs of their apps and games. Basically we help people make more money with apps. Daniel Peris, CEO TheTool ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: €29 /Year Find Great Keywords Using Autocomplete Keyword Tool KeywordTool.io helps marketers and app creators discover what app store users are looking for by generating keyword suggestions using the app store’s autocomplete. A simple search can yield hundreds of hidden keywords for you to optimize your app towards. Khai Yong Ng, Head of Growth KeywordTool.io ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $48 /Year Sneak into Google Play's auto-suggest feature AppKeywords.net When I launched AppKeywords.net back in 2015 it was really hard to get proper data on keywords. Sure you had a lot tools giving you some kind of estimates but you could not be really sure if the data is accurate. Especially when you were researching non-english keywords. Sebastian Knopp, Growth and Product Strategy Appkeyword.net ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: Free Build a brand your customers love Apptentive Using proactive mobile communication tools, Apptentiveempowers companies to better understand more of their customers—at scale—in order to drive app downloads, create seamless customer experiences, and validate product roadmaps. The product gives brands the opportunity to listen to, engage with, and retain their customers through intelligently timed surveys, messages, and prompts. They power millions of customer interactions every month for companies including Buffalo Wild Wings, eBay, Philips, Saks Fifth Avenue, and Zillow. Robi Ganguly, CEO Apptentive ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: Custom Plan App review & ratings analysis for mobile teams Appbot Appbot helps developers understand how customers feel about their apps, by monitoring and analyzing their app reviews and ratings across all major platforms. Appbot applies proprietary sentiment analysis and clustering techniques to help developers understand current issues, and identify quick wins. Claire Mcgregor, Co-founder Appbot ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $39 /Month Reviews & Updates Monitor for App Store & Google Play AppFollow AppFollow is created to support everyone (this year we will expand this support even further) involved in the process of development and growth of mobile apps and games. We support everyone whether it is a developer, CEO, customer support or product manager, ASO expert or publisher. Anatoly Sharifulin, CEO & Co-founder AppFollow ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: Custom Plan Achieve success through apps App Annie The industry’s first app data platform integrates your app data with our comprehensive market data, cutting-edge data science, deep data foundation and engaging data experience. Through our platform, you can get immediate access to all our latest technology innovations and data sets, share the right data with the right people at the right time, pinpoint prime opportunities — and most crucially — create winning strategies. App Annie ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $15,000+/Year (source: TechCrunch) Grow Your App Business Apptopia Apptopia provides competitive intelligence for the mobile app economy. Through intuitive tools, we’re able to display actionable data. This means user acquisition managers, product teams, SDK sales teams, growth marketers and more can make smarter decisions faster. Data we provide includes downloads, revenue, usage, retention, rank, SDK data, audience intelligence, advertising intelligence and more. Adam Blacker, Communications Lead and Brand Ambassador Apptopia ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $55 /Month App Market Analysis & App Store Optimization APPlyzer Applyzer is a leading app industry analysis service providing market insights since 2009. Our service offers reliable data to a wide range of customers in the app business – From actionable data for publishers to relevant information for tech investors. Applyzer ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: €10 /Month Optimize Your App Conversion Rates on the App Store and Google Play with A/B Testing SplitMetrics With SplitMetrics, such app publishers as Rovio, Halfbrick, Wargaming, ZeptoLab, Pocket Gems optimize app store conversions by A/B testing app page elements: from icons and screenshots to subtitles, app previews, etc. To help publishers get the most out of their app marketing efforts, SplitMetrics shares industry benchmarks and a great volume of educational materials, such as an AppGrowthLab course. Alexandra Lamachenka, Head of Marketing SplitMetrics ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $4,999 /Year Increase app store conversion rates & pay less for every install StoreMaven StoreMaven helps more than 60% of top-grossing app publishers optimize their app store product pages to increase install rates and reduce the cost of user acquisition. Companies like Google, Uber, Facebook and Zynga rely on StoreMaven‘s testing and analytics platform to define their ASO and global mobile marketing strategies. Gad Maor, CEO StoreMaven ASO Tool - Quick Facts: Free version / trial available? No Premium plan starts at: Custom Plan Raise your App Store & Google Play install rates with A/B testing RaiseMetrics Insight Is Everything. RaiseMetrics provides a visual understanding of how your audience interacts with your app page, and what you can do to maximize conversions. RaiseMetrics ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $99 /Month Best Self-serve App Store and Google Play AB Testing Platform TestNest Best self-serve app store and google play ab testing platform. Unoptimized App Store pages may increase CPIs by up to 40%. A/B test your app listing pages and get more quality users for less. Learn from user behavior analysis make optimized data-driven decisions. TestNest ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: $149 /Month Optimize Apple App Store Ads for Revenue, not just downloads SearchAdsHQ SearchAdsHQ helps app publishers run ROI-driven Apple Search Ads campaigns. To make it possible, the platform connects Apple Search Ads with app attribution partners (Adjust, AppsFlyer, Kochava, TUNE, etc.) and allows to optimize campaigns not only for installs, but for in-app events: in-app purchases, subscriptions, conversions. Alexandra Lamachenka, Head of Marketing SearchAdsHQ ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: Custom Plan Mobile Action provides awesome tools to make the most of your Search Ads and keep up with the competition. SearchAds by Mobile Action Searchads.com was created specifically for Apple Search Ads and as Apple Search Ads is a rather new service it tries to cover the shortcomings of Apple Search Ads by providing competitor data, more reactive notifications and automation features that allows users to get the most out of the time and resources they have spent in Apple Search Ads. Aykut Karaalioglu, CEO SearchAds by Mobile Action ASO Tool - Quick Facts: Free version / trial available? No Premium plan starts at: Custom Plan Optimize Apple App Store Ads for Revenue, not just downloads adAhead adAhead is an Apple Search Ads Optimization Platform that is fully self-managed by mobile app marketers. It provides GEO reports, COHORT analysis, keyword reports and charts, powerful rule manager tool, keyword rank monitoring, custom ad scheduler, bulk edit, duplication option for campaigns/ad groups, and multi account dashboard. adAhead also provides fully featured live demo for new visitors. Yury Listapad, CEO adAhead ASO Tool - Quick Facts: Free version / trial available? Yes Premium plan starts at: 2.5% of ad spend A Side-by-Side Comparison of ASO Tools The list of ASO tools here is really long. To make it easier to do comparison, I've prepared an one-page comparison spreadsheet with all the ASO tools for you. It is a printable version, and you can easily sort the ASO tools by type, price, availability of free version, etc. Click here to get a free comparison spreadsheet of all top ASO tools. The spreadsheet also includes 2 bonus tools and additional details that I didn’t have room to include in this post. This post originally appeared on Meatti Marcus Kay Marcus is the founder of Meatti - a platform that helps mobile game developers boost app downloads using artificial intelligence. Find him on Twitter, LinkedIn and his blog.
  24. Hi, I am new to Game Development and am currently making my first game in Unity using c#. I am a second year uni student studying computer science (internet security specialization). I am new to unity and have had trouble understanding how the game engine actually functions and how I should use the engine to my advantage when programming. Currently I am making a RPG and want to implement an efficient and scalable item database. My plan is to store all items in the game in an xml database using the built in unity xml serializer. I have an abstract class item -> weapon, armour, potion, ring etc. Each of these classes have respective values (damage, cost etc.). For a relatively generic and straightforward item system: How would you organize your code? What interfaces/classes/other would you implement; why? In your experience what kinds of issues have you run into and how did you work around them? Is there any other advice with regards to rpg design in general?
  25. I am coding the rasterization of triangles by the baricentric coordinate method. Look a lot of code and tutorials that are on the web about the optimization of this algorithm. I found a way to optimize it that I did not see it anywhere. I Only code the painting of triangles without Zbuffer and without textures. I am not comparing speeds and I am not interested in doing them, I am simply reducing the amount of instructions that are executed in the internal loop. The idea is simple, someone must have done it before but he did not publish the code or maybe in hardware it is already that way too. It should be noted that for each horizontal line drawn, of the three segments, you only need to look at one when going from negative to positive to start drawing and you only need to look at one when it goes from positive to negative when you stop drawing. I try it and it works well, now I am implementing a regular version with texture and zbuffer to realize how to add it to this optimization. Does anyone know if this optimization is already done? The code is in https://github.com/phreda4/reda4/blob/master/r4/Dev/graficos/rasterize2.txt From line 92 to 155
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!