• Content count

  • Joined

  • Last visited

Community Reputation

45178 Excellent

About frob

  • Rank
    Moderator - Mobile & Console Development

Personal Information

  1. Different systems support different things. Various tools from the day supported different things. The better engines supported fully-designed, partially-designed, and fully randomized areas. Fully designed areas were carefully mapped out. Partially designed areas had regions you would carefully map out, and others you could leave as open to fill out procedurally. Then you could also have towers with rooms and zones that were fully procedural. The fact that you mentioned Roguelike in your description generally implies it is nearly all rooms and mazes. Those are the easiest to automatically generate. Most Roguelike worlds are randomized levels of rooms and passageways, with small areas defined as special rooms, and occasionally as special levels. A special area may have wide areas of pre-defined stuff yet also have wide areas of procedurally generated stuff. There are (and were) many MUD and MUSH worlds that work that way. Hundreds of players in the same room rarely means hundreds of people in the same small area of the dungeon at once, they don't get too crowded.
  2. I think you just described the MUD and MUSH world. Some have been running for decades with hundreds of players online at any time, such as this one. I've heard compelling arguments that the MMORPG games of today are little more than highly graphical MUDs.
  3. Some games have used TTS for quite some time. It isn't fancy, but consider how Animal Crossing has done that for more than a decade. The text doesn't sound like professional voice acting, but when you've played for a while you can understand every utterance. There are many games where TTS is thematically appropriate. Games set in computerized worlds would be a great natural fit. Also less natural, but many text-based games have used it for years, particularly with vision-impaired players. So I think there is an item 0 on your list, the context of the synthesized speech.
  4. Be careful with what you described. The only reason the A* optimization works is because of the geographic spatial format of the map matches the heuristic function. The heuristic provides a sort, allowing the first match to be the best match. The more the nodes drift away from the actual map distances, the more the optimization breaks down. With a regular grid where cells represent motions exactly, A* works great because the heuristic is ideal. You can always estimate the amount left to reach the target by using the map distance. With nodes representing areas, the heuristic is more difficult because it no longer perfectly represents the sorting criteria. When the heuristic breaks down so it no longer represents the approximate best remaining solution, then you need to revert back to plain old Dijkstra's shortest pairwise path algorithm.
  5. Leaving a company at a critical moment

    For the ethics component, I don't think the things you mentioned are a concern. In my view, workers should be just as loyal to the companies as the companies are loyal to the workers. 50 years ago corporate loyalty meant pension plans for life, insurance for life, and contractually guaranteed partial plans if you were laid off, and workers were generally "company men", loyal for life. 30 years ago that meant companies giving heavy investments in retirement plans and good benefits, but nothing permanent with an expectation of a few months or perhaps a few weeks notice from either side. These days company loyalty means I'm loyal all the way up through payday, and I know I may be called into a layoff meeting because the corporate earnings call is next week. Why were you offered another job? Were you looking for another job? Did they headhunt you? If you were actively looking for an exit strategy anyway then take it. Are you happy there? If you find joy in your work you may discover the new workplace does not fill the same needs, leaving you better paid but unfulfilled. On the other side, if you aren't happy with the work you've got then a change may be good. The fact that you don't think your current company will be there in a year is a major issue. While it can sometimes pay to be the last person in the office, usually it means getting burned. Having a good job lined up means you don't end up unemployed with an emergency job search, so that's a good reason by itself. The extra 12K per year is good, and depending on your location on the globe that can be significant. But I'd wonder why the higher pay and better benefits? Is your current company that much below market? Have they not given promotions up at market rate? Is the new company more desperate? But be careful, you could be walking into a bad situation where they're looking for an emergency person to do a Herculean task. Go in with your eyes open looking for issues. Sometimes good deals and offers are made out of desperation instead of the much better reason of the company actively growing and looking for talent. If generally want to stay leave your company and are otherwise happy there, you might also consider another tactic. Without mentioning the job offer, tactfully ask your boss for a raise similar to what you expect at the other job, plus some extra as a buffer in case the company closes up within a year. Given wages and benefits, that may be 25K, or possibly higher, plus the additional time off. Be extremely careful about approaching it, the same as you would any other raise or increase. Do it in the morning, with mild trepidation, explain that a new project is coming up, you've got a new baby in the home, your wife is through maternity coverage, and you feel it would be fair given your needs, your past contributions, and your expected role on the new project. Make a case you think you're worth that much. Just be careful not to mention the other job, and do not make it to be a threat. Giving in to demands while finding a replacement is a common tactic for companies, they'll dump you when they get the replacement. Let the boss think you have some good reasons for needing significantly more money, not that you're about to bolt. Assuming you want to stay there and your current boss accepts the wage increase, congratulations, you'll be making more and staying where you are happy. If he says no or doesn't accept it well, that's another good reason to accept the new job offer.
  6. C++ precision

    Truncation like that is one way to do it, but most applications don't want that. For an example, a value of 123.000001 that has a floating point rounding error beyond the value would be truncated to 123.00. However, a value of 122.9999999 that has a rounding error below the intended value would unexpectedly go to 122.99 instead of the correct 123.00. There are several different rounding modes. The ones typically used in computers (and supported by hardware) are: Round to nearest, ties to even. This is also called "banker's rounding". Round to nearest, ties away from zero. Round up Round down Round to zero, aka truncation. This is the one you're doing. The default mode -- which is also the version humans typically expect -- is the first. The programming language provides string manipulation functions that correctly round the value. The printf family, the stream family precision functions, and Boost's string manipulation families all have the code to correctly round the result. The first two are part of the language directly, there is no extra cost to use them. The Boost version is an extremely common library I've had available in most professional projects. They are already present and included in the code. Use the tools that are available to you.
  7. As far as I can see, there is nothing specific on the matter. It looks like the standard defines several critical aspects, such a the numeric base (either 2 or 10) the sign/coefficient/quotient requirements, ranges, and so forth. Looks like you've got that covered. Section 5.3 covers the conversion, but doesn't provide a specific process. The conversion merely needs to happen and be properly rounded if narrower, exactly precise if wider. Nothing specific about denormalized numbers so I presume the rules are the same. I'm not exactly sure about your example values since an implementation MAY use reserved exponents used for +/- INF, SNAN/QNAN, +/- zero, and denormalized values, using the two lowest values for the markers. That's why 8-bit coefficients have a range of -126 to +127 instead of the more typical -128 to +127, 11-bit coefficients range from -1022 to +1023 instead of the more typical -1024 to +1023. Implementations are allowed to extend beyond that because the standard is careful to define the represented values rather than the encoding. In your example you give a 16-bit float with a 5 bit coefficient, but I think the representation allows for e-05 instead of e-08 since the two lowest values are reserved (excluding denormals). The 7-bit coefficient would have values -64 and -63 reserved so range from -62 to +63, meaning the lowest number would be e-19 rather than e-28 (excluding denormals). In that regard I agree with your assessments. Denormalized numbers aren't treated differently other than a special value for the coefficient. For a denormalized number I'd expect the mantissa to be extended or reduced in the same manner, rounding the mantissa if narrower, extending with zeros if wider.
  8. Registering your own copyright won't help with that. For that concern you need to talk with an actual lawyer, and do research on things like legal clearance, legal risk tolerance, and documentation trails that are legally acceptable. Everybody's situation is different. Laws vary by location so advice you get on the Internet probably has differences with the law in your spot on the globe. Those are why you need an actual human lawyer who understands your actual situation and your actual laws, your actual needs and concerns. Advice from strangers on the internet, even lawyers on the internet, don't know all those details without in-depth discussions.
  9. Why A.I is impossible

    The biggest problem here comes down to definitions. What is an AI? What does it mean to have an AI that is learning, or that is self aware? What is a "real" AI? Turing's original question was "can machines think?", and his interpretation was that if a human could successfully imitate a human. Even though his question asked one thing, the test he proposed was if the machine could convince an interrogator that it was human. Later papers he asked similar questions about if a machine could demonstrate intelligent behavior. The original Turing Test has been passed and exceeded many times over. People create newer and bigger and better tests. Each new test tends to be: the things we have today are not AI, but the promise of the future is an AI. As for consciousness and awareness, that's a very tricky one. I had one presenter on the topic present it this way: Let's not look at today. Let's look at a machine built in the future. Imagine a machine of the future that is built to look exactly like a human, designed to move exactly like a particular human. The machine has input that mimics human senses in all ways, not just smell and touch and vision, but input that responds as hunger and thirst and pain and space and motion and everything else. Imagine the AI for the machine has been trained specifically based on that human's entire life experiences. The AI can recall all the things the human can recall, it has imprints but cannot recall the things the human has forgotten. In all measurable ways the AI and the human are identical. Given identical stimuli the AI would behave identically to the human across the human's lifetime up until that time. When the experiment begins the AI can continue to learn from new experiences and modify its behavior in a fashion similar to actual humans. The two are placed side by side and the experiment begins. Up until that instant they are effectively the same person. As far as we can externally observe, the machine believes itself to be that human standing next to it. When that experiment begins, anyone questioning or observing the two would say they are identical. For a time they behave nearly identically, with the first divergence being the moment they stand next to each other. The two will drift apart as their inputs change and time passes. Since the machine behaves in all ways the same as the human would, is the AI alive, or is it a machine, is it both, is it something else? Is that machine actually thinking, or is it simulating the process of thinking, and is there a difference between the two? Since it seems to believe it is conscious and believes it is self aware, is it actually self aware and conscious? On the topic of souls, does the machine have a soul, why or why not? Those definitions about what it means to be human (or not) become very difficult to answer. Going further, Turing's original topics were to see if an AI could perform as a human. But later people asked if an AI should be exactly as good as humans to be considered intelligent. Does that include human failings? Personally I want a self driving car's AI to be far better than humans. I want a medical AI to far outstrip any physician today, being an expert on all fields. I expect that incorrect judgments will still be made because we cannot predict all things perfectly, but I want most AI systems to be far better than humans would ever be. In games, I want my AI to provide an entertaining experience, but I want it to perform worse than humans. I absolutely do not want an AI that always makes perfect headshots, always moves to precisely the correct locations, always responds with the mathematically ideal way. As the game begins I expect the AI to be very forgiving so the game is approachable. As the game progresses it increases in difficulty. After time I expect the AI to provide a difficult challenge and (depending on the game) defeat me occasionally, but I also expect to be able to win the game and have a satisfying experience in the process. So much depends on the definitions and the context. What makes a good AI in one situation is a terrible AI in another situation. Calling something a machine or an algorithm versus calling it an intelligence is a very difficult line to draw, and in some viewpoints that line does not exist at all.
  10. You talk to a lawyer because you've created a bit of a mess. In the mean time while you wait to talk to a lawyer, keep documentation of where you got every single asset. Keep documentation of the license you acquired it under, the website and URLs or people you obtained it from, the original author listed in the web site, and copies of the license. It is sadly common for people to get content under one license and then re-release it under a different license. Many photographs and designs that are licensed end up getting re-distributed where someone claims they are freely available. Having a documentation chain that shows you obtained the file from a specific source under a specific license can help you avoid costly problems later. If the file was owned by someone else and unlawfully redistributed the license trail shows you still acted in good faith, then you get to negotiate new terms with the proper owner. Be wary of sources that claim to be put into the public domain. Some "anti-copyright" statements are not legally binding. Others correctly release economic and property rights but fail to release rights like moral rights for attribution, integrity, or author's reputation, and more. While the person releasing the content is unlikely to sue, there are legal rights that are tricky to revoke. They can be an issue if someone wants to buy/license your game outright or buy your company. If you don't have documentation that you have the proper rights, you're asking for trouble if you use them. Keep them documented. As for the act of registering a copyright, that part is easy. Go to, fill out some forms, include the first 25 and last 25 pages (usually that means the file with main() and another random file), and pay the $35 fee. It's $55 if certain other conditions apply. Wait a few months, get a certificate. File the certificate in a drawer somewhere. Your copyright is registered. Enforcing your registered copyright is much more difficult. That requires going through the courts, which is expensive and time consuming, winning the battle or negotiating a settlement, and extracting money which often requires collections services.
  11. I think a high number of applicants points the other direction. They're applying for jobs. That could mean the people are struggling to find jobs, or are having trouble keeping their jobs. It may mean they're dissatisfied with something related to the job, such as lower wages or difficulty getting promoted. People who are comfortable in their careers (getting responsibilities and wages they prefer) tend to stay in the jobs as long as they are able.
  12. Need Advice for Education (Programming)

    If you limit yourself to learning only what the teachers present, you won't learn very much. Take the courses and learn C++ on your own while in the classes. For some classes you may implement routines both in their preferred language and again in C++. Few schools focus on C++ any more since most of the programming world has moved on. C++ is one of the better choices these days for systems-level work and most games use C++ for exactly that reason, but that doesn't mean it is the only language you should learn. Experienced programmers should be comfortable working with a long list of languages, and should learn a new one every year or two. I've recommended against hiring several programmers with 10+ years of experience but who only knew C++ and not any other language. We need people who can help into the future, not people who are exclusively stuck in the past, cannot work on the tools, or will otherwise struggle with the work. Learn the languages on your own, you'll be doing that your entire career. Focus on the algorithms and data structures, then learn whatever you can about C++ and other programming languages on your own. The algorithms and data structures will be applicable to all languages. Even when C++ and Java and C# and other languages have all fallen out of favor, the algorithms and data structures will still be applicable.
  13. std::vector takes two parameters, but usually the second is set to a default of std::allocator. If the compiler is looking for a second parameter and you're using the default, try: extern std::vector <std::string, std::allocator<std::string> > w_nawiasie[10]; Otherwise if you're using a custom allocator, use that instead.
  14. C++ use class

    Unexpected tokens like that often mean issues on the line before the error, an expression that wasn't finished.
  15. I believe each white line represents the change due to each animation clip. I'm not sure how they come up with the squiggles, probably the sum of the motions. Each white line fades in/out based on the transition curve. It can be useful to visualize and avoid an abrupt transition between animations, or to identify when an animation is moving back to idle or stable state. The person editing the transition can use the visualization to align the steady portions of the animations or otherwise help provide a more continuous transition.