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. 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.
  3. Today
  4. 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.
  5. 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!
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.)
  11. 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.
  12. 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.
  13. @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 ].
  14. 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.
  15. 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?
  16. 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.
  17. 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.
  18. Yesterday
  19. lilington

    Scroll Mem and Text

    Thank you
  20. 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!
  21. 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
  22. Randy Gaul

    Raycast From Camera To Mouse Pointer

    Glad you got it working! Just posting up a reference in case anyone else comes along in this thread: https://github.com/RandyGaul/cute_headers/blob/master/cute_math.h#L630-L649 void compute_mouse_ray( float mouse_x, float mouse_y, float fov, float viewport_w, float viewport_h, float* cam_inv, float near_plane_dist, v3* mouse_pos, v3* mouse_dir ) { float aspect = (float)viewport_w / (float)viewport_h; float px = 2.0f * aspect * mouse_x / viewport_w - aspect; float py = -2.0f * mouse_y / viewport_h + 1.0f; float pz = -1.0f / tanf( fov / 2.0f ); v3 point_in_view_space( px, py, pz ); v3 cam_pos( cam_inv[ 12 ], cam_inv[ 13 ], cam_inv[ 14 ] ); float pf[ 4 ] = { getx( point_in_view_space ), gety( point_in_view_space ), getz( point_in_view_space ), 1.0f }; tgMulv( cam_inv, pf ); v3 point_on_clipping_plane( pf[ 0 ] , pf[ 1 ], pf[ 2 ] ); v3 dir_in_world_space = point_on_clipping_plane - cam_pos; v3 dir = norm( dir_in_world_space ); v3 cam_forward( cam_inv[ 8 ], cam_inv[ 9 ], cam_inv[ 10 ] ); *mouse_dir = dir; *mouse_pos = cam_pos + dir * dot( dir, cam_forward ) * vfloat( near_plane_dist ); }
  23. Hi guys, I've been struggling to create a function to draw an arrow with 2 lines making up the arrowhead. The challenge is that I somehow can't get the rotation right. I've pasted the code below and an image of the result. Findings so far, when I replace the 3x3 part of the transform matrix to identity, I get the same visual result. Also when I switch colums A and C in the matrix, this specific arrow looks good (with is pointing in the positive X direction). Any input would be appreciated. bool CDebugDraw::AddArrow(const CR_VECTOR3 &pPos1, const CR_VECTOR3 &pPos2, const CR_VECTOR3 &pColor, const bool pDepthEnabled, const bool pPersistent, const uint64_t pLifeTime) { if(!AddLine(pPos1, pPos2, pColor, pDepthEnabled, pPersistent, pLifeTime)) return false; /* p1 ------- X / | \ | / | \ | / | \ | p2 -----|-----p3 | Z | | | | p0 */ CR_VECTOR3 arrowDir = pPos2 - pPos1; arrowDir.Normalize(); // model space CR_VECTOR3 p1 = CR_VECTOR3(0.0f, 0.0f, 0.0f); CR_VECTOR3 p2 = CR_VECTOR3(0.2f, 0.0f, -0.2f); CR_VECTOR3 p3 = CR_VECTOR3(-0.2f, 0.0f, -0.2f); // transformation: translate and rotate CR_VECTOR3 transl = pPos2; CR_VECTOR3 colA = arrowDir; CR_VECTOR3 tVec; if(colA.x != 0 && colA.z != 0) tVec = CR_VECTOR3(0.0f, 1.0f, 0.0); else tVec = CR_VECTOR3(0.0f, 0.0f, 1.0f); CR_VECTOR3 colB = CMathHelper::CrossVec3(colA, tVec); CR_VECTOR3 colC = CMathHelper::CrossVec3(colB, colA); CR_MATRIX4X4 transform; transform.m11 = colA.x; transform.m12 = colB.x; transform.m13 = colC.x; transform.m14 = 0.0f; transform.m21 = colA.y; transform.m22 = colB.y; transform.m23 = colC.y; transform.m24 = 0.0f; transform.m31 = colA.z; transform.m32 = colB.z; transform.m33 = colC.z; transform.m34 = 0.0f; transform.m41 = transl.x; transform.m42 = transl.y; transform.m43 = transl.z; transform.m44 = 1.0f; // transform = CMathHelper::ComposeWorldMatrix(transform, CR_VECTOR3(1.0f), CR_VECTOR3(0.0f, 90.0f, 0.0f), pPos2); // transform to worldspace p1 = CMathHelper::TransformVec3Coord(p1, transform); p2 = CMathHelper::TransformVec3Coord(p2, transform); p3 = CMathHelper::TransformVec3Coord(p3, transform); if(!AddLine(p1, p2, CR_VECTOR3(1.0f, 0.0f, 0.0f), pDepthEnabled, pPersistent, pLifeTime)) return false; if(!AddLine(p1, p3, CR_VECTOR3(1.0f, 0.0f, 0.0f), pDepthEnabled, pPersistent, pLifeTime)) return false; if(!AddCross(p2, 0.02f, CR_VECTOR3(0.0f, 0.0f, 1.0f), pDepthEnabled, pPersistent, pLifeTime)) return false; if(!AddCross(p3, 0.02f, CR_VECTOR3(0.0f, 0.0f, 1.0f), pDepthEnabled, pPersistent, pLifeTime)) return false; return true; } Incorrect result: Aimed/ correct result (independent of arrow direction):
  24. Oberon_Command

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

    So what? Again, it's worth noting that the Galactic Empire and the First Order are not the same organization. Probably also worth noting that TFA takes place 30 years after ROTJ. I don't think the First Order troopers need to be constrained by the legacy of the Empire troopers. I can't remember seeing any stormtroopers with flamethrowers in the original trilogy, either. Which stormtroopers in the film have a hand-to-hand weapon as their primary weapon? Even the stormtrooper who used that electric rod thingy threw his blasters down first. Finn is only using a lightsaber in that scene because he doesn't have any other weapon.
  25. Hi everyone! Two Magic Item Tech games have joined the "Summer Sale" on Steam and itch.io I Am Overburdened The silly roguelike full of crazy artifacts and a "hero" who has 20 inventory slots, is 40% off so currently it's only 2.99$ (may vary based on region, base price is 4.99$) ! You can buy it at Steam or at itch.io. Go go go dungeon crawlers !!! Operation KREEP The best couch co-op multiplayer Alien satire action game, is 83% so currently it's only 0.50$ (may vary based on region, base price is 2.99$) !!! If you are a sucker for retro party games like Bomberman (Dyna Blaster) or Battle City make sure to give it a try! You can buy it at Steam or at itch.io. Remember: In space no one can hear you KREEP... I hope you check them out and they will be to your liking ! P.S.: Magic Item Tech also has a Steam developer page now. Feel free to follow me there to receive first hand news about my games, updates and sales. Thanks for taking the time to read my post, have an awesome summer full of fun Cheers!
  26. Gnollrunner

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

    "maybe" sounds like a hand-wave again. We didn't see storm-troopers in any of the previous movies walking around with melee weapons. The point is to get away with even wielding a hand to hand weapon as your primary on the battlefield and not instantly being killed, you would have to have super human skill and/or abilities. Therefore it can be assumed that Kylo Ren had the requisite skill.
  27. ChaosEngine

    WHO recognising 'gaming disorder'

    Agreed. Without question. This is well worth a watch.
  28. ChaosEngine

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

    Regarding Ren and the lightsaber... my impression was always that he was powerful but lacking finesse. Everything about his character up to that point screams this.... the crossguard lightsaber is a great example. It's a shoddily constructed mess with unnecessary ornamentation. It's the Star Wars equivalent of a mall bought katana with a dragon on it. There's nothing in TFA that actually establishes him as being any good with a lightsaber. Even the "stopping a bolt in mid air" is really good characterisation. Every other force user we've ever seen, would either deflect it with a saber or just quietly absorb it (Vader in the Empire dinner scene). Ren goes out of his way to do the most flashy thing he can, but we also don't see him deflect the bolt. He's a fanboy that desperately wants to impress the ghost of his idol. The movie really isn't subtle about this. Even the throne room fight scene.... do you really think Vader would have had that much trouble? Ren is just not that good with a lightsaber and neither is Rey.
  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!