• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

slicksk8te

Members
  • Content count

    48
  • Joined

  • Last visited

Community Reputation

300 Neutral

About slicksk8te

  • Rank
    Member
  1. OpenGL

    Thanks for the help. I have tried instancing and it does mostly work for what I'm doing. Don't UBOs have a relatively low limit for max size? I'm guess I'm still unsure how AAA games are able to have so many meshes rendered along with things like particle effects What strategies are employed to reduce the number of draw calls and be able to maintain independent object transformation? I'm sure instancing is used for particle effects but I'm not sure how this is done in practice because there can be many emitters that (i.e. many explosions) die after some time. Would the buffer that contains the transformations have to be scraped and refreshed every time a particle died? I'm pretty good at getting an implementation together once I understand the strategies but I'm having trouble finding best practices on this stuff. There are many beginner tutorials our there but I can't seem to get information on how AAA does these things in practice.
  2. I have been scouring all the documentation, forums, and general internet searches for this question and I have found a bunch of half answers and I hope someone can help.   Now to the question.   Lets say I have 1000 objects that use the same mesh, shader, texture, etc. but they all have separate transforms (locations, rotations, scale). What is the best way to render this without tanking the frame time?   I am weary of instancing because there may be many different meshes in the future with different textures/state.   The slow way that I know of that is trivial to implement is to sort the geometry by state and make a draw call for each one and passing the transform matrix in through a uniform matrix. This does not work because DrawArrays is extremely slow and completely CPU bound. I have implemented this and know that this seriously destroys my frame time even with a couple of hundred draw calls.   I would like to use a single VAO for each object type, but how do you deal with transform data? The solution I have usually seen involves transforming the vertices on the CPU and then updating the VBO before drawing. It seems rather wasteful to do this on the CPU and resubmit the data because the GPU is sooooo much better at doing transforms in the vertex shader. This also may make the program CPU bound yet again.   Most explanations I have seen on how to do this always focus on rendering a few object per frame not hundreds let alone thousands. I absolutely know this is possible because i have seen many games pull off hundreds of objects. I know if there is a static environment then it is pretty easy to render because there should only be one transform for the whole environment if done right. That is pre-calculating the model space of a chunk or environment and then just moving the whole chunk or environment. The problem is dynamic objects. I only need a few hundred to about a thousand. I don't imagine that it can be this difficult.   I feel like I am missing something important and hope that i can get some information on how most games do it.   I have done a large amount of profiling and all roads seem to lead to reducing the number of draw calls, but I am having trouble determining how to do that with so many independent meshes with different transformation matrices.   Thanks in advance.
  3. What type of use case are you looking for? There are many ways to handle configuration in python and each offers very different pros and cons but typically are good for specific uses.   Keyword arguments can be useful but I try to avoid **kwargs style syntax because it can make it difficult to understand what types of arguments the function can take.   I like to usually use properties + builders to accomplish configuration like the following: #useful for config files? #If the following variable is false, no camera will exist? camsOn=True class Camera(object): def __init__(self, **settings): self._settings = settings @property def all_settings(self): """Be able to get all settings and present them as a dictionary but is read only.""" return dict(self._settings) @property def mode(self): return self._settings.get('mode') @property def radius(self): return self._settings.get('radius') @property def focus(self): return self._settings.get('focus') @property def angle(self): return self._settings.get('angle') @angle.setter def angle(self, value): """An example of a setter but by default properties will be read only.""" self._settings['angle'] = value @property def frustrum(self): # This is a function so you can add any additional logic here. return self._settings.get('frustrum') def camera(**settings): if camsOn: return Camera(**settings) # Also could raise here if no camera is an error or the user should know about it. return None cam1 = camera(mode='PERS',radius=0,focus=(0,0,0),angle=(0,0,0),frustrum=0) cam2 = camera(mode='ORTHO') # the power of a function is that logic can be added cam1.angle = (23,68,79) print cam1.angle # FUNCTIONS def get_settings(cam): global camsOn if camsOn: for settings in cam.all_settings: print str(settings) + ' = ' + str(cam[settings]) else: print 'Can\'t get settings' return {} get_settings(cam1) print get_settings(cam2) I know classes seem overkill but they allow you to be extremely explicit and have defaults automatically specified as well as easy usage because there is no need to care if a particular setting exists or not. Also, properties allow "read only" values if you do not have a setter. And finally you can change the source of the configuration any time without changing any of the usage code because you have abstracted it out. For instance you could read this information from a file in the builder and pass it into the object and you would use it the same as if you just used a flat dictionary.   It all depends on your use case but in the method above you could have logic specific to the settings either in the property functions or the setter or the builder that creates the settings object.
  4. Not sure if this is being monitored or not but I believe the op's question  was where to start with programming in general and then how to transition into game development.   You can pick virtually any programming language to start from but with the big caveat that some languages are harder than others to learn and for example C can have a pretty steep learning curve for more complicated programs.   I started in C and I believe it is a valid starting point but it is like starting in the deep end. If I was starting to program for the first time today, I would choose python. Of course this is a personal opinion and I believe that there are a lot of really complicated concepts that need to be learned when starting with lower level languages. Python however is more of a top down approach to programming rather than a bottom up.    I believe that the best way to learn to program and game programming is to just try things out. Higher level languages like Python allow this because it is really easy to get started and there is a lot of details that you do not need to worry about.   You really just need to learn a programming language and write programs to get used to the thought process and how to think about problems. Once you learn one programming language it becomes easier to learn more.   Hope that helps
  5. Ohh totally forgot about dwarf fortress! That actually brings up an interesting thought of what constitutes a text based game. Is it the input method or the presentation layer? Or maybe some other criteria. But some good input so far. I didn't even think of the sim route.
  6. Did you display a map? I can see how a turn based game you could use commands like "invade saturn with 10 armies"
  7. After a bit of searching on the internet, I have found only a few different types/genres of text based games but I am wondering if there is any other possibilities for this medium.   Currently I have found the following: Adventure games (mostly like zork) Roguelikes Card/table top games I feel I must be missing a large amount ( and probably oversimplifying many of these as well  ) because the game industry is really creative about pushing a medium to its limits.   If you have any examples/thoughts of text based game types/genres, I would greatly appreciate it.
  8. If I'm understanding you correctly, you would like to load a file from a string rather than a digit, that is you would like to load "b.txt" instead of "1" or some variation of that. To do this you can change: [source lang="cpp"]fgets(file, "%d\n", &locsToGo[t]);[/source] to load the a string into locsToGo instead of an int. The declaration of locsToGo would be: [source lang="cpp"]#define FILENAME_LEN 10 char locsToGo[100][FILENAME_LEN];[/source] Hope this helps and good luck with your text game.
  9. I'm Unable to see the second part of the code. I had this problem before, try an replace all <= into < because the code tags break when they see <= for some reason. It is also better for help_credits to be compared to zero like this: help_credits <= 0 because this is safer than help_credits == 0. I'm going to have to see the rest of the code before I can tell why it is unresponsive.
  10. Sednihp is right you should not have the unit controlling the particle but the particle system. Once it is spawned the particle should not need the the emitter at all. This is the best way to implement it and how professional particle systems work.
  11. Yes you need to follow this format for this to work correctly: [source lang="python"]#Initialize here while True: #Some code can go here while game: # First while loop code here # Transition code here while elect_new: # Second while loop code here # More Transition code here[/source] If you do not have an outer while loop, it will not return back to the first loop.
  12. From what I understand now both while loops are not inside an outer loop are they? If they are, ensure that the code loops back around to the beginning and that p is above 15. If not you need a while loop that wraps around both inner while loops. The reason why I suspect this is because you have no indent in front of your while loops in your pasted code. Did you remove the indentation when you pasted the code?
  13. It is possible that it is always going to the second while loop because of this: [source lang="python"]if p < 15 and y == 1: game = False elect_new = True[/source] (There is a weird glitch with this code block, if i use "p <= 15" it fails to display so assume it is "p <= 15" instead of "p < 15") Is this code supposed to be evaluated every loop iteration? What is the initial value of p? This code is evaluated every iteration and if p is initialized as <= 15 then this will evaluate true almost immediately because y is determined by: [source lang="python"]y = random.randint(1, 3)[/source] Which is also evaluated every loop and because the loop time is really fast, as in < 10ms (this may be faster because you have no sleep/fps timing), y will be 1 in about 3-4 loops. so it would take about 30-40ms to evaluate true and jump to the second loop.
  14. I would expect that particles are completely self contained. That is once they are spawned they would not need to reference the Unit again in its lifetime. For instance if the unit fired, it would spawn a particle in the particle system with its position and the particle system would manage it completely after it was initially spawned. Why does the particle need a reference to the Unit again? What kind of data do you need from the Unit?
  15. What is the scope of this code? That is, is it in a function? Script only? Also,where is game declared because if it is initialized as false then it will skip the first while loop. You are also only rendering in the first loop whenever the user presses enter as seen below: [source lang="python"] for event in pygame.event.get(): #the pplrty determiner if event.type == pygame.KEYDOWN: if event.key == pygame.K_RETURN: year += 1 # Drawing/Reaction code here... pygame.display.update()[/source] Is this intended? Does it catch any of the inputs? That is, have you tried this: [source lang="python"]for event in pygame.event.get(): #the pplrty determiner if event.type == pygame.KEYDOWN: if event.key == pygame.K_RETURN: print "RETURN Key Hit."[/source]