Jump to content
  • Advertisement
The search index is currently processing. Activity stream results may not be complete.

All Activity

This stream auto-updates     

  1. Past hour
  2. You need to invert the matrix you're building in order to transform p1, p2 & p3 from model space to world space.
  3. Today
  4. Gregory Aaron Martin

    2D Short Story Into Game

    I'm writing a sprawling fantasy series. I've written shorter stories in the world I'm creating. I want to turn one of those short stories into a game. It can be 2D. It's about dragons. There's a story arc below that shows a starting point and an ending point. Details will be given if there's anyone interested. I'm a storyteller but I don't have much knowledge on game development. Synopsis: A young man with a very special gift returns to his mountainous home to find it invaded by a cult. The community he's been a part of his whole life has been cut off by the king to ensure the cult's influence remains limited as it's very influential. This cult believes the dragon they follow and worship rests in the mountains and with the king pulling his soldiers out, the cult can begin its dig underground. The young man learns that the last individual with the same special gift who held a coveted seat on the council was killed by the cult during the cult's takeover of the village community. The young man, like others with the same special ability as him, vied for the seat on the council but he was turned away either for his own safety or because of council secrets. The cult has its own members with this same special ability and they're very intimidating. The community is oppressed for months. Tired of this oppression and feeling abandoned by his king, the young man sets out with a few new comrades to battle this cult, putting on display his own talent with this special gift.They make it their mission to sabotage the cult's dig into the mountains in hopes the cult doesn't awaken their dragon. They also make it their mission to defeat the cult members who posses the special ability. They are successful with this and he is appointed to the coveted seat on the council. Thanks
  5. Gnollrunner

    The Han Solo Movie and the Star Wars Franchise's Direction

    Of course, but there is some median between wanting something cool to happen and things making sense. If stuff that is too ridiculous happens, what's cool is no longer cool. That line is different for different people and also for different genres of films. A successful action film should draw that line in a good place (whatever that means) .... In general I think Star Wars is crap now. IMO it's been surviving on it's past reputation, the same way an old band gets by when it puts out a sub-par album. However that won't last forever. With Solo we are already seeing signs of its decline and I think this is likely driven by backlash from the TLJ. For me SW has been ruined to the point that it doesn't matter if Solo is good or not, since the SW universe sucks now. In any case, it will be interesting to see what happens to SW in the future.
  6. Welcome to the world of movie magic, where in order for something cool to happen, logic is told where the door is and how to use it. Speaking of which, why didnt they just put the dinosaurs in Fallen Kingdom on Site B, the neighbouring island?
  7. Ultimately, (and similarly to the problem of antibiotic resistance), I think it is because we are selfish. Saying that 'it would be better for mankind' if we did blah doesn't work, because people don't work that way. They just care about the here and now, and their children. In fact most people have no problem breaking societal rules / laws for their children, if it gets the children ahead - this is an example of the selfish gene. Companies don't work that way either, they tend to be selfish. And so you are relying on regulations.. however they too are often bought and paid for by corporations and vested interests. And then you have the mechanism by which we are destroying the environment - population growth. The planet is hugely overpopulated, to protect the environment we need to start killing people, or have less children. People won't stop having children (ooman rights don't you know), so we have have to hope for another plague or world war to wipe out a load. This is why I have mixed feelings about trying to find the cure for diseases such as malaria. Ok, you save lots of people from dying from malaria, but then the population explodes and you have other problems. Malaria is one of nature's ways of keeping the population down. We could also try gas chambers like Hitler (but disposing of the bodies is so problematic, unless we ate them?), or that guy in that bond movie Moonraker had a good idea about sending a bunch of couples up in a space shuttle then killing all the humans on earth then letting them repopulate. Really the best thing would be to limit reproduction in some way, that way no one gets hurt, and people are less likely to miss the children they don't have. Perhaps a reproduction lottery .. like the situation with bonobo chimps, or totally genetically selected state offspring, we are getting there with the genetic techniques. Realistically few people are as forward thinking as me, so I'd think our only real hope is escaping the planet so we can infect other planets with our parasitic existence.
  8. It's worth to mention (again) async compute, which is more similar to CPU multithreading. Here we use multiple queues (instead 1 or 2 threads per core), and if the GPU has support the work will execute in parallel. To join the individual workloads, there are synchronization commands for the various APIs. The downside is a pretty high cost coming from the overhead of using multiple queues and sync, and the need to divide a single command list into multiple command lists. The cost is higher than a simple memory barrier within a single queue. (This is where i see the most need to improve current APIs / drivers.) With Vulkan and FuryX i noticed only the graphics / compute queue offers full performance. The other 3 compute queues seem to be limited to utilize only half of the GPU. (Which is undocumented, and because i've initially used only the latter queues for my tests, i've got only disappointing results. Reason why i post this again and again...) At the end i've got close to optimal results with my tests (but i still missing real world stuff experience). Because all this seems very hardware or API dependent, it's a good reason to have some node based abstraction on top of APIs, so it's easy to experiment and find good configurations. But there is also an easier way to utilize async compute. If you have dispatches that do not depend on each others results (no memory barriers), you can (and should) execute them in the same queue, and the GPU will run them in parallel automatically without any downsides. The N-body example from above with its 4 dispatches is an example of this. (I don't know if any of this might work on Nvidia GPUs.)
  9. Gnollrunner

    The Han Solo Movie and the Star Wars Franchise's Direction

    Sorry but to me the whole thing struck me as completely stupid. While there are some holes in the old films they weren't so glaring for me that I instantly rolled my eyes when watching the movies. No soldier is going to throw away his perfectly good ranged weapon so he can have melee combat in the middle of a shooting war. That's suicide. Furthermore they wouldn't even be carrying a bloated useless weapon like this into combat. You would carry a backup hand gun (like they do now). That fight should have been over in a couple seconds with Finn being dead. Again, the only way the Jedi/Sith get away with it, is that they are so incredibly skilled they can block incoming blaster bolts.
  10. This is not accurate. GPU's can absolutely use true flow control operations, with the caveat that the flow control is coherent across a group of threads that execute in lockstep. Modern GPU's generally use SIMD hardware that's anywhere from 8-wide to 64-wide, and require the branch condition to be uniform across the whole SIMD to be able to actually take the branch. GPU's only have to resort to lane masking and predication when the result of the branch condition is different across a group of threads on the same SIMD unit. In summary, whether or not a branch/loop actually skips instructions depends on your condition and your grouping of threads. For instance if you're branching in a pixel shader, you'll want to to make sure that the branch condition will be same across neighboring pixels in the same area of the screen. Or if you branch on a value from a constant buffer that's not dynamically indexed, you can know for sure that all of your threads will take the same path.
  11. JTippetts

    Resistances and Defenses

    I've just come off a several-months-long jag of playing Path of Exile. PoE has influenced the (sporadic) development I've done through that time on Goblinson Crusoe by a great deal. While GC is turn-based, it shares a lot of the same DNA as PoE, specifically in the influence of Diablo and Diablo 2, so a lot of ideas and mechanics from those games have been seeded throughout GC. Like Diablo 2, Path of Exile implements a system of resistances for elemental damage (fire, ice, lightning). Resistance stat values are obtained primarily through gear, and are obtained as percentage values that accumulate up to a maximum value. For example, you could get a belt with +35% lightning resistance. Resistance amounts from gear and other sources are accumulated, then capped to a maximum value (75% by default), with the option of obtaining small increases to this maximum value via other sources. Resistance either reduces or increases (it is possible to have negative resistances that actually boost the damage the player takes) the incoming damage by the given percentage. As one progresses through the game, at certain checkpoints the player's resistance value has imposed upon it a penalty. In the beginning, this penalty was imposed in smaller stages as one progressed through the difficulty levels. (Difficulty levels simply repeat the story of the game, with higher-level monsters as well as the resistance penalty coming into play.) In current PoE, the penalties are imposed at two checkpoints within the story: the first after completing Act 5 (character level approximately L45) and the second after completing Act 10 (around 67 to 70 character level). The first checkpoint applies a -30% reduction to resistances, and the second checkpoint another -30%, for a total of -60%. I understand the thinking behind this design. The game is balanced around having maximum resistances. That is, any given encounter will be damage-tuned with the assumption that the player is at resistance cap, and thus not having the resistance value at cap can bring extra punishment and pain. This provides a constant pressure for equipment improvement as one progresses to end-game; gear that was fine before the checkpoint now is suddenly deficient, pressuring the player to seek upgrades. At a certain point, though, the player can obtain enough +res% to overcome the penalties and still raise their resistance to 75%, meaning they are effectively "done" with upgrading their resistances. (Further equipment upgrades for other stats must be chose to maintain these resistance caps, but that is usually not too difficult.) Typical players are encouraged to obtain these caps as soon as possible to ease the leveling and progression process. While I understand the design, I've always been bothered by the implementation. Having gear that was "fine" at one point suddenly become "totally deficient" in one instant after beating a single specific boss feels too abrupt. Also, I kinda don't like that at a certain point the pressure to maintain resistances eases up. So in GC, I am exploring ideas for putting this resistance penalty system on a smooth curve, rather than having the abrupt steps. The current iteration of this system uses a logistic function, which is a type of sigmoid function. Instead of collecting gear that provides +X% resistance to a given damage type, you collect gear that gives +Y resistance rating. This resistance rating is plugged into a logistic function to obtain the actual amount of resistance % to apply against incoming damage. The logistic function is structured like this: function res(rating, levelbase, levelslope) return (1.0 / (1.0 + math.pow(e, -levelslope * (rating - levelbase)))) *2.0 -1.0 end The function operates using the rating (granted by equipment and other buffs) as well as a base rating for a given level, levelbase. At level M, if the player's rating is equal to level base, then the granted resistance value will be 0%. Rating less than levelbase results in a negative resistance, while greater than levelbase grants a positive resistance. The factor levelslope is used to affect the spread of the function at a given level; ie, how quickly the resistance approaches 1.0 or -1.0. For example, if you use a levelslope of 1, that means that the resistance value will be very close to -1.0 at a rating that is 6 points below base, and will be very close to 1.0 at a rating that is 6 points above base. This slope value determines the slope of the curve where it passes through the origin of the graph. By making the slope shallower as the character level increases, that spread can be made wider, granting a larger window within which the rating will grant a resistance value somewhere between -1 and 1. This way, as resistance ratings grow larger, the absolute difference between the rating and the levelbase has a more gradual effect on the value. These graphs show how this works: At a levelslope of 1, you can see here that around 6 points below the levelbase, the curve approaches -1, and at around 6 points above, it approaches 1. So if the base resistance rating for that level were, say, 10 then if you had a rating of 4, you would have a resistance value of -100% (or close to), meaning you would effectively take double damage, whereas if you had a rating of 16, you would have a resistance of 100%, meaning you would take no damage. Now, at a higher level, you might have a levelslope of, say, 1/3: Here you can see that the spread is now approximately -16 to +16 from level base. If the levelbase rating for that level were, say, 100 then if you had 84 rating or below you would take double damage, whereas if you had 116 or higher you would take no damage. Of course, the base and slope ratings would be a candidate for a great deal of tuning in the final game. The constant increase of levelbase applies constant pressure for the player to upgrade resistance, not simply at 1 or 2 main checkpoints, but all throughout the game, with that pressure growing larger the longer one plays and levels up without changing equipment. And this also doesn't account for having a resistance cap. In PoE, the default cap is 75%, which can be raised only through rare and special means, which is a sensible design decision in my opinion. A simple solution for this would be to multiply the output of the resistance function by the value of the cap if the output is positive (leaving the negative resistance value uncapped). Doing it this way, the positive side of the curve approaches the resistance cap, rather than 1.0, while the negative side is untouched. I could even implement a negative resistance cap, if so desired, to allow the player to build a stat to reduce the amount of damage taken from having a negative resistance. In my preliminary tests (which include no playtesting so far by anyone but myself) it seems to work fairly well, but this is one of those kinds of systems that I will need to tinker with and explore more fully in the final testing phases. Just because it works well now, doesn't mean it won't be massively exploitable in the future. I have also been tweaking and experimenting with damage types. At the moment, I have a system of damage types somewhat similar to PoE, though with quite a few differences. In my system, any given attack or spell can deal a certain combination of damage types selected from the set {Crush, Slash, Burn, Poison, Bleed, Void, Shock}. These damage types can additionally be tagged with modifiers drawn from the set {Projectile, Melee, Attack, Spell, Area, DoT, Siege} which can be used to apply damage increases or reductions. So as an example, a basic fireball of some sort might deal 2 damages. The first would be tagged {Crush | Area | Spell} and the second would be tagged {Burn | DoT | Area | Spell}. Player stats exist that can amplify or reduce damage dealt by any of these various tags. So, for example, it might be possible to have a stat that increases Spell damage by 13%, meaning both damage rolls from this fireball spell will be boosted by 13%. Primary damage types all come with a secondary debuff effect. Crush causes a stun/slow effect, slowing the target by some amount for some period of time. Slash damage causes a Bleed debuff that causes damage over time (this damage bearing the {Bleed | DoT} tags). Poison damage also applies a stacking debuff to poison and burn damage resistance rating, meaning that poison and burn damages become more potent the more poison stacks there are. Void causes an increased chance to take a critical strike, and Shock increases all damage taken by a certain %. These effects are all subject to change as the game develops further. The idea, though, is that each damage type should be differentiated by a mechanic, and not just by a type. I've played games where there was no mechanical difference between, ie, Fire and Lightning, merely cosmetic differences and the necessity of maintaining resistances against two types instead of just one. If a damage type doesn't lend itself to some mechanical difference from the others, then it will be altered or removed. At the moment, all damage types are mitigated in a similar manner, using the damage resistance calculations describe earlier. That is, 'physical' types such as Crush and Slash are not mitigated using any kind of armor rating, but instead are mitigated by Crush or Slash resistance rating granted by certain equipment. Homogenizing the various damage mitigation strategies in this manner vastly simplifies the design of the character combat back-end and balancing, though again it is subject to change in the future.
  12. That's a great explanation I managed to get it working by checking when a client is connected and ready, then i iterate a list of the connected players and update the weapons only on that client. Thanks for all the help!
  13. I made the same mistake when I started. A way to think of it is like playing chess with someone in another room. Each of you have your own chess board. There is a 3rd person who keeps running between the rooms to tell each player what move the other made. So when ever the 3rd person tells you that the other player moved pawn E7 to E5 you move the pawn on your own board to mimic their board. The 3rd person can also act as a referee because this person sees both boards and can correct mistakes. So if you equip a item on one player, the server tells the other player that the item was equipped and the local computer updates to reflect this change. All you need is some way for the server to keep track of the game that is played.
  14. Oh I see my problem , I should be using DIDFT_GETINSTANCE instead of the GUID parameter in the callback, it is a different variable, I should have read the docs more clearly. Thanks for the help.
  15. The interesting thing about it pollution is that it is a self regulated system like almost anything on earth. As pollution fills the world, the demand for unpolluted space grows, causing a market shift into making "green" zones. So the very economics that causes pollution also fights it. E-waste is one of the best examples, as demand for new mobiles grow the demand for recycling of E-waste grew to help cover the demand. As the E-waste recycling created air pollution the demand for cleaner E-waste recycling and green real estate grew; resulting in housing planting more trees to improve property value. There is a lot of money to be made in "green" technology at the moment. The demand for solar energy for example has lead to a stable solar panel stock market that inspires a lot of investors. This in turn has lead to even faster growth in solar technology than expected.
  16. When the server sees a new player connect, it should collect all the state of the already-connected players and send those to the new player.
  17. You don't need a history buffer on the client when you apply the state in the incoming packets. There are some interpolation mechanisms that will work better if you do, but that's not for communications purposes. You just need to know the packet number that you get. Discard packets that are out of order. Applying the state when you receive it (assuming it's not out-of-order) is sufficient to get the object to a state that you know it has had on the server. If you miss a packet, the server will just re-send the deltas that were in that packet (or, more accurately, deltas for objects that were in that packet, but with later state) in the next update, because you're not going to acknowledge that packet. And if you discard a packet that arrives out-of-order, that's the same as that packet being dropped. This assumes that you send ALL the objects that have outstanding changes in each packet. If you want to schedule updates across different packets, it gets a lot more complicated, and you do need at least a "last packet per object" counter, if not the full state, to make it work. So, this delta compression works best for systems with fewer moving objects (dozens, not hundreds or thousands.)
  18. I've been hearing the same thing since the 1960s. Of course, we were all going to starve by the year 2000 because of the overpopulation and the impending ice age, but it hardly mattered because of the nuclear apocalypse that would end it all in a single bright flash. Then came the acid rain that was going to eutrophy all our lakes and the GMO frankencrops that would extinguish all our biodiversity. Only now the same Club of Rome folks are telling us we're going to roast on a waterworld as we starve due to the overpopulation by the year 2100, but it'll be OK because the frankenstorms will wipe us all out with the great plastic supertides. For a good background, read a lot of history about how doomsayer predictions have always been with us. Plagues of frogs and rivers of blood, cats lying down with dogs, that sort of thing. Ohhhh, it's going to be bad.
  19. Fulcrum.013

    Would Unique paritcles slow down a physics simulation?

    Just neural networks and "deep learning" is other antiscientic fiction fashion toy. Really neural networks intended to determine category of forms for wich exactly determination rules can not be found. It is what neural networks making really good. But neural networks can not make a exactly desigin by nature of task for wich it intended, its can give estimations only. Of course it is not apropriate way for realistic phisic simulation. It is a inverted pendulum bench used to train paratroopers etc, also known as looping. Hips used to lift torso up and control descending of torso when human climbing up or goes down ladder/hill. Exactly. We exactly know that human able to stay onto one leg. To transfer its stable system to other location we have to make longer other leg. It can be done by rotaing ankle joint only. By other worlds we can assume that working leg is crane's jib and rest of body is a load. By the way human kinematics allow significant simplification. Hands and legs is a icosceles triangles. So elbow anytime can be found at middle normal to line connecting shoulder and center of palm, same with knees. So we can consume that arms and legs is a linear joint connected to angular joint of torso on general pose computations, and then recalulate positions of angular joints of each hand and leg separately.
  20. @Nypyren, sorry, I posted my question too soon and didn't even notice it. So I've edited the post you responded to better reflecting my thoughts. I like what you have to say though. [ I was actually in the process of typing up the post while you responded, didn't know what happened until I tried to post it and saw the submit button was greyed out ].
  21. As I learned in Factorio, eventually we will be eaten by Biters or reach the edge of the map. But more seriously, we have three large categories of options: 1. Attempt to live on Earth indefinitely. This requires carefully limiting human population based on the resources available. 2. Begin using habitats and resources other than Earth. 3. Go extinct before we can adapt.
  22. To clarify the question, I'm asking about the consequences of our collective human consumption on the global scale. It's consequences are already apparent. Just wondering what you think? I've spent years studying this and learning about many different facets, keeping an eye out for some of the more underlying fundamentals. Lately what I've come to learn and appreciate is that the vast majority of the public who care to have an opinion on the matter almost certainly have superior incites to the next guy. As a consequence, this renders the public unable to enact meaningful change because the public lacks agreement on changes that need to be made on an personal level. The public is conflicted in setting priorities and often chooses propriety, often out of instinct ( raising children being the primary reason ). So as a consequence the public relies on governments and corporations to introduce change that could offset some of the consequences. However; the success of corporations relies on predictable human behaviour. Corporations are in business because they are very successful at influencing human behaviour. Corporations help to steer government policies and laws world wide making it easier to create and expand markets( more consumption ). Governments in turn rely on taxes that can be generated from citizen prosperity, due to expanding markets( more consumption ). What do you think? anyone want to jump in on this?
  23. Awoken

    WHO recognising 'gaming disorder'

    I'll also bring up that this is only one manifestation of the bigger problem. This is people battling their blatant or latent obsessive compulsions. However our sedentary ways also manifests it self physically for the over whelming majority as obesity, just looked up the statistics and I was floored. So maybe video game addiction is a rare occurrence, other effects are visually prevalent.
  24. I understand what you are saying but at the same time i am super confused how to actually implement this. I currently when a player connects he equips a Loadout and sends all the needed data to other players - and that works fine for players already in the game to have new players updated. But when a player connects none of the already connected players get properly updated. I don't know if i am missing a callback that unity has or if my setup is completely wrong. If you need code to that let me know but maybe that is a common problem that has an obv solution. Thanks for the help so far @MidnightPacific.
  25. Yesterday
  26. lilington

    Scroll Mem and Text

    Thank you
  27. In Quake 3, they use this method (copy, not XOR), but they still do need to keep track of a history of old states on the client and server. This is because Quake 3 sends the deltas via UDP, which means they can be lost or arrive out of order -- and if simply naively apply deltas that arrive to the client's current state in this situation (where some don't arrive, or arrive in the wrong order), then the client won't correctly reconstruct the server's state. To get rid of the history-buffer concept, you need to use a reliable protocol like TCP, to ensure no deltas are lost and the order of changes is preserved. This is the same regardless of whether you do straight copies, or the XOR trick The history buffer idea is really the key innovation of Quake 3, which allows them to use both UDP and delta encoding reliably. Another alternative to the XOR method is to store differences. e.g. if health was 100 and now it's 80, then you send a delta value of -20 across the network, and the client ADDs this onto their value. This can also help when you've got an extra compression step, as if the changes are small, then the high bits of the detlas will probably contain a long string of zeros too. Google's protobuf system for reading/writing bitstreams is also optimized for situations like this -- IIRC, when writing an integer, the process is something like the following: * if it's smaller than 128, they write a 0 followed by the 7bit value * else they write a 1, and then: ** if it's smaller than 16384, they write a 0, followed by the 14bit value ** else they write a 1, and then (...repeat the pattern...) This causes small values to take up less space in the bit-stream, while large values pay an overhead of a few extra bits. If most of your values are small, then this can add up to a massive space saving. Another trick I've heard of is, when sending deltas that are against some previously known state (like in Quake 3), you use the previous state as the "dictionary" in LZ-style compression. The kinds of compressors build up a list of bit patterns that they reference ("the dictionary"), so if there's a lot of common patterns in the previous state and the new one, then they will be able to compress the data really well. It's a kind of automatic delta encoding. Normally this wouldn't be that great, because the "dictionary" has to normally be stored alongside the compressed file -- but in this situation, both parties already have the dictionary, so it doesn't need to be sent!
  28. Kylotan has nailed most of it. Another way of stating part of the problem, however, is identifying the vast amount of shit you would have to have as your knowledge base that the ML algo would have to look at. In your example, certainly one aspect is "inventory room"... i.e. "how many apples can I carry now?" However, one that is relevant but less obvious is "hut space"... i.e. "how many apples do I have back at home?" If you are already well-stocked in apples at home, you wouldn't bother filling your carrying inventory -- especially if that inventory is going to be more than you have room to unload when you get back home. That said, if you are hungry and standing next to the tree, you might pick one and eat it rather than returning home with to get one. At that point, the utility of time kicks in... e.g. "I'm hungry, and there is an apple right here." But then as things get more complicated, you need more and more info. e.g. "I'm hungry and have few/no apples back in the hut. So I should pick one to eat and more to carry home... but that slows me down and I really need to get home soon to [take a pee][start dinner][watch Wheel of Fortune] so I am not going to bother picking/carrying more now. Or what if the house is surrounded by orcs? Going home to eat an apple or drop off a load doesn't seem like a good idea. So yeah, an ML solution is great at pattern recognition and you could use the player's behavior to train it, but only if your knowledge representation layer is robust enough to keep track of what the player is using to make their own decisions. One classic example that I've heard over and over is how the military was trying to train a system to identify NATO tanks or ships vs. Soviet ones. When deployed, any objects that were in sunny days and had clear photos were identified as NATO and anything in the rain or on hazy days or poor photo quality were identified as Soviet. Why? Because they used really purdy pictures of the NATO shit and bad spy-taken stuff of the Soviet tanks. The system simply learned how to judge the photo quality rather than the shape of the tank. So the lesson is that your ML problem has the potential to be a rabbit hole big enough for a school bus sized rabbit. A standard ML algo like a NN will have no way for you to peer under the hood to determine what is going right or wrong. At least a utility system where you are tweaking weights in formulas, etc. would allow you to inspect and ask "so why did you think to do ASDF?". Those formulas are human readable. My IAUS architecture is good for this (although I haven't tried to deploy it in a ML situation like this because ML is a PITA for an authorial control environment like game designer). For more on my IAUS, see this GDC lecture: http://www.gdcvault.com/play/1021848/Building-a-Better-Centaur-AI
  1. Load more activity
  • Advertisement
×

Important Information

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

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!