Khatharr

Members
  • Content count

    1934
  • Joined

  • Last visited

Community Reputation

8814 Excellent

About Khatharr

  • Rank
    Contributor

Personal Information

  • Interests
    Programming
  1. Duck typing or just compositional objects (like in JS - similar principle) could be used as an easy substitute. In duck typed languages an object will respond to any valid member operation regardless of its type. For example, in Ruby: class Dog def speak puts "Woof!" end end class Cat def speak puts "Meow!" end end ary = [ Dog.new, Cat.new ] for animal in ary animal.speak end Output is as expected.
  2. So, I have this question about the future of software...

    Some day you can tell your great grandchildren about the golden age when the devices that you bought and owned did what you told them to instead of what the corporate overlords tell them to do. And then the Ministry of Consumer Support will come and kill you for spreading dissent. Oh yes. This is actually an increasingly severe problem and it's resulting not just in idiotic inconveniences, but in many places it's turning into transparent and shameless rent seeking. It's a pity that the government is somewhere around 500 to 600 years behind on understanding tech markets, so instead of breaking up platforms to allow competition to solve problems, the FCC is toying with the idea of castrating the fucking internet just for shits and giggles.
  3. Any hope for Indie developers?

    It's a blatant rip-off. It's great. Regarding Steam and the app stores and the insipid, petulant cry for "regulation"... Think about 10 years ago. How often did you come across a good game? How often is it now? No, really. Go look at your accounts and actually count them. If you're still a gamer then there are more now than there were then. Why? Because the entire market is expanding. The old model could NEVER have sustained this growth, so why the hell would we go backwards? For every whiner who gets butt-hurt about games they don't want to play and leaves there are 100 new customers buying games that they do want to play. It doesn't matter how badly you want it, this distribution market is not collapsing any time soon. These people are making more money than god EVERY SINGLE DAY. If you can get over the irrational resentment about someone other than you making money then the upshot of this situation is that you have the opportunity to very, very easily find and buy more and better games than before for less money. If you don't want to "wade through a sea of garbage" then try thinking about an actual search strategy rather than diving thoughtlessly into the unsorted mass. Scan the top seller/top rated lists for genres that interest you. Find a curator who shares your tastes, either on Steam or on YouTube. Watch E3 indies videos and jot down things that interest you. Most importantly, stop caring about shit that doesn't interest you. It doesn't cost you anything unless you decide to sit there and fuss about it like a child. The complaints on Steam are absolutely ridiculous. Most days SUF is nothing but asshole after delusional asshole sitting there just drenched in entitlement and nerd rage. This one wants to ban anime games, this one wants to ban indie games, this one wants to ban early access, this one wants to ban Call of Duty, for fuck's sake. A cacophony of drooling, authoritarian pricks who can't tolerate a world that doesn't cater exclusively to their preferences. The environment has changed, and you can adapt or you can suffer. The only reason to just wade blindly into the database is if you've got the bizarre idea that you're going to find some tragically undersold, low-rated game that just happens to be a misplaced gem. It's not going to happen. There are people all over the world looking at these games day in and day out with literally autistic dedication. If there's something even remotely worthwhile in a niche you're even passively interested in, a trivially strategic search will reveal it to you. If you actually look for things that you're interested in rather than throwing yourself at the DB sideways then you'll very likely hear about it 6 to 12 months prior to its release. But hey, even if you can't be assed to make an effort what are you missing comparatively? Don't even look then, just make note of things that other people talk about and check on what interests you... You know, like you did when it was brick and mortar? That still works too. Jesus fucking Christ, you don't even have to get out of your god damned chair anymore! So the idea that these markets should or will change to accommodate severely outdated notions of content delivery is ridiculous. These people opened the floodgates and the result is that they're drowning in cash. Why the hell would they do anything to change that? Even Steam Direct isn't about getting rid of meta-marketers or ensuring quality; it's about making even more money for Valve. The scuttlebutt is near-transparent publicity because it's TRIVIALLY SIMPLE to whip the idiot army into a frenzy over nothing at all and then sell them a solution which, "Oops!" just happens to make you a hell of a lot more money. So if you're sincerely thinking that this is some kind of progress or some powerful blow for your authoritarian view of what games people should be allowed to sell or play, well... The one that got played was you.
  4. Computer Setup

    In my experience UE4 is definitely the biggest performance hog. You definitely want it on an SSD (and the projects as well). I'm running a quad core 3.8GHz with 8GB of RAM and a GTX 750 Ti (which is now considered "old" by most). UE4 runs acceptably on that as long as the project is on the SSD, everything else (PS, Blender, Unity, VS) cooks along pretty nicely. You should be able to put together a better machine than mine for under $500 US, assuming you already have monitor/keyboard/desk/etc.
  5. https://en.wikipedia.org/wiki/Overengineering
  6. Well, you could use enum values, but only if you're okay with the tokens potentially becoming incorrect or else being vague like WEAPON_AXE_2. Honestly there probably aren't many cases where you need to refer to a specific weapon type rather than just a variable with an ID in it. If you like you could just write something to look up the ID by name like Apoch said, but you're going to pay some perf cost for it, so you really don't want to make it common.
  7. You also don't know the refresh rate of the monitor.
  8. About Europe outside of Europe

    If cooperation isn't working out we can certainly go back to colonialism.
  9. I'm not sure that it's your interpolation causing that. I'd output a frame log and try to find the specifics of what's going on before proceeding.
  10. D3DX was deprecated a long time ago and is not a part of the SDK. I don't think you can find it anywhere anymore, unless you want to dig around in the dark corners and alleyways of the interbutts and see what turns up.
  11. If you're running an update and then rendering repeatedly until the next one, then put the render in the inner-loop instead of the update. (That was my take, anyway.)
  12. Dewitters Game Loop - Understanding

    You do want to think about the ABA problem if you're polling. That's not really what would be described as a latency problem, but the slower your simulation rate the more relevant it becomes. If you're just using the analog stick to move something around then it's not a big deal because the input pattern is the stick being held in some direction for a period of time, but if your game deals with rapid button presses like Street Fighter or Parappa then you definitely want to collect input messages and then process them during the update. That issue will be exacerbated at 30hz compared to 60. One approach I've used to deal with this is to have my input class set up such that each registered key has several methods for checking its state. Messages from the OS accumulate in a buffer until the tick begins, at which point the input object is updated. The update sets the state representation of each registered key and they may then be queried using: triggered() //this key went from up to down since the last poll pressed() //this key is down right now (during the poll) released() //this key went from down to up since the last poll note that a key could be triggered, pressed, and released at the same time if the player releases the key after the previous poll and then pushes it back down again before this poll. It's also possible for the player to trigger and release the key between polls, in which case it would not be "pressed", but would be triggered and released.
  13. Your code is running multiple logic updates and then rendering a single interpolated frame. My code is running a logic update and then rendering multiple interpolated frames until the next tick is due. In both cases the tighter loop can be skipped if the time is already elapsed, so it may come out similarly, but I felt that this approach was more intentional.
  14. Try this out constexpr Int32 logicFPS = 30; constexpr Int32 msPerTick = 1000 / logicFPS; constexpr float ticksPerMS = 1.0f / msPerTick; //to avoid frivolous divisions sf::Clock mainClock; Int32 nextTickTime = 0; while(running) { Int32 tickStart = nextTickTime; nextTickTime += msPerTick; sf::Vector2f displacement(0, 0); if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { displacement.y--; } if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { displacement.y++; } if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { displacement.x--; } if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { displacement.x++; } displacement.normalize(); //this is not an sfml function, so you'll have to write one (divide the vector by its own length) displacement *= testSpriteSpeed; auto prevPos = testSpritePos; testSpritePos += displacement; for(Int32 now = mainClock.getElapsedTime().asMilliseconds(); now < nextTickTime; now = mainClock.getElapsedTime().asMilliseconds()) { float alpha = float(now - tickStart) * ticksPerMS; sf::Vector2f offset = displacement * alpha; testSprite.setPosition(prevPos + offset); mainWindow.clear(); mainWindow.draw(testSprite); mainWindow.display(); } } It's untested so it may have a snag or two, but I think this is closer to what you're aiming for.
  15. Once you learn to use it and get the boilerplate handled DX11 is easier to use than DX9. If your codebase is anything like sane then switching from 9 to 11 shouldn't be too difficult. DX12 is a different animal altogether. DX12 is not "easy" and is not intended to be. It's a much lower-level graphics API. If you're looking for a low level API then Vulkan may be a better choice than DX12, since they're essentially the same thing but Vulkan has wider support, not just for linux and android, but also for pre-10 versions of Windows.